From 3c386dbb0d25c022c398519e915ff6926a6f9bf2 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 19 Oct 2016 16:53:39 -0700 Subject: [PATCH 1/2] deps: Intl: ICU 58 bump: configure/LICENSE/docs * bump to ICU 58.1 - update URL / hash * does not attempt to reduce size - yet * patch to work around http://bugs.icu-project.org/trac/ticket/12822 ( compile issue on Windows) * Fix ICU shrinker to delete old license.html file (update to https://github.com/nodejs/node/pull/8674 ) Fixes: https://github.com/nodejs/node/issues/7844 PR-URL: https://github.com/nodejs/node/pull/9234 Reviewed-By: James M Snell --- LICENSE | 93 +- configure | 4 +- tools/icu/README.md | 15 +- tools/icu/patches/58/source/i18n/digitlst.cpp | 1095 +++++++++++++++++ tools/icu/shrink-icu-src.py | 17 +- 5 files changed, 1162 insertions(+), 62 deletions(-) create mode 100644 tools/icu/patches/58/source/i18n/digitlst.cpp diff --git a/LICENSE b/LICENSE index 254d5484323b93..4ffd4869b2360a 100644 --- a/LICENSE +++ b/LICENSE @@ -98,12 +98,53 @@ The externally maintained libraries used by Node.js are: - ICU, located at deps/icu-small, is licensed as follows: """ - ICU License - ICU 1.8.1 and later + COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + + Copyright © 1991-2016 Unicode, Inc. All rights reserved. + Distributed under the Terms of Use in http://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. + + --------------------- + + Third-Party Software Licenses + + This section contains third-party software notices and/or additional + terms for licensed third-party software components included within ICU + libraries. + + 1. ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1995-2016 International Business Machines Corporation and others - All rights reserved. Permission is hereby granted, free of charge, to any person obtaining @@ -134,54 +175,6 @@ The externally maintained libraries used by Node.js are: All trademarks and registered trademarks mentioned herein are the property of their respective owners. - --------------------- - - Third-Party Software Licenses - - This section contains third-party software notices and/or additional - terms for licensed third-party software components included within ICU - libraries. - - 1. Unicode Data Files and Software - - COPYRIGHT AND PERMISSION NOTICE - - Copyright © 1991-2016 Unicode, Inc. All rights reserved. - Distributed under the Terms of Use in - http://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 - (a) this copyright and permission notice appear with all copies - of the Data Files or Software, - (b) this copyright and permission notice appear in associated - documentation, and - (c) there is clear notice in each modified Data File or in the Software - as well as in the documentation associated with the Data File(s) or - Software that the data or software has been modified. - - 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. - 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under diff --git a/configure b/configure index fdbda66320e4ee..02e6296b56f8af 100755 --- a/configure +++ b/configure @@ -967,8 +967,8 @@ def glob_to_var(dir_base, dir_sub, patch_dir): def configure_intl(o): icus = [ { - 'url': 'https://ssl.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.zip', - 'md5': 'f797503ecaebf1d38920013dc7893066', + 'url': 'https://ssl.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.zip', + 'md5': 'd6476b355f66a11fbe12db1d61d90d69', }, ] def icu_download(path): diff --git a/tools/icu/README.md b/tools/icu/README.md index 2e53563cddf0f7..bc524aecedc7ca 100644 --- a/tools/icu/README.md +++ b/tools/icu/README.md @@ -8,11 +8,12 @@ ```shell ./configure \ --with-intl=small-icu \ - --with-icu-source=http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.zip + --with-icu-source=http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz make ``` -(the equivalent `vcbuild.bat` commands should work also.) +(The equivalent `vcbuild.bat` commands should work also. Note that we use the `.tgz` and not the `.zip` here, +that is because of line endings.) - (note- may need to make changes in `icu-generic.gyp` or `tools/icu/patches` for version specific stuff) @@ -58,6 +59,14 @@ new Intl.DateTimeFormat('es',{month:'long'}).format(new Date(9E8)); - You are ready to check in the updated `deps/small-icu`. This is a big commit, so make this a separate commit from other changes. +- Now, rebuild the Node license. + +```shell +# clean up - remove deps/icu +make clean +tools/license-builder.sh +``` + - Now, fix the default URL for the `full-icu` build in `/configure`, in the `configure_intl()` function. It should match the ICU URL used in the first step. When this is done, the following should build with full ICU. @@ -70,7 +79,7 @@ make make test-ci ``` -- commit the change to `configure`. +- commit the change to `configure` along with the updated `LICENSE` file. ----- diff --git a/tools/icu/patches/58/source/i18n/digitlst.cpp b/tools/icu/patches/58/source/i18n/digitlst.cpp new file mode 100644 index 00000000000000..7bcf689b9d4991 --- /dev/null +++ b/tools/icu/patches/58/source/i18n/digitlst.cpp @@ -0,0 +1,1095 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +********************************************************************** +* Copyright (C) 1997-2015, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +* File DIGITLST.CPP +* +* Modification History: +* +* Date Name Description +* 03/21/97 clhuang Converted from java. +* 03/21/97 clhuang Implemented with new APIs. +* 03/27/97 helena Updated to pass the simple test after code review. +* 03/31/97 aliu Moved isLONG_MIN to here, and fixed it. +* 04/15/97 aliu Changed MAX_COUNT to DBL_DIG. Changed Digit to char. +* Reworked representation by replacing fDecimalAt +* with fExponent. +* 04/16/97 aliu Rewrote set() and getDouble() to use sprintf/atof +* to do digit conversion. +* 09/09/97 aliu Modified for exponential notation support. +* 08/02/98 stephen Added nearest/even rounding +* Fixed bug in fitsIntoLong +****************************************************************************** +*/ + +#if defined(__CYGWIN__) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + +#include "digitlst.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/putil.h" +#include "charstr.h" +#include "cmemory.h" +#include "cstring.h" +#include "mutex.h" +#include "putilimp.h" +#include "uassert.h" +#include "digitinterval.h" +#include "ucln_in.h" +#include "umutex.h" +#include +#include +#include +#include +#include + +#if !defined(U_USE_STRTOD_L) +# if U_PLATFORM_USES_ONLY_WIN32_API +# define U_USE_STRTOD_L 1 +# elif defined(U_HAVE_STRTOD_L) +# define U_USE_STRTOD_L U_HAVE_STRTOD_L +# else +# define U_USE_STRTOD_L 0 +# endif +#endif + +// Patch for http://bugs.icu-project.org/trac/ticket/12822 +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN +# include +# else +# include +# endif +#endif + +// *************************************************************************** +// class DigitList +// A wrapper onto decNumber. +// Used to be standalone. +// *************************************************************************** + +/** + * This is the zero digit. The base for the digits returned by getDigit() + * Note that it is the platform invariant digit, and is not Unicode. + */ +#define kZero '0' + + +/* Only for 32 bit numbers. Ignore the negative sign. */ +//static const char LONG_MIN_REP[] = "2147483648"; +//static const char I64_MIN_REP[] = "9223372036854775808"; + + +U_NAMESPACE_BEGIN + +// ------------------------------------- +// default constructor + +DigitList::DigitList() +{ + uprv_decContextDefault(&fContext, DEC_INIT_BASE); + fContext.traps = 0; + uprv_decContextSetRounding(&fContext, DEC_ROUND_HALF_EVEN); + fContext.digits = fStorage.getCapacity(); + + fDecNumber = fStorage.getAlias(); + uprv_decNumberZero(fDecNumber); + + internalSetDouble(0.0); +} + +// ------------------------------------- + +DigitList::~DigitList() +{ +} + +// ------------------------------------- +// copy constructor + +DigitList::DigitList(const DigitList &other) +{ + fDecNumber = fStorage.getAlias(); + *this = other; +} + + +// ------------------------------------- +// assignment operator + +DigitList& +DigitList::operator=(const DigitList& other) +{ + if (this != &other) + { + uprv_memcpy(&fContext, &other.fContext, sizeof(decContext)); + + if (other.fStorage.getCapacity() > fStorage.getCapacity()) { + fDecNumber = fStorage.resize(other.fStorage.getCapacity()); + } + // Always reset the fContext.digits, even if fDecNumber was not reallocated, + // because above we copied fContext from other.fContext. + fContext.digits = fStorage.getCapacity(); + uprv_decNumberCopy(fDecNumber, other.fDecNumber); + + { + // fDouble is lazily created and cached. + // Avoid potential races with that happening with other.fDouble + // while we are doing the assignment. + Mutex mutex; + + if(other.fHave==kDouble) { + fUnion.fDouble = other.fUnion.fDouble; + } + fHave = other.fHave; + } + } + return *this; +} + +// ------------------------------------- +// operator == (does not exactly match the old DigitList function) + +UBool +DigitList::operator==(const DigitList& that) const +{ + if (this == &that) { + return TRUE; + } + decNumber n; // Has space for only a none digit value. + decContext c; + uprv_decContextDefault(&c, DEC_INIT_BASE); + c.digits = 1; + c.traps = 0; + + uprv_decNumberCompare(&n, this->fDecNumber, that.fDecNumber, &c); + UBool result = decNumberIsZero(&n); + return result; +} + +// ------------------------------------- +// comparison function. Returns +// Not Comparable : -2 +// < : -1 +// == : 0 +// > : +1 +int32_t DigitList::compare(const DigitList &other) { + decNumber result; + int32_t savedDigits = fContext.digits; + fContext.digits = 1; + uprv_decNumberCompare(&result, this->fDecNumber, other.fDecNumber, &fContext); + fContext.digits = savedDigits; + if (decNumberIsZero(&result)) { + return 0; + } else if (decNumberIsSpecial(&result)) { + return -2; + } else if (result.bits & DECNEG) { + return -1; + } else { + return 1; + } +} + + +// ------------------------------------- +// Reduce - remove trailing zero digits. +void +DigitList::reduce() { + uprv_decNumberReduce(fDecNumber, fDecNumber, &fContext); +} + + +// ------------------------------------- +// trim - remove trailing fraction zero digits. +void +DigitList::trim() { + uprv_decNumberTrim(fDecNumber); +} + +// ------------------------------------- +// Resets the digit list; sets all the digits to zero. + +void +DigitList::clear() +{ + uprv_decNumberZero(fDecNumber); + uprv_decContextSetRounding(&fContext, DEC_ROUND_HALF_EVEN); + internalSetDouble(0.0); +} + + +/** + * Formats a int64_t number into a base 10 string representation, and NULL terminates it. + * @param number The number to format + * @param outputStr The string to output to. Must be at least MAX_DIGITS+2 in length (21), + * to hold the longest int64_t value. + * @return the number of digits written, not including the sign. + */ +static int32_t +formatBase10(int64_t number, char *outputStr) { + // The number is output backwards, starting with the LSD. + // Fill the buffer from the far end. After the number is complete, + // slide the string contents to the front. + + const int32_t MAX_IDX = MAX_DIGITS+2; + int32_t destIdx = MAX_IDX; + outputStr[--destIdx] = 0; + + int64_t n = number; + if (number < 0) { // Negative numbers are slightly larger than a postive + outputStr[--destIdx] = (char)(-(n % 10) + kZero); + n /= -10; + } + do { + outputStr[--destIdx] = (char)(n % 10 + kZero); + n /= 10; + } while (n > 0); + + if (number < 0) { + outputStr[--destIdx] = '-'; + } + + // Slide the number to the start of the output str + U_ASSERT(destIdx >= 0); + int32_t length = MAX_IDX - destIdx; + uprv_memmove(outputStr, outputStr+MAX_IDX-length, length); + + return length; +} + + +// ------------------------------------- +// +// setRoundingMode() +// For most modes, the meaning and names are the same between the decNumber library +// (which DigitList follows) and the ICU Formatting Rounding Mode values. +// The flag constants are different, however. +// +// Note that ICU's kRoundingUnnecessary is not implemented directly by DigitList. +// This mode, inherited from Java, means that numbers that would not format exactly +// will return an error when formatting is attempted. + +void +DigitList::setRoundingMode(DecimalFormat::ERoundingMode m) { + enum rounding r; + + switch (m) { + case DecimalFormat::kRoundCeiling: r = DEC_ROUND_CEILING; break; + case DecimalFormat::kRoundFloor: r = DEC_ROUND_FLOOR; break; + case DecimalFormat::kRoundDown: r = DEC_ROUND_DOWN; break; + case DecimalFormat::kRoundUp: r = DEC_ROUND_UP; break; + case DecimalFormat::kRoundHalfEven: r = DEC_ROUND_HALF_EVEN; break; + case DecimalFormat::kRoundHalfDown: r = DEC_ROUND_HALF_DOWN; break; + case DecimalFormat::kRoundHalfUp: r = DEC_ROUND_HALF_UP; break; + case DecimalFormat::kRoundUnnecessary: r = DEC_ROUND_HALF_EVEN; break; + default: + // TODO: how to report the problem? + // Leave existing mode unchanged. + r = uprv_decContextGetRounding(&fContext); + } + uprv_decContextSetRounding(&fContext, r); + +} + + +// ------------------------------------- + +void +DigitList::setPositive(UBool s) { + if (s) { + fDecNumber->bits &= ~DECNEG; + } else { + fDecNumber->bits |= DECNEG; + } + internalClear(); +} +// ------------------------------------- + +void +DigitList::setDecimalAt(int32_t d) { + U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN + U_ASSERT(d-1>-999999999); + U_ASSERT(d-1< 999999999); + int32_t adjustedDigits = fDecNumber->digits; + if (decNumberIsZero(fDecNumber)) { + // Account for difference in how zero is represented between DigitList & decNumber. + adjustedDigits = 0; + } + fDecNumber->exponent = d - adjustedDigits; + internalClear(); +} + +int32_t +DigitList::getDecimalAt() { + U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN + if (decNumberIsZero(fDecNumber) || ((fDecNumber->bits & DECSPECIAL) != 0)) { + return fDecNumber->exponent; // Exponent should be zero for these cases. + } + return fDecNumber->exponent + fDecNumber->digits; +} + +void +DigitList::setCount(int32_t c) { + U_ASSERT(c <= fContext.digits); + if (c == 0) { + // For a value of zero, DigitList sets all fields to zero, while + // decNumber keeps one digit (with that digit being a zero) + c = 1; + fDecNumber->lsu[0] = 0; + } + fDecNumber->digits = c; + internalClear(); +} + +int32_t +DigitList::getCount() const { + if (decNumberIsZero(fDecNumber) && fDecNumber->exponent==0) { + // The extra test for exponent==0 is needed because parsing sometimes appends + // zero digits. It's bogus, decimalFormatter parsing needs to be cleaned up. + return 0; + } else { + return fDecNumber->digits; + } +} + +void +DigitList::setDigit(int32_t i, char v) { + int32_t count = fDecNumber->digits; + U_ASSERT(i='0' && v<='9'); + v &= 0x0f; + fDecNumber->lsu[count-i-1] = v; + internalClear(); +} + +char +DigitList::getDigit(int32_t i) { + int32_t count = fDecNumber->digits; + U_ASSERT(ilsu[count-i-1] + '0'; +} + +// copied from DigitList::getDigit() +uint8_t +DigitList::getDigitValue(int32_t i) { + int32_t count = fDecNumber->digits; + U_ASSERT(ilsu[count-i-1]; +} + +// ------------------------------------- +// Appends the digit to the digit list if it's not out of scope. +// Ignores the digit, otherwise. +// +// This function is horribly inefficient to implement with decNumber because +// the digits are stored least significant first, which requires moving all +// existing digits down one to make space for the new one to be appended. +// +void +DigitList::append(char digit) +{ + U_ASSERT(digit>='0' && digit<='9'); + // Ignore digits which exceed the precision we can represent + // And don't fix for larger precision. Fix callers instead. + if (decNumberIsZero(fDecNumber)) { + // Zero needs to be special cased because of the difference in the way + // that the old DigitList and decNumber represent it. + // digit cout was zero for digitList, is one for decNumber + fDecNumber->lsu[0] = digit & 0x0f; + fDecNumber->digits = 1; + fDecNumber->exponent--; // To match the old digit list implementation. + } else { + int32_t nDigits = fDecNumber->digits; + if (nDigits < fContext.digits) { + int i; + for (i=nDigits; i>0; i--) { + fDecNumber->lsu[i] = fDecNumber->lsu[i-1]; + } + fDecNumber->lsu[0] = digit & 0x0f; + fDecNumber->digits++; + // DigitList emulation - appending doesn't change the magnitude of existing + // digits. With decNumber's decimal being after the + // least signficant digit, we need to adjust the exponent. + fDecNumber->exponent--; + } + } + internalClear(); +} + +// ------------------------------------- + +/** + * Currently, getDouble() depends on strtod() to do its conversion. + * + * WARNING!! + * This is an extremely costly function. ~1/2 of the conversion time + * can be linked to this function. + */ +double +DigitList::getDouble() const +{ + { + Mutex mutex; + if (fHave == kDouble) { + return fUnion.fDouble; + } + } + + double tDouble = 0.0; + if (isZero()) { + tDouble = 0.0; + if (decNumberIsNegative(fDecNumber)) { + tDouble /= -1; + } + } else if (isInfinite()) { + if (std::numeric_limits::has_infinity) { + tDouble = std::numeric_limits::infinity(); + } else { + tDouble = std::numeric_limits::max(); + } + if (!isPositive()) { + tDouble = -tDouble; //this was incorrectly "-fDouble" originally. + } + } else { + MaybeStackArray s; + // Note: 14 is a magic constant from the decNumber library documentation, + // the max number of extra characters beyond the number of digits + // needed to represent the number in string form. Add a few more + // for the additional digits we retain. + + // Round down to appx. double precision, if the number is longer than that. + // Copy the number first, so that we don't modify the original. + if (getCount() > MAX_DBL_DIGITS + 3) { + DigitList numToConvert(*this); + numToConvert.reduce(); // Removes any trailing zeros, so that digit count is good. + numToConvert.round(MAX_DBL_DIGITS+3); + uprv_decNumberToString(numToConvert.fDecNumber, s.getAlias()); + // TODO: how many extra digits should be included for an accurate conversion? + } else { + uprv_decNumberToString(this->fDecNumber, s.getAlias()); + } + U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18); + + char *end = NULL; + tDouble = decimalStrToDouble(s.getAlias(), &end); + } + { + Mutex mutex; + DigitList *nonConstThis = const_cast(this); + nonConstThis->internalSetDouble(tDouble); + } + return tDouble; +} + +#if U_USE_STRTOD_L && U_PLATFORM_USES_ONLY_WIN32_API +# define locale_t _locale_t +# define freelocale _free_locale +# define strtod_l _strtod_l +#endif + +#if U_USE_STRTOD_L +static locale_t gCLocale = (locale_t)0; +#endif +static icu::UInitOnce gCLocaleInitOnce = U_INITONCE_INITIALIZER; + +U_CDECL_BEGIN +// Cleanup callback func +static UBool U_CALLCONV digitList_cleanup(void) +{ +#if U_USE_STRTOD_L + if (gCLocale != (locale_t)0) { + freelocale(gCLocale); + } +#endif + return TRUE; +} +// C Locale initialization func +static void U_CALLCONV initCLocale(void) { + ucln_i18n_registerCleanup(UCLN_I18N_DIGITLIST, digitList_cleanup); +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API + gCLocale = _create_locale(LC_ALL, "C"); +# else + gCLocale = newlocale(LC_ALL_MASK, "C", (locale_t)0); +# endif +#endif +} +U_CDECL_END + +double +DigitList::decimalStrToDouble(char *decstr, char **end) { + umtx_initOnce(gCLocaleInitOnce, &initCLocale); +#if U_USE_STRTOD_L + return strtod_l(decstr, end, gCLocale); +#else + char *decimalPt = strchr(decstr, '.'); + if (decimalPt) { + // We need to know the decimal separator character that will be used with strtod(). + // Depends on the C runtime global locale. + // Most commonly is '.' + char rep[MAX_DIGITS]; + sprintf(rep, "%+1.1f", 1.0); + *decimalPt = rep[2]; + } + return uprv_strtod(decstr, end); +#endif +} + +// ------------------------------------- + +/** + * convert this number to an int32_t. Round if there is a fractional part. + * Return zero if the number cannot be represented. + */ +int32_t DigitList::getLong() /*const*/ +{ + int32_t result = 0; + if (getUpperExponent() > 10) { + // Overflow, absolute value too big. + return result; + } + if (fDecNumber->exponent != 0) { + // Force to an integer, with zero exponent, rounding if necessary. + // (decNumberToInt32 will only work if the exponent is exactly zero.) + DigitList copy(*this); + DigitList zero; + uprv_decNumberQuantize(copy.fDecNumber, copy.fDecNumber, zero.fDecNumber, &fContext); + result = uprv_decNumberToInt32(copy.fDecNumber, &fContext); + } else { + result = uprv_decNumberToInt32(fDecNumber, &fContext); + } + return result; +} + + +/** + * convert this number to an int64_t. Truncate if there is a fractional part. + * Return zero if the number cannot be represented. + */ +int64_t DigitList::getInt64() /*const*/ { + // TODO: fast conversion if fHave == fDouble + + // Truncate if non-integer. + // Return 0 if out of range. + // Range of in64_t is -9223372036854775808 to 9223372036854775807 (19 digits) + // + if (getUpperExponent() > 19) { + // Overflow, absolute value too big. + return 0; + } + + // The number of integer digits may differ from the number of digits stored + // in the decimal number. + // for 12.345 numIntDigits = 2, number->digits = 5 + // for 12E4 numIntDigits = 6, number->digits = 2 + // The conversion ignores the fraction digits in the first case, + // and fakes up extra zero digits in the second. + // TODO: It would be faster to store a table of powers of ten to multiply by + // instead of looping over zero digits, multiplying each time. + + int32_t numIntDigits = getUpperExponent(); + uint64_t value = 0; + for (int32_t i = 0; i < numIntDigits; i++) { + // Loop is iterating over digits starting with the most significant. + // Numbers are stored with the least significant digit at index zero. + int32_t digitIndex = fDecNumber->digits - i - 1; + int32_t v = (digitIndex >= 0) ? fDecNumber->lsu[digitIndex] : 0; + value = value * (uint64_t)10 + (uint64_t)v; + } + + if (decNumberIsNegative(fDecNumber)) { + value = ~value; + value += 1; + } + int64_t svalue = (int64_t)value; + + // Check overflow. It's convenient that the MSD is 9 only on overflow, the amount of + // overflow can't wrap too far. The test will also fail -0, but + // that does no harm; the right answer is 0. + if (numIntDigits == 19) { + if (( decNumberIsNegative(fDecNumber) && svalue>0) || + (!decNumberIsNegative(fDecNumber) && svalue<0)) { + svalue = 0; + } + } + + return svalue; +} + + +/** + * Return a string form of this number. + * Format is as defined by the decNumber library, for interchange of + * decimal numbers. + */ +void DigitList::getDecimal(CharString &str, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + + // A decimal number in string form can, worst case, be 14 characters longer + // than the number of digits. So says the decNumber library doc. + int32_t maxLength = fDecNumber->digits + 14; + int32_t capacity = 0; + char *buffer = str.clear().getAppendBuffer(maxLength, 0, capacity, status); + if (U_FAILURE(status)) { + return; // Memory allocation error on growing the string. + } + U_ASSERT(capacity >= maxLength); + uprv_decNumberToString(this->fDecNumber, buffer); + U_ASSERT((int32_t)uprv_strlen(buffer) <= maxLength); + str.append(buffer, -1, status); +} + +/** + * Return true if this is an integer value that can be held + * by an int32_t type. + */ +UBool +DigitList::fitsIntoLong(UBool ignoreNegativeZero) /*const*/ +{ + if (decNumberIsSpecial(this->fDecNumber)) { + // NaN or Infinity. Does not fit in int32. + return FALSE; + } + uprv_decNumberTrim(this->fDecNumber); + if (fDecNumber->exponent < 0) { + // Number contains fraction digits. + return FALSE; + } + if (decNumberIsZero(this->fDecNumber) && !ignoreNegativeZero && + (fDecNumber->bits & DECNEG) != 0) { + // Negative Zero, not ingored. Cannot represent as a long. + return FALSE; + } + if (getUpperExponent() < 10) { + // The number is 9 or fewer digits. + // The max and min int32 are 10 digts, so this number fits. + // This is the common case. + return TRUE; + } + + // TODO: Should cache these constants; construction is relatively costly. + // But not of huge consequence; they're only needed for 10 digit ints. + UErrorCode status = U_ZERO_ERROR; + DigitList min32; min32.set("-2147483648", status); + if (this->compare(min32) < 0) { + return FALSE; + } + DigitList max32; max32.set("2147483647", status); + if (this->compare(max32) > 0) { + return FALSE; + } + if (U_FAILURE(status)) { + return FALSE; + } + return true; +} + + + +/** + * Return true if the number represented by this object can fit into + * a long. + */ +UBool +DigitList::fitsIntoInt64(UBool ignoreNegativeZero) /*const*/ +{ + if (decNumberIsSpecial(this->fDecNumber)) { + // NaN or Infinity. Does not fit in int32. + return FALSE; + } + uprv_decNumberTrim(this->fDecNumber); + if (fDecNumber->exponent < 0) { + // Number contains fraction digits. + return FALSE; + } + if (decNumberIsZero(this->fDecNumber) && !ignoreNegativeZero && + (fDecNumber->bits & DECNEG) != 0) { + // Negative Zero, not ingored. Cannot represent as a long. + return FALSE; + } + if (getUpperExponent() < 19) { + // The number is 18 or fewer digits. + // The max and min int64 are 19 digts, so this number fits. + // This is the common case. + return TRUE; + } + + // TODO: Should cache these constants; construction is relatively costly. + // But not of huge consequence; they're only needed for 19 digit ints. + UErrorCode status = U_ZERO_ERROR; + DigitList min64; min64.set("-9223372036854775808", status); + if (this->compare(min64) < 0) { + return FALSE; + } + DigitList max64; max64.set("9223372036854775807", status); + if (this->compare(max64) > 0) { + return FALSE; + } + if (U_FAILURE(status)) { + return FALSE; + } + return true; +} + + +// ------------------------------------- + +void +DigitList::set(int32_t source) +{ + set((int64_t)source); + internalSetDouble(source); +} + +// ------------------------------------- +/** + * Set an int64, via decnumber + */ +void +DigitList::set(int64_t source) +{ + char str[MAX_DIGITS+2]; // Leave room for sign and trailing nul. + formatBase10(source, str); + U_ASSERT(uprv_strlen(str) < sizeof(str)); + + uprv_decNumberFromString(fDecNumber, str, &fContext); + internalSetDouble(static_cast(source)); +} + +// ------------------------------------- +/** + * Set the DigitList from a decimal number string. + * + * The incoming string _must_ be nul terminated, even though it is arriving + * as a StringPiece because that is what the decNumber library wants. + * We can get away with this for an internal function; it would not + * be acceptable for a public API. + */ +void +DigitList::set(StringPiece source, UErrorCode &status, uint32_t /*fastpathBits*/) { + if (U_FAILURE(status)) { + return; + } + +#if 0 + if(fastpathBits==(kFastpathOk|kNoDecimal)) { + int32_t size = source.size(); + const char *data = source.data(); + int64_t r = 0; + int64_t m = 1; + // fast parse + while(size>0) { + char ch = data[--size]; + if(ch=='+') { + break; + } else if(ch=='-') { + r = -r; + break; + } else { + int64_t d = ch-'0'; + //printf("CH[%d]=%c, %d, *=%d\n", size,ch, (int)d, (int)m); + r+=(d)*m; + m *= 10; + } + } + //printf("R=%d\n", r); + set(r); + } else +#endif + { + // Figure out a max number of digits to use during the conversion, and + // resize the number up if necessary. + int32_t numDigits = source.length(); + if (numDigits > fContext.digits) { + // fContext.digits == fStorage.getCapacity() + decNumber *t = fStorage.resize(numDigits, fStorage.getCapacity()); + if (t == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fDecNumber = t; + fContext.digits = numDigits; + } + + fContext.status = 0; + uprv_decNumberFromString(fDecNumber, source.data(), &fContext); + if ((fContext.status & DEC_Conversion_syntax) != 0) { + status = U_DECIMAL_NUMBER_SYNTAX_ERROR; + } + } + internalClear(); +} + +/** + * Set the digit list to a representation of the given double value. + * This method supports both fixed-point and exponential notation. + * @param source Value to be converted. + */ +void +DigitList::set(double source) +{ + // for now, simple implementation; later, do proper IEEE stuff + char rep[MAX_DIGITS + 8]; // Extra space for '+', '.', e+NNN, and '\0' (actually +8 is enough) + + // Generate a representation of the form /[+-][0-9].[0-9]+e[+-][0-9]+/ + // Can also generate /[+-]nan/ or /[+-]inf/ + // TODO: Use something other than sprintf() here, since it's behavior is somewhat platform specific. + // That is why infinity is special cased here. + if (uprv_isInfinite(source)) { + if (uprv_isNegativeInfinity(source)) { + uprv_strcpy(rep,"-inf"); // Handle negative infinity + } else { + uprv_strcpy(rep,"inf"); + } + } else { + sprintf(rep, "%+1.*e", MAX_DBL_DIGITS - 1, source); + } + U_ASSERT(uprv_strlen(rep) < sizeof(rep)); + + // uprv_decNumberFromString() will parse the string expecting '.' as a + // decimal separator, however sprintf() can use ',' in certain locales. + // Overwrite a ',' with '.' here before proceeding. + char *decimalSeparator = strchr(rep, ','); + if (decimalSeparator != NULL) { + *decimalSeparator = '.'; + } + + // Create a decNumber from the string. + uprv_decNumberFromString(fDecNumber, rep, &fContext); + uprv_decNumberTrim(fDecNumber); + internalSetDouble(source); +} + +// ------------------------------------- + +/* + * Multiply + * The number will be expanded if need be to retain full precision. + * In practice, for formatting, multiply is by 10, 100 or 1000, so more digits + * will not be required for this use. + */ +void +DigitList::mult(const DigitList &other, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + fContext.status = 0; + int32_t requiredDigits = this->digits() + other.digits(); + if (requiredDigits > fContext.digits) { + reduce(); // Remove any trailing zeros + int32_t requiredDigits = this->digits() + other.digits(); + ensureCapacity(requiredDigits, status); + } + uprv_decNumberMultiply(fDecNumber, fDecNumber, other.fDecNumber, &fContext); + internalClear(); +} + +// ------------------------------------- + +/* + * Divide + * The number will _not_ be expanded for inexact results. + * TODO: probably should expand some, for rounding increments that + * could add a few digits, e.g. .25, but not expand arbitrarily. + */ +void +DigitList::div(const DigitList &other, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + uprv_decNumberDivide(fDecNumber, fDecNumber, other.fDecNumber, &fContext); + internalClear(); +} + +// ------------------------------------- + +/* + * ensureCapacity. Grow the digit storage for the number if it's less than the requested + * amount. Never reduce it. Available size is kept in fContext.digits. + */ +void +DigitList::ensureCapacity(int32_t requestedCapacity, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + if (requestedCapacity <= 0) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + if (requestedCapacity > DEC_MAX_DIGITS) { + // Don't report an error for requesting too much. + // Arithemetic Results will be rounded to what can be supported. + // At 999,999,999 max digits, exceeding the limit is not too likely! + requestedCapacity = DEC_MAX_DIGITS; + } + if (requestedCapacity > fContext.digits) { + decNumber *newBuffer = fStorage.resize(requestedCapacity, fStorage.getCapacity()); + if (newBuffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fContext.digits = requestedCapacity; + fDecNumber = newBuffer; + } +} + +// ------------------------------------- + +/** + * Round the representation to the given number of digits. + * @param maximumDigits The maximum number of digits to be shown. + * Upon return, count will be less than or equal to maximumDigits. + */ +void +DigitList::round(int32_t maximumDigits) +{ + reduce(); + if (maximumDigits >= fDecNumber->digits) { + return; + } + int32_t savedDigits = fContext.digits; + fContext.digits = maximumDigits; + uprv_decNumberPlus(fDecNumber, fDecNumber, &fContext); + fContext.digits = savedDigits; + uprv_decNumberTrim(fDecNumber); + reduce(); + internalClear(); +} + + +void +DigitList::roundFixedPoint(int32_t maximumFractionDigits) { + reduce(); // Remove trailing zeros. + if (fDecNumber->exponent >= -maximumFractionDigits) { + return; + } + decNumber scale; // Dummy decimal number, but with the desired number of + uprv_decNumberZero(&scale); // fraction digits. + scale.exponent = -maximumFractionDigits; + scale.lsu[0] = 1; + + uprv_decNumberQuantize(fDecNumber, fDecNumber, &scale, &fContext); + reduce(); + internalClear(); +} + +// ------------------------------------- + +void +DigitList::toIntegralValue() { + uprv_decNumberToIntegralValue(fDecNumber, fDecNumber, &fContext); +} + + +// ------------------------------------- +UBool +DigitList::isZero() const +{ + return decNumberIsZero(fDecNumber); +} + +// ------------------------------------- +int32_t +DigitList::getUpperExponent() const { + return fDecNumber->digits + fDecNumber->exponent; +} + +DigitInterval & +DigitList::getSmallestInterval(DigitInterval &result) const { + result.setLeastSignificantInclusive(fDecNumber->exponent); + result.setMostSignificantExclusive(getUpperExponent()); + return result; +} + +uint8_t +DigitList::getDigitByExponent(int32_t exponent) const { + int32_t idx = exponent - fDecNumber->exponent; + if (idx < 0 || idx >= fDecNumber->digits) { + return 0; + } + return fDecNumber->lsu[idx]; +} + +void +DigitList::appendDigitsTo(CharString &str, UErrorCode &status) const { + str.append((const char *) fDecNumber->lsu, fDecNumber->digits, status); +} + +void +DigitList::roundAtExponent(int32_t exponent, int32_t maxSigDigits) { + reduce(); + if (maxSigDigits < fDecNumber->digits) { + int32_t minExponent = getUpperExponent() - maxSigDigits; + if (exponent < minExponent) { + exponent = minExponent; + } + } + if (exponent <= fDecNumber->exponent) { + return; + } + int32_t digits = getUpperExponent() - exponent; + if (digits > 0) { + round(digits); + } else { + roundFixedPoint(-exponent); + } +} + +void +DigitList::quantize(const DigitList &quantity, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + div(quantity, status); + roundAtExponent(0); + mult(quantity, status); + reduce(); +} + +int32_t +DigitList::getScientificExponent( + int32_t minIntDigitCount, int32_t exponentMultiplier) const { + // The exponent for zero is always zero. + if (isZero()) { + return 0; + } + int32_t intDigitCount = getUpperExponent(); + int32_t exponent; + if (intDigitCount >= minIntDigitCount) { + int32_t maxAdjustment = intDigitCount - minIntDigitCount; + exponent = (maxAdjustment / exponentMultiplier) * exponentMultiplier; + } else { + int32_t minAdjustment = minIntDigitCount - intDigitCount; + exponent = ((minAdjustment + exponentMultiplier - 1) / exponentMultiplier) * -exponentMultiplier; + } + return exponent; +} + +int32_t +DigitList::toScientific( + int32_t minIntDigitCount, int32_t exponentMultiplier) { + int32_t exponent = getScientificExponent( + minIntDigitCount, exponentMultiplier); + shiftDecimalRight(-exponent); + return exponent; +} + +void +DigitList::shiftDecimalRight(int32_t n) { + fDecNumber->exponent += n; + internalClear(); +} + +U_NAMESPACE_END +#endif // #if !UCONFIG_NO_FORMATTING + +//eof diff --git a/tools/icu/shrink-icu-src.py b/tools/icu/shrink-icu-src.py index d0c82d87468dc0..406c5c317f51e4 100644 --- a/tools/icu/shrink-icu-src.py +++ b/tools/icu/shrink-icu-src.py @@ -48,18 +48,17 @@ def icu_ignore(dir, files): ign = ign + files # except... ign.remove('source') - ign.remove('license.html') - ign.remove('LICENSE') + if 'LICENSE' in ign: + ign.remove('LICENSE') + # license.html will be removed (it's obviated by LICENSE) + elif 'license.html' in ign: + ign.remove('license.html') elif subdir == 'source': - ign = ign + ['layout','samples','test','extra','config','layoutex','allinone'] + ign = ign + ['layout','samples','test','extra','config','layoutex','allinone','data'] ign = ign + ['runConfigureICU','install-sh','mkinstalldirs','configure'] elif subdir == 'source/tools': ign = ign + ['tzcode','ctestfw','gensprep','gennorm2','gendict','icuswap', 'genbrk','gencfu','gencolusb','genren','memcheck','makeconv','gencnval','icuinfo','gentest'] - elif subdir == 'source/data': - ign = ign + ['unidata','curr','zone','unit','lang','region','misc','sprep'] - # else: - # print '!%s! [%s]' % (subdir, files) ign = ign + ['.DS_Store', 'Makefile', 'Makefile.in'] for file in files: @@ -103,6 +102,10 @@ def icu_info(icu_full_path): shutil.copytree(options.icusrc, options.icusmall, ignore=icu_ignore) print '%s --> %s' % (src_datafile, dst_datafile) +# now, make the data dir (since we ignored it) +os.mkdir(os.path.join(os.path.join(options.icusmall, "source", "data"))) +os.mkdir(os.path.join(os.path.join(options.icusmall, "source", "data", "in"))) + # OK, now copy the data file shutil.copy(src_datafile, dst_datafile) From ced7e4d7760f180d041189ed5b08261ee3c759d1 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 19 Oct 2016 17:24:31 -0700 Subject: [PATCH 2/2] deps: Intl: ICU 58 bump - small icu (BIG COMMIT) This commit contains the ICU 58.1 delta. It is especially large because of the ICU license change, and, because the line endings were off previously. * bump to ICU 58.1 - check in small ICU source * from 58.1 final http://site.icu-project.org/download/58 Fixes: https://github.com/nodejs/node/issues/7844 PR-URL: https://github.com/nodejs/node/pull/9234 Reviewed-By: James M Snell --- deps/icu-small/LICENSE | 94 +- deps/icu-small/README-SMALL-ICU.txt | 5 +- deps/icu-small/license.html | 18 - deps/icu-small/source/common/appendable.cpp | 2 + deps/icu-small/source/common/bmpset.cpp | 2 + deps/icu-small/source/common/bmpset.h | 2 + deps/icu-small/source/common/brkeng.cpp | 10 +- deps/icu-small/source/common/brkeng.h | 4 +- deps/icu-small/source/common/brkiter.cpp | 8 +- deps/icu-small/source/common/bytestream.cpp | 2 + deps/icu-small/source/common/bytestrie.cpp | 2 + .../source/common/bytestriebuilder.cpp | 10 +- .../source/common/bytestrieiterator.cpp | 10 +- deps/icu-small/source/common/caniter.cpp | 14 +- deps/icu-small/source/common/chariter.cpp | 2 + deps/icu-small/source/common/charstr.cpp | 4 +- deps/icu-small/source/common/charstr.h | 8 +- deps/icu-small/source/common/cmemory.c | 4 +- deps/icu-small/source/common/cmemory.h | 18 +- deps/icu-small/source/common/common.rc | 11 +- deps/icu-small/source/common/cpputils.h | 20 +- deps/icu-small/source/common/cstr.cpp | 24 +- deps/icu-small/source/common/cstr.h | 11 +- deps/icu-small/source/common/cstring.c | 22 +- deps/icu-small/source/common/cstring.h | 2 + deps/icu-small/source/common/cwchar.c | 5 +- deps/icu-small/source/common/cwchar.h | 10 +- deps/icu-small/source/common/dictbe.cpp | 99 +- deps/icu-small/source/common/dictbe.h | 228 +- .../source/common/dictionarydata.cpp | 12 +- deps/icu-small/source/common/dictionarydata.h | 4 +- deps/icu-small/source/common/dtintrv.cpp | 13 +- deps/icu-small/source/common/errorcode.cpp | 2 + deps/icu-small/source/common/filteredbrk.cpp | 64 +- .../source/common/filterednormalizer2.cpp | 2 + deps/icu-small/source/common/hash.h | 17 +- deps/icu-small/source/common/icudataver.c | 6 +- deps/icu-small/source/common/icuplug.cpp | 104 +- deps/icu-small/source/common/icuplugimp.h | 12 +- .../icu-small/source/common/listformatter.cpp | 2 + .../source/common/loadednormalizer2impl.cpp | 6 +- deps/icu-small/source/common/localsvc.h | 4 +- deps/icu-small/source/common/locavailable.cpp | 15 +- deps/icu-small/source/common/locbased.cpp | 2 + deps/icu-small/source/common/locbased.h | 4 +- deps/icu-small/source/common/locdispnames.cpp | 34 +- deps/icu-small/source/common/locdspnm.cpp | 117 +- deps/icu-small/source/common/locid.cpp | 81 +- deps/icu-small/source/common/loclikely.cpp | 19 +- deps/icu-small/source/common/locmap.c | 69 +- deps/icu-small/source/common/locmap.h | 5 +- deps/icu-small/source/common/locresdata.cpp | 16 +- deps/icu-small/source/common/locutil.cpp | 6 +- deps/icu-small/source/common/locutil.h | 2 + deps/icu-small/source/common/messageimpl.h | 2 + .../source/common/messagepattern.cpp | 6 +- deps/icu-small/source/common/msvcres.h | 6 +- deps/icu-small/source/common/mutex.h | 8 +- deps/icu-small/source/common/norm2_nfc_data.h | 1114 +-- deps/icu-small/source/common/norm2allmodes.h | 2 + deps/icu-small/source/common/normalizer2.cpp | 6 +- .../source/common/normalizer2impl.cpp | 4 +- .../icu-small/source/common/normalizer2impl.h | 2 + deps/icu-small/source/common/normlzr.cpp | 34 +- deps/icu-small/source/common/parsepos.cpp | 2 + deps/icu-small/source/common/patternprops.cpp | 2 + deps/icu-small/source/common/patternprops.h | 2 + deps/icu-small/source/common/pluralmap.cpp | 5 +- deps/icu-small/source/common/pluralmap.h | 2 + deps/icu-small/source/common/propname.cpp | 2 + deps/icu-small/source/common/propname.h | 2 + deps/icu-small/source/common/propname_data.h | 1768 ++--- deps/icu-small/source/common/propsvec.c | 12 +- deps/icu-small/source/common/propsvec.h | 2 + deps/icu-small/source/common/punycode.cpp | 4 +- deps/icu-small/source/common/punycode.h | 2 + deps/icu-small/source/common/putil.cpp | 123 +- deps/icu-small/source/common/putilimp.h | 22 +- deps/icu-small/source/common/rbbi.cpp | 101 +- deps/icu-small/source/common/rbbicst.pl | 29 +- deps/icu-small/source/common/rbbidata.cpp | 22 +- deps/icu-small/source/common/rbbidata.h | 8 +- deps/icu-small/source/common/rbbinode.cpp | 63 +- deps/icu-small/source/common/rbbinode.h | 17 +- deps/icu-small/source/common/rbbirb.cpp | 6 +- deps/icu-small/source/common/rbbirb.h | 9 +- deps/icu-small/source/common/rbbirpt.h | 162 +- deps/icu-small/source/common/rbbiscan.cpp | 30 +- deps/icu-small/source/common/rbbiscan.h | 4 +- deps/icu-small/source/common/rbbisetb.cpp | 8 +- deps/icu-small/source/common/rbbisetb.h | 2 + deps/icu-small/source/common/rbbistbl.cpp | 27 +- deps/icu-small/source/common/rbbitblb.cpp | 30 +- deps/icu-small/source/common/rbbitblb.h | 2 + deps/icu-small/source/common/resbund.cpp | 4 +- deps/icu-small/source/common/resbund_cnv.cpp | 4 +- deps/icu-small/source/common/resource.cpp | 46 +- deps/icu-small/source/common/resource.h | 257 +- deps/icu-small/source/common/ruleiter.cpp | 2 + deps/icu-small/source/common/ruleiter.h | 12 +- deps/icu-small/source/common/schriter.cpp | 2 + deps/icu-small/source/common/serv.cpp | 222 +- deps/icu-small/source/common/serv.h | 61 +- deps/icu-small/source/common/servlk.cpp | 4 + deps/icu-small/source/common/servlkf.cpp | 10 +- deps/icu-small/source/common/servloc.h | 55 +- deps/icu-small/source/common/servls.cpp | 8 +- deps/icu-small/source/common/servnotf.cpp | 19 +- deps/icu-small/source/common/servnotf.h | 30 +- deps/icu-small/source/common/servrbf.cpp | 4 + deps/icu-small/source/common/servslkf.cpp | 4 + deps/icu-small/source/common/sharedobject.cpp | 2 + deps/icu-small/source/common/sharedobject.h | 10 +- .../source/common/simpleformatter.cpp | 2 + deps/icu-small/source/common/sprpimpl.h | 20 +- deps/icu-small/source/common/stringpiece.cpp | 2 + .../source/common/stringtriebuilder.cpp | 2 + deps/icu-small/source/common/uarrsort.c | 12 +- deps/icu-small/source/common/uarrsort.h | 2 + deps/icu-small/source/common/uassert.h | 4 + deps/icu-small/source/common/ubidi.c | 6 +- deps/icu-small/source/common/ubidi_props.c | 4 +- deps/icu-small/source/common/ubidi_props.h | 2 + .../source/common/ubidi_props_data.h | 1114 +-- deps/icu-small/source/common/ubidiimp.h | 2 + deps/icu-small/source/common/ubidiln.c | 2 + deps/icu-small/source/common/ubiditransform.c | 528 ++ deps/icu-small/source/common/ubidiwrt.c | 2 + deps/icu-small/source/common/ubrk.cpp | 2 + deps/icu-small/source/common/ubrkimpl.h | 2 + deps/icu-small/source/common/ucase.cpp | 30 +- deps/icu-small/source/common/ucase.h | 5 +- .../source/common/ucase_props_data.h | 1313 ++-- deps/icu-small/source/common/ucasemap.cpp | 291 +- .../common/ucasemap_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/ucat.c | 2 + deps/icu-small/source/common/uchar.c | 14 +- .../source/common/uchar_props_data.h | 5991 +++++++++-------- deps/icu-small/source/common/ucharstrie.cpp | 2 + .../source/common/ucharstriebuilder.cpp | 4 +- .../source/common/ucharstrieiterator.cpp | 2 + deps/icu-small/source/common/uchriter.cpp | 2 + deps/icu-small/source/common/ucln.h | 2 + deps/icu-small/source/common/ucln_cmn.cpp | 4 +- deps/icu-small/source/common/ucln_cmn.h | 2 + deps/icu-small/source/common/ucln_imp.h | 8 +- deps/icu-small/source/common/ucmndata.c | 2 + deps/icu-small/source/common/ucmndata.h | 6 +- deps/icu-small/source/common/ucnv.c | 44 +- deps/icu-small/source/common/ucnv2022.cpp | 67 +- deps/icu-small/source/common/ucnv_bld.cpp | 6 +- deps/icu-small/source/common/ucnv_bld.h | 8 +- deps/icu-small/source/common/ucnv_cb.c | 2 + deps/icu-small/source/common/ucnv_cnv.c | 2 + deps/icu-small/source/common/ucnv_cnv.h | 10 +- deps/icu-small/source/common/ucnv_ct.c | 2 + deps/icu-small/source/common/ucnv_err.c | 16 +- deps/icu-small/source/common/ucnv_ext.cpp | 4 +- deps/icu-small/source/common/ucnv_ext.h | 4 +- deps/icu-small/source/common/ucnv_imp.h | 2 + deps/icu-small/source/common/ucnv_io.cpp | 39 +- deps/icu-small/source/common/ucnv_io.h | 10 +- deps/icu-small/source/common/ucnv_lmb.c | 346 +- deps/icu-small/source/common/ucnv_set.c | 2 + deps/icu-small/source/common/ucnv_u16.c | 32 +- deps/icu-small/source/common/ucnv_u32.c | 29 +- deps/icu-small/source/common/ucnv_u7.c | 9 +- deps/icu-small/source/common/ucnv_u8.c | 19 +- deps/icu-small/source/common/ucnvbocu.cpp | 10 +- deps/icu-small/source/common/ucnvdisp.c | 2 + deps/icu-small/source/common/ucnvhz.c | 72 +- deps/icu-small/source/common/ucnvisci.c | 26 +- deps/icu-small/source/common/ucnvlat1.c | 4 +- deps/icu-small/source/common/ucnvmbcs.cpp | 57 +- deps/icu-small/source/common/ucnvmbcs.h | 12 +- deps/icu-small/source/common/ucnvscsu.c | 10 +- deps/icu-small/source/common/ucnvsel.cpp | 8 +- deps/icu-small/source/common/ucol_data.h | 2 + deps/icu-small/source/common/ucol_swp.cpp | 12 +- deps/icu-small/source/common/ucol_swp.h | 2 + deps/icu-small/source/common/ucurr.cpp | 135 +- deps/icu-small/source/common/ucurrimp.h | 2 + deps/icu-small/source/common/udata.cpp | 109 +- deps/icu-small/source/common/udatamem.c | 2 + deps/icu-small/source/common/udatamem.h | 2 + deps/icu-small/source/common/udataswp.c | 6 +- deps/icu-small/source/common/udataswp.h | 16 + deps/icu-small/source/common/uelement.h | 6 +- deps/icu-small/source/common/uenum.c | 4 +- deps/icu-small/source/common/uenumimp.h | 28 +- deps/icu-small/source/common/uhash.c | 26 +- deps/icu-small/source/common/uhash.h | 94 +- deps/icu-small/source/common/uhash_us.cpp | 2 + deps/icu-small/source/common/uidna.cpp | 166 +- deps/icu-small/source/common/uinit.cpp | 2 + deps/icu-small/source/common/uinvchar.c | 7 +- deps/icu-small/source/common/uinvchar.h | 2 + deps/icu-small/source/common/uiter.cpp | 2 + deps/icu-small/source/common/ulist.c | 110 +- deps/icu-small/source/common/ulist.h | 6 +- .../source/common/ulistformatter.cpp | 2 + deps/icu-small/source/common/uloc.cpp | 105 +- deps/icu-small/source/common/uloc_keytype.cpp | 8 +- deps/icu-small/source/common/uloc_tag.c | 110 +- deps/icu-small/source/common/ulocimp.h | 10 +- deps/icu-small/source/common/umapfile.c | 32 +- deps/icu-small/source/common/umapfile.h | 2 + deps/icu-small/source/common/umath.c | 3 + deps/icu-small/source/common/umutex.cpp | 23 +- deps/icu-small/source/common/umutex.h | 32 +- deps/icu-small/source/common/unames.cpp | 12 +- .../source/common/unicode/appendable.h | 2 + .../icu-small/source/common/unicode/brkiter.h | 7 + .../source/common/unicode/bytestream.h | 10 +- .../source/common/unicode/bytestrie.h | 5 +- .../source/common/unicode/bytestriebuilder.h | 8 +- .../icu-small/source/common/unicode/caniter.h | 4 +- .../source/common/unicode/chariter.h | 90 +- deps/icu-small/source/common/unicode/dbbi.h | 4 +- .../icu-small/source/common/unicode/docmain.h | 12 +- .../icu-small/source/common/unicode/dtintrv.h | 34 +- .../icu-small/source/common/unicode/enumset.h | 8 +- .../source/common/unicode/errorcode.h | 4 +- .../source/common/unicode/filteredbrk.h | 22 +- .../source/common/unicode/icudataver.h | 6 +- .../icu-small/source/common/unicode/icuplug.h | 83 +- deps/icu-small/source/common/unicode/idna.h | 10 +- .../source/common/unicode/listformatter.h | 2 + .../source/common/unicode/localpointer.h | 47 +- .../source/common/unicode/locdspnm.h | 2 + deps/icu-small/source/common/unicode/locid.h | 4 +- .../source/common/unicode/messagepattern.h | 2 + .../source/common/unicode/normalizer2.h | 2 + .../icu-small/source/common/unicode/normlzr.h | 12 +- .../source/common/unicode/parseerr.h | 10 +- .../source/common/unicode/parsepos.h | 6 +- .../source/common/unicode/platform.h | 14 +- deps/icu-small/source/common/unicode/ptypes.h | 2 + deps/icu-small/source/common/unicode/putil.h | 14 +- deps/icu-small/source/common/unicode/rbbi.h | 74 +- deps/icu-small/source/common/unicode/rep.h | 16 +- .../icu-small/source/common/unicode/resbund.h | 18 +- .../source/common/unicode/schriter.h | 6 +- .../source/common/unicode/simpleformatter.h | 2 + .../source/common/unicode/std_string.h | 2 + .../icu-small/source/common/unicode/strenum.h | 22 +- .../source/common/unicode/stringpiece.h | 14 +- .../source/common/unicode/stringtriebuilder.h | 28 +- .../source/common/unicode/symtable.h | 6 +- deps/icu-small/source/common/unicode/ubidi.h | 28 +- .../source/common/unicode/ubiditransform.h | 321 + deps/icu-small/source/common/unicode/ubrk.h | 31 +- .../source/common/unicode/ucasemap.h | 2 + deps/icu-small/source/common/unicode/ucat.h | 12 +- deps/icu-small/source/common/unicode/uchar.h | 261 +- .../source/common/unicode/ucharstrie.h | 2 + .../source/common/unicode/ucharstriebuilder.h | 2 + .../source/common/unicode/uchriter.h | 6 +- deps/icu-small/source/common/unicode/uclean.h | 38 +- deps/icu-small/source/common/unicode/ucnv.h | 9 +- .../icu-small/source/common/unicode/ucnv_cb.h | 56 +- .../source/common/unicode/ucnv_err.h | 60 +- .../icu-small/source/common/unicode/ucnvsel.h | 4 +- .../icu-small/source/common/unicode/uconfig.h | 8 +- deps/icu-small/source/common/unicode/ucurr.h | 136 +- deps/icu-small/source/common/unicode/udata.h | 37 +- .../source/common/unicode/udisplaycontext.h | 36 +- deps/icu-small/source/common/unicode/uenum.h | 10 +- deps/icu-small/source/common/unicode/uidna.h | 68 +- deps/icu-small/source/common/unicode/uiter.h | 4 +- .../source/common/unicode/uldnames.h | 26 +- .../source/common/unicode/ulistformatter.h | 4 +- deps/icu-small/source/common/unicode/uloc.h | 192 +- .../source/common/unicode/umachine.h | 29 +- deps/icu-small/source/common/unicode/umisc.h | 16 +- .../icu-small/source/common/unicode/unifilt.h | 4 +- .../source/common/unicode/unifunct.h | 6 +- .../source/common/unicode/unimatch.h | 10 +- deps/icu-small/source/common/unicode/uniset.h | 8 +- deps/icu-small/source/common/unicode/unistr.h | 26 +- deps/icu-small/source/common/unicode/unorm.h | 8 +- deps/icu-small/source/common/unicode/unorm2.h | 2 + .../icu-small/source/common/unicode/uobject.h | 24 +- .../icu-small/source/common/unicode/urename.h | 20 +- deps/icu-small/source/common/unicode/urep.h | 8 +- deps/icu-small/source/common/unicode/ures.h | 8 +- .../icu-small/source/common/unicode/uscript.h | 52 +- deps/icu-small/source/common/unicode/uset.h | 22 +- .../source/common/unicode/usetiter.h | 10 +- deps/icu-small/source/common/unicode/ushape.h | 78 +- deps/icu-small/source/common/unicode/usprep.h | 28 +- .../icu-small/source/common/unicode/ustring.h | 158 +- .../source/common/unicode/ustringtrie.h | 2 + deps/icu-small/source/common/unicode/utext.h | 92 +- deps/icu-small/source/common/unicode/utf.h | 6 +- deps/icu-small/source/common/unicode/utf16.h | 6 +- deps/icu-small/source/common/unicode/utf32.h | 2 + deps/icu-small/source/common/unicode/utf8.h | 10 +- .../icu-small/source/common/unicode/utf_old.h | 7 +- deps/icu-small/source/common/unicode/utrace.h | 40 +- deps/icu-small/source/common/unicode/utypes.h | 186 +- .../icu-small/source/common/unicode/uvernum.h | 23 +- .../source/common/unicode/uversion.h | 4 +- deps/icu-small/source/common/unifiedcache.cpp | 20 +- deps/icu-small/source/common/unifiedcache.h | 10 +- deps/icu-small/source/common/unifilt.cpp | 2 + deps/icu-small/source/common/unifunct.cpp | 2 + deps/icu-small/source/common/uniset.cpp | 12 +- .../source/common/uniset_closure.cpp | 6 +- deps/icu-small/source/common/uniset_props.cpp | 10 +- deps/icu-small/source/common/unisetspan.cpp | 6 +- deps/icu-small/source/common/unisetspan.h | 2 + deps/icu-small/source/common/unistr.cpp | 163 +- deps/icu-small/source/common/unistr_case.cpp | 2 + .../source/common/unistr_case_locale.cpp | 2 + deps/icu-small/source/common/unistr_cnv.cpp | 2 + deps/icu-small/source/common/unistr_props.cpp | 4 +- .../common/unistr_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/unistrappender.h | 6 +- deps/icu-small/source/common/unorm.cpp | 10 +- deps/icu-small/source/common/unormcmp.cpp | 2 + deps/icu-small/source/common/unormimp.h | 4 +- deps/icu-small/source/common/uobject.cpp | 2 + deps/icu-small/source/common/uposixdefs.h | 2 + deps/icu-small/source/common/uprops.cpp | 2 + deps/icu-small/source/common/uprops.h | 11 +- deps/icu-small/source/common/ures_cnv.c | 6 +- deps/icu-small/source/common/uresbund.cpp | 340 +- deps/icu-small/source/common/uresdata.cpp | 353 +- deps/icu-small/source/common/uresdata.h | 32 +- deps/icu-small/source/common/uresimp.h | 70 +- deps/icu-small/source/common/ureslocs.h | 2 + deps/icu-small/source/common/usc_impl.c | 14 +- deps/icu-small/source/common/usc_impl.h | 2 + deps/icu-small/source/common/uscript.c | 2 + .../icu-small/source/common/uscript_props.cpp | 26 +- deps/icu-small/source/common/uset.cpp | 32 +- deps/icu-small/source/common/uset_imp.h | 3 + deps/icu-small/source/common/uset_props.cpp | 10 +- deps/icu-small/source/common/usetiter.cpp | 4 +- deps/icu-small/source/common/ushape.cpp | 26 +- deps/icu-small/source/common/usprep.cpp | 120 +- deps/icu-small/source/common/ustack.cpp | 2 + deps/icu-small/source/common/ustr_cnv.cpp | 10 +- deps/icu-small/source/common/ustr_cnv.h | 6 +- deps/icu-small/source/common/ustr_imp.h | 46 +- .../source/common/ustr_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/ustr_wcs.cpp | 140 +- deps/icu-small/source/common/ustrcase.cpp | 701 +- .../source/common/ustrcase_locale.cpp | 2 + deps/icu-small/source/common/ustrenum.cpp | 10 +- deps/icu-small/source/common/ustrenum.h | 3 + deps/icu-small/source/common/ustrfmt.c | 2 + deps/icu-small/source/common/ustrfmt.h | 2 + deps/icu-small/source/common/ustring.cpp | 42 +- deps/icu-small/source/common/ustrtrns.cpp | 40 +- deps/icu-small/source/common/utext.cpp | 2 + deps/icu-small/source/common/utf_impl.c | 4 +- deps/icu-small/source/common/util.cpp | 6 +- deps/icu-small/source/common/util.h | 6 +- deps/icu-small/source/common/util_props.cpp | 3 + deps/icu-small/source/common/utrace.c | 37 +- deps/icu-small/source/common/utracimp.h | 14 +- deps/icu-small/source/common/utrie.cpp | 6 +- deps/icu-small/source/common/utrie.h | 2 + deps/icu-small/source/common/utrie2.cpp | 2 + deps/icu-small/source/common/utrie2.h | 2 + .../source/common/utrie2_builder.cpp | 12 +- deps/icu-small/source/common/utrie2_impl.h | 2 + deps/icu-small/source/common/uts46.cpp | 30 +- deps/icu-small/source/common/utypeinfo.h | 2 + deps/icu-small/source/common/utypes.c | 2 + deps/icu-small/source/common/uvector.cpp | 17 +- deps/icu-small/source/common/uvector.h | 10 +- deps/icu-small/source/common/uvectr32.cpp | 9 +- deps/icu-small/source/common/uvectr32.h | 10 +- deps/icu-small/source/common/uvectr64.cpp | 9 +- deps/icu-small/source/common/uvectr64.h | 10 +- deps/icu-small/source/common/wintz.c | 6 +- deps/icu-small/source/common/wintz.h | 4 +- deps/icu-small/source/data/in/icudt57l.dat | Bin 1933056 -> 0 bytes deps/icu-small/source/data/in/icudt58l.dat | Bin 0 -> 2680800 bytes .../source/i18n/affixpatternparser.cpp | 16 +- .../source/i18n/affixpatternparser.h | 10 +- deps/icu-small/source/i18n/alphaindex.cpp | 4 +- deps/icu-small/source/i18n/anytrans.cpp | 2 + deps/icu-small/source/i18n/anytrans.h | 2 + deps/icu-small/source/i18n/astro.cpp | 4 +- deps/icu-small/source/i18n/astro.h | 2 + deps/icu-small/source/i18n/basictz.cpp | 10 +- deps/icu-small/source/i18n/bocsu.cpp | 2 + deps/icu-small/source/i18n/bocsu.h | 2 + deps/icu-small/source/i18n/brktrans.cpp | 2 + deps/icu-small/source/i18n/brktrans.h | 4 +- deps/icu-small/source/i18n/buddhcal.cpp | 6 +- deps/icu-small/source/i18n/buddhcal.h | 5 +- deps/icu-small/source/i18n/calendar.cpp | 210 +- deps/icu-small/source/i18n/casetrn.cpp | 6 +- deps/icu-small/source/i18n/casetrn.h | 4 +- deps/icu-small/source/i18n/cecal.cpp | 4 +- deps/icu-small/source/i18n/cecal.h | 2 + deps/icu-small/source/i18n/chnsecal.cpp | 47 +- deps/icu-small/source/i18n/chnsecal.h | 18 +- deps/icu-small/source/i18n/choicfmt.cpp | 54 +- deps/icu-small/source/i18n/coleitr.cpp | 22 +- deps/icu-small/source/i18n/coll.cpp | 64 +- deps/icu-small/source/i18n/collation.cpp | 2 + deps/icu-small/source/i18n/collation.h | 2 + .../source/i18n/collationbuilder.cpp | 2 + deps/icu-small/source/i18n/collationbuilder.h | 2 + .../source/i18n/collationcompare.cpp | 2 + deps/icu-small/source/i18n/collationcompare.h | 2 + deps/icu-small/source/i18n/collationdata.cpp | 2 + deps/icu-small/source/i18n/collationdata.h | 2 + .../source/i18n/collationdatabuilder.cpp | 4 +- .../source/i18n/collationdatabuilder.h | 2 + .../source/i18n/collationdatareader.cpp | 2 + .../source/i18n/collationdatareader.h | 2 + .../source/i18n/collationdatawriter.cpp | 2 + .../source/i18n/collationdatawriter.h | 2 + .../source/i18n/collationfastlatin.cpp | 2 + .../source/i18n/collationfastlatin.h | 2 + .../source/i18n/collationfastlatinbuilder.cpp | 6 +- .../source/i18n/collationfastlatinbuilder.h | 2 + deps/icu-small/source/i18n/collationfcd.cpp | 106 +- deps/icu-small/source/i18n/collationfcd.h | 2 + .../source/i18n/collationiterator.cpp | 2 + .../icu-small/source/i18n/collationiterator.h | 2 + deps/icu-small/source/i18n/collationkeys.cpp | 2 + deps/icu-small/source/i18n/collationkeys.h | 2 + deps/icu-small/source/i18n/collationroot.cpp | 4 +- deps/icu-small/source/i18n/collationroot.h | 4 +- .../source/i18n/collationrootelements.cpp | 2 + .../source/i18n/collationrootelements.h | 2 + .../source/i18n/collationruleparser.cpp | 4 +- .../source/i18n/collationruleparser.h | 2 + deps/icu-small/source/i18n/collationsets.cpp | 2 + deps/icu-small/source/i18n/collationsets.h | 2 + .../source/i18n/collationsettings.cpp | 2 + .../icu-small/source/i18n/collationsettings.h | 2 + .../source/i18n/collationtailoring.cpp | 2 + .../source/i18n/collationtailoring.h | 2 + .../source/i18n/collationweights.cpp | 4 +- deps/icu-small/source/i18n/collationweights.h | 4 +- deps/icu-small/source/i18n/collunsafe.h | 4 +- .../source/i18n/compactdecimalformat.cpp | 533 +- deps/icu-small/source/i18n/coptccal.cpp | 6 +- deps/icu-small/source/i18n/coptccal.h | 62 +- deps/icu-small/source/i18n/cpdtrans.cpp | 24 +- deps/icu-small/source/i18n/cpdtrans.h | 4 +- deps/icu-small/source/i18n/csdetect.cpp | 6 +- deps/icu-small/source/i18n/csdetect.h | 2 + deps/icu-small/source/i18n/csmatch.cpp | 8 +- deps/icu-small/source/i18n/csmatch.h | 10 +- deps/icu-small/source/i18n/csr2022.cpp | 22 +- deps/icu-small/source/i18n/csr2022.h | 12 +- deps/icu-small/source/i18n/csrecog.cpp | 4 +- deps/icu-small/source/i18n/csrecog.h | 6 +- deps/icu-small/source/i18n/csrmbcs.cpp | 4 +- deps/icu-small/source/i18n/csrmbcs.h | 2 + deps/icu-small/source/i18n/csrsbcs.cpp | 849 +-- deps/icu-small/source/i18n/csrsbcs.h | 28 +- deps/icu-small/source/i18n/csrucode.cpp | 9 +- deps/icu-small/source/i18n/csrucode.h | 6 +- deps/icu-small/source/i18n/csrutf8.cpp | 4 +- deps/icu-small/source/i18n/csrutf8.h | 8 +- deps/icu-small/source/i18n/curramt.cpp | 4 +- deps/icu-small/source/i18n/currfmt.cpp | 2 + deps/icu-small/source/i18n/currfmt.h | 2 + deps/icu-small/source/i18n/currpinf.cpp | 28 +- deps/icu-small/source/i18n/currunit.cpp | 4 +- deps/icu-small/source/i18n/dangical.cpp | 57 +- deps/icu-small/source/i18n/dangical.h | 11 +- deps/icu-small/source/i18n/datefmt.cpp | 18 +- deps/icu-small/source/i18n/dayperiodrules.cpp | 209 +- deps/icu-small/source/i18n/dayperiodrules.h | 4 +- deps/icu-small/source/i18n/dcfmtimp.h | 2 + deps/icu-small/source/i18n/dcfmtsym.cpp | 391 +- deps/icu-small/source/i18n/decContext.c | 3 + deps/icu-small/source/i18n/decContext.h | 4 +- deps/icu-small/source/i18n/decNumber.c | 4 +- deps/icu-small/source/i18n/decNumber.h | 4 +- deps/icu-small/source/i18n/decNumberLocal.h | 2 + deps/icu-small/source/i18n/decfmtst.cpp | 4 +- deps/icu-small/source/i18n/decfmtst.h | 2 + .../source/i18n/decimalformatpattern.cpp | 6 +- .../source/i18n/decimalformatpattern.h | 14 +- .../source/i18n/decimalformatpatternimpl.h | 2 + deps/icu-small/source/i18n/decimfmt.cpp | 202 +- deps/icu-small/source/i18n/decimfmtimpl.cpp | 53 +- deps/icu-small/source/i18n/decimfmtimpl.h | 12 +- deps/icu-small/source/i18n/digitaffix.cpp | 4 +- deps/icu-small/source/i18n/digitaffix.h | 2 + .../source/i18n/digitaffixesandpadding.cpp | 2 + .../source/i18n/digitaffixesandpadding.h | 6 +- deps/icu-small/source/i18n/digitformatter.cpp | 6 +- deps/icu-small/source/i18n/digitformatter.h | 2 + deps/icu-small/source/i18n/digitgrouping.cpp | 3 + deps/icu-small/source/i18n/digitgrouping.h | 4 +- deps/icu-small/source/i18n/digitinterval.cpp | 3 + deps/icu-small/source/i18n/digitinterval.h | 4 +- deps/icu-small/source/i18n/digitlst.cpp | 202 +- deps/icu-small/source/i18n/digitlst.h | 37 +- deps/icu-small/source/i18n/dt_impl.h | 92 + deps/icu-small/source/i18n/dtfmtsym.cpp | 1186 ++-- deps/icu-small/source/i18n/dtitv_impl.h | 6 +- deps/icu-small/source/i18n/dtitvfmt.cpp | 47 +- deps/icu-small/source/i18n/dtitvinf.cpp | 237 +- deps/icu-small/source/i18n/dtptngen.cpp | 816 +-- deps/icu-small/source/i18n/dtptngen_impl.h | 53 +- deps/icu-small/source/i18n/dtrule.cpp | 2 + deps/icu-small/source/i18n/esctrn.cpp | 2 + deps/icu-small/source/i18n/esctrn.h | 2 + deps/icu-small/source/i18n/ethpccal.cpp | 6 +- deps/icu-small/source/i18n/ethpccal.h | 54 +- deps/icu-small/source/i18n/fmtable.cpp | 54 +- deps/icu-small/source/i18n/fmtable_cnv.cpp | 2 + deps/icu-small/source/i18n/fmtableimp.h | 4 +- deps/icu-small/source/i18n/format.cpp | 2 + deps/icu-small/source/i18n/fphdlimp.cpp | 2 + deps/icu-small/source/i18n/fphdlimp.h | 2 + deps/icu-small/source/i18n/fpositer.cpp | 8 +- deps/icu-small/source/i18n/funcrepl.cpp | 4 +- deps/icu-small/source/i18n/funcrepl.h | 2 + deps/icu-small/source/i18n/gender.cpp | 4 +- deps/icu-small/source/i18n/gregocal.cpp | 92 +- deps/icu-small/source/i18n/gregoimp.cpp | 175 +- deps/icu-small/source/i18n/gregoimp.h | 73 +- deps/icu-small/source/i18n/hebrwcal.cpp | 17 +- deps/icu-small/source/i18n/hebrwcal.h | 43 +- deps/icu-small/source/i18n/i18n.rc | 11 +- .../icu-small/source/i18n/identifier_info.cpp | 310 - deps/icu-small/source/i18n/identifier_info.h | 189 - deps/icu-small/source/i18n/indiancal.cpp | 31 +- deps/icu-small/source/i18n/indiancal.h | 47 +- deps/icu-small/source/i18n/inputext.cpp | 9 +- deps/icu-small/source/i18n/inputext.h | 10 +- deps/icu-small/source/i18n/islamcal.cpp | 29 +- deps/icu-small/source/i18n/islamcal.h | 83 +- deps/icu-small/source/i18n/japancal.cpp | 12 +- deps/icu-small/source/i18n/japancal.h | 15 +- deps/icu-small/source/i18n/measfmt.cpp | 264 +- deps/icu-small/source/i18n/measunit.cpp | 305 +- deps/icu-small/source/i18n/measure.cpp | 2 + deps/icu-small/source/i18n/msgfmt.cpp | 2 + deps/icu-small/source/i18n/msgfmt_impl.h | 4 +- deps/icu-small/source/i18n/name2uni.cpp | 8 +- deps/icu-small/source/i18n/name2uni.h | 2 + deps/icu-small/source/i18n/nfrlist.h | 16 +- deps/icu-small/source/i18n/nfrs.cpp | 15 +- deps/icu-small/source/i18n/nfrs.h | 5 +- deps/icu-small/source/i18n/nfrule.cpp | 12 +- deps/icu-small/source/i18n/nfrule.h | 23 +- deps/icu-small/source/i18n/nfsubs.cpp | 21 +- deps/icu-small/source/i18n/nfsubs.h | 54 +- deps/icu-small/source/i18n/nortrans.cpp | 2 + deps/icu-small/source/i18n/nortrans.h | 2 + deps/icu-small/source/i18n/nultrans.cpp | 2 + deps/icu-small/source/i18n/nultrans.h | 2 + deps/icu-small/source/i18n/numfmt.cpp | 24 +- deps/icu-small/source/i18n/numsys.cpp | 16 +- deps/icu-small/source/i18n/numsys_impl.h | 4 +- deps/icu-small/source/i18n/olsontz.cpp | 18 +- deps/icu-small/source/i18n/olsontz.h | 38 +- deps/icu-small/source/i18n/persncal.cpp | 19 +- deps/icu-small/source/i18n/persncal.h | 67 +- deps/icu-small/source/i18n/pluralaffix.cpp | 2 + deps/icu-small/source/i18n/pluralaffix.h | 6 +- deps/icu-small/source/i18n/plurfmt.cpp | 6 +- deps/icu-small/source/i18n/plurrule.cpp | 50 +- deps/icu-small/source/i18n/plurrule_impl.h | 2 + deps/icu-small/source/i18n/precision.cpp | 4 +- deps/icu-small/source/i18n/precision.h | 42 +- deps/icu-small/source/i18n/quant.cpp | 4 +- deps/icu-small/source/i18n/quant.h | 2 + .../source/i18n/quantityformatter.cpp | 2 + .../icu-small/source/i18n/quantityformatter.h | 8 +- deps/icu-small/source/i18n/rbnf.cpp | 142 +- deps/icu-small/source/i18n/rbt.cpp | 14 +- deps/icu-small/source/i18n/rbt.h | 70 +- deps/icu-small/source/i18n/rbt_data.cpp | 4 +- deps/icu-small/source/i18n/rbt_data.h | 2 + deps/icu-small/source/i18n/rbt_pars.cpp | 74 +- deps/icu-small/source/i18n/rbt_pars.h | 14 +- deps/icu-small/source/i18n/rbt_rule.cpp | 26 +- deps/icu-small/source/i18n/rbt_rule.h | 6 +- deps/icu-small/source/i18n/rbt_set.cpp | 10 +- deps/icu-small/source/i18n/rbt_set.h | 4 +- deps/icu-small/source/i18n/rbtz.cpp | 9 +- deps/icu-small/source/i18n/regexcmp.cpp | 65 +- deps/icu-small/source/i18n/regexcmp.h | 6 +- deps/icu-small/source/i18n/regexcst.h | 332 +- deps/icu-small/source/i18n/regexcst.pl | 5 + deps/icu-small/source/i18n/regeximp.cpp | 7 +- deps/icu-small/source/i18n/regeximp.h | 7 +- deps/icu-small/source/i18n/regexst.cpp | 16 +- deps/icu-small/source/i18n/regexst.h | 5 +- deps/icu-small/source/i18n/regextxt.cpp | 2 + deps/icu-small/source/i18n/regextxt.h | 2 + deps/icu-small/source/i18n/region.cpp | 17 +- deps/icu-small/source/i18n/region_impl.h | 4 +- deps/icu-small/source/i18n/reldatefmt.cpp | 373 +- deps/icu-small/source/i18n/reldtfmt.cpp | 215 +- deps/icu-small/source/i18n/reldtfmt.h | 11 +- deps/icu-small/source/i18n/rematch.cpp | 8 +- deps/icu-small/source/i18n/remtrans.cpp | 2 + deps/icu-small/source/i18n/remtrans.h | 2 + deps/icu-small/source/i18n/repattrn.cpp | 10 +- .../source/i18n/rulebasedcollator.cpp | 4 +- .../source/i18n/scientificnumberformatter.cpp | 2 + deps/icu-small/source/i18n/scriptset.cpp | 50 +- deps/icu-small/source/i18n/scriptset.h | 8 + deps/icu-small/source/i18n/search.cpp | 64 +- deps/icu-small/source/i18n/selfmt.cpp | 2 + deps/icu-small/source/i18n/selfmtimpl.h | 6 +- .../source/i18n/sharedbreakiterator.cpp | 2 + .../source/i18n/sharedbreakiterator.h | 2 + deps/icu-small/source/i18n/sharedcalendar.h | 2 + .../source/i18n/shareddateformatsymbols.h | 2 + .../source/i18n/sharednumberformat.h | 2 + .../icu-small/source/i18n/sharedpluralrules.h | 2 + .../source/i18n/significantdigitinterval.h | 2 + deps/icu-small/source/i18n/simpletz.cpp | 64 +- .../source/i18n/smallintformatter.cpp | 5 +- .../icu-small/source/i18n/smallintformatter.h | 4 +- deps/icu-small/source/i18n/smpdtfmt.cpp | 101 +- deps/icu-small/source/i18n/smpdtfst.cpp | 8 +- deps/icu-small/source/i18n/smpdtfst.h | 8 +- deps/icu-small/source/i18n/sortkey.cpp | 4 +- deps/icu-small/source/i18n/standardplural.cpp | 2 + deps/icu-small/source/i18n/standardplural.h | 2 + deps/icu-small/source/i18n/strmatch.cpp | 14 +- deps/icu-small/source/i18n/strmatch.h | 6 +- deps/icu-small/source/i18n/strrepl.cpp | 4 +- deps/icu-small/source/i18n/strrepl.h | 2 + deps/icu-small/source/i18n/stsearch.cpp | 38 +- deps/icu-small/source/i18n/taiwncal.cpp | 6 +- deps/icu-small/source/i18n/taiwncal.h | 5 +- deps/icu-small/source/i18n/timezone.cpp | 12 +- deps/icu-small/source/i18n/titletrn.cpp | 6 +- deps/icu-small/source/i18n/titletrn.h | 2 + deps/icu-small/source/i18n/tmunit.cpp | 30 +- deps/icu-small/source/i18n/tmutamt.cpp | 18 +- deps/icu-small/source/i18n/tmutfmt.cpp | 201 +- deps/icu-small/source/i18n/tolowtrn.cpp | 4 +- deps/icu-small/source/i18n/tolowtrn.h | 2 + deps/icu-small/source/i18n/toupptrn.cpp | 2 + deps/icu-small/source/i18n/toupptrn.h | 2 + deps/icu-small/source/i18n/translit.cpp | 38 +- deps/icu-small/source/i18n/transreg.cpp | 44 +- deps/icu-small/source/i18n/transreg.h | 2 + deps/icu-small/source/i18n/tridpars.cpp | 42 +- deps/icu-small/source/i18n/tridpars.h | 8 +- deps/icu-small/source/i18n/tzfmt.cpp | 18 +- deps/icu-small/source/i18n/tzgnames.cpp | 2 + deps/icu-small/source/i18n/tzgnames.h | 4 +- deps/icu-small/source/i18n/tznames.cpp | 38 + deps/icu-small/source/i18n/tznames_impl.cpp | 1057 +-- deps/icu-small/source/i18n/tznames_impl.h | 25 +- deps/icu-small/source/i18n/tzrule.cpp | 9 +- deps/icu-small/source/i18n/tztrans.cpp | 2 + deps/icu-small/source/i18n/ucal.cpp | 18 +- deps/icu-small/source/i18n/ucln_in.cpp | 5 +- deps/icu-small/source/i18n/ucln_in.h | 5 +- deps/icu-small/source/i18n/ucol.cpp | 8 +- deps/icu-small/source/i18n/ucol_imp.h | 4 +- deps/icu-small/source/i18n/ucol_res.cpp | 178 +- deps/icu-small/source/i18n/ucol_sit.cpp | 10 +- deps/icu-small/source/i18n/ucoleitr.cpp | 34 +- deps/icu-small/source/i18n/ucsdet.cpp | 2 + deps/icu-small/source/i18n/udat.cpp | 28 +- .../source/i18n/udateintervalformat.cpp | 2 + deps/icu-small/source/i18n/udatpg.cpp | 2 + deps/icu-small/source/i18n/ufieldpositer.cpp | 2 + .../source/i18n/uitercollationiterator.cpp | 2 + .../source/i18n/uitercollationiterator.h | 2 + deps/icu-small/source/i18n/ulocdata.c | 12 +- deps/icu-small/source/i18n/umsg.cpp | 34 +- deps/icu-small/source/i18n/umsg_imp.h | 2 + deps/icu-small/source/i18n/unesctrn.cpp | 6 +- deps/icu-small/source/i18n/unesctrn.h | 2 + deps/icu-small/source/i18n/uni2name.cpp | 4 +- deps/icu-small/source/i18n/uni2name.h | 2 + .../source/i18n/unicode/alphaindex.h | 20 +- deps/icu-small/source/i18n/unicode/basictz.h | 4 +- deps/icu-small/source/i18n/unicode/calendar.h | 18 +- deps/icu-small/source/i18n/unicode/choicfmt.h | 2 + deps/icu-small/source/i18n/unicode/coleitr.h | 52 +- deps/icu-small/source/i18n/unicode/coll.h | 2 + .../i18n/unicode/compactdecimalformat.h | 7 +- deps/icu-small/source/i18n/unicode/curramt.h | 10 +- deps/icu-small/source/i18n/unicode/currpinf.h | 30 +- deps/icu-small/source/i18n/unicode/currunit.h | 6 +- deps/icu-small/source/i18n/unicode/datefmt.h | 36 +- deps/icu-small/source/i18n/unicode/dcfmtsym.h | 2 + deps/icu-small/source/i18n/unicode/decimfmt.h | 14 +- deps/icu-small/source/i18n/unicode/dtfmtsym.h | 46 +- deps/icu-small/source/i18n/unicode/dtitvfmt.h | 2 + deps/icu-small/source/i18n/unicode/dtitvinf.h | 12 +- deps/icu-small/source/i18n/unicode/dtptngen.h | 22 +- deps/icu-small/source/i18n/unicode/dtrule.h | 12 +- deps/icu-small/source/i18n/unicode/fieldpos.h | 31 +- deps/icu-small/source/i18n/unicode/fmtable.h | 6 +- deps/icu-small/source/i18n/unicode/format.h | 14 +- deps/icu-small/source/i18n/unicode/fpositer.h | 4 +- deps/icu-small/source/i18n/unicode/gender.h | 4 +- deps/icu-small/source/i18n/unicode/gregocal.h | 29 +- deps/icu-small/source/i18n/unicode/measfmt.h | 37 +- deps/icu-small/source/i18n/unicode/measunit.h | 84 +- deps/icu-small/source/i18n/unicode/measure.h | 8 +- deps/icu-small/source/i18n/unicode/msgfmt.h | 2 + deps/icu-small/source/i18n/unicode/numfmt.h | 18 +- deps/icu-small/source/i18n/unicode/numsys.h | 6 +- deps/icu-small/source/i18n/unicode/plurfmt.h | 6 +- deps/icu-small/source/i18n/unicode/plurrule.h | 2 + deps/icu-small/source/i18n/unicode/rbnf.h | 10 +- deps/icu-small/source/i18n/unicode/rbtz.h | 4 +- deps/icu-small/source/i18n/unicode/regex.h | 84 +- deps/icu-small/source/i18n/unicode/region.h | 50 +- .../source/i18n/unicode/reldatefmt.h | 32 +- .../i18n/unicode/scientificnumberformatter.h | 6 +- deps/icu-small/source/i18n/unicode/search.h | 267 +- deps/icu-small/source/i18n/unicode/selfmt.h | 2 + deps/icu-small/source/i18n/unicode/simpletz.h | 6 +- deps/icu-small/source/i18n/unicode/smpdtfmt.h | 10 +- deps/icu-small/source/i18n/unicode/sortkey.h | 10 +- deps/icu-small/source/i18n/unicode/stsearch.h | 231 +- deps/icu-small/source/i18n/unicode/tblcoll.h | 4 +- deps/icu-small/source/i18n/unicode/timezone.h | 24 +- deps/icu-small/source/i18n/unicode/tmunit.h | 8 + deps/icu-small/source/i18n/unicode/tmutamt.h | 32 +- deps/icu-small/source/i18n/unicode/tmutfmt.h | 5 + deps/icu-small/source/i18n/unicode/translit.h | 6 +- deps/icu-small/source/i18n/unicode/tzfmt.h | 4 +- deps/icu-small/source/i18n/unicode/tznames.h | 18 +- deps/icu-small/source/i18n/unicode/tzrule.h | 12 +- deps/icu-small/source/i18n/unicode/tztrans.h | 6 +- deps/icu-small/source/i18n/unicode/ucal.h | 184 +- deps/icu-small/source/i18n/unicode/ucol.h | 391 +- deps/icu-small/source/i18n/unicode/ucoleitr.h | 82 +- deps/icu-small/source/i18n/unicode/ucsdet.h | 24 +- deps/icu-small/source/i18n/unicode/udat.h | 24 +- .../source/i18n/unicode/udateintervalformat.h | 4 +- deps/icu-small/source/i18n/unicode/udatpg.h | 53 +- .../source/i18n/unicode/ufieldpositer.h | 6 +- .../source/i18n/unicode/uformattable.h | 10 +- deps/icu-small/source/i18n/unicode/ugender.h | 2 + deps/icu-small/source/i18n/unicode/ulocdata.h | 22 +- deps/icu-small/source/i18n/unicode/umsg.h | 82 +- deps/icu-small/source/i18n/unicode/unirepl.h | 4 +- deps/icu-small/source/i18n/unicode/unum.h | 120 +- deps/icu-small/source/i18n/unicode/unumsys.h | 4 +- .../source/i18n/unicode/upluralrules.h | 8 +- deps/icu-small/source/i18n/unicode/uregex.h | 206 +- deps/icu-small/source/i18n/unicode/uregion.h | 36 +- .../source/i18n/unicode/ureldatefmt.h | 24 +- deps/icu-small/source/i18n/unicode/usearch.h | 362 +- deps/icu-small/source/i18n/unicode/uspoof.h | 1135 +++- deps/icu-small/source/i18n/unicode/utmscale.h | 61 +- deps/icu-small/source/i18n/unicode/utrans.h | 56 +- deps/icu-small/source/i18n/unicode/vtzone.h | 6 +- deps/icu-small/source/i18n/unum.cpp | 72 +- deps/icu-small/source/i18n/unumsys.cpp | 2 + deps/icu-small/source/i18n/upluralrules.cpp | 2 + deps/icu-small/source/i18n/uregex.cpp | 5 +- deps/icu-small/source/i18n/uregexc.cpp | 4 +- deps/icu-small/source/i18n/uregion.cpp | 2 + deps/icu-small/source/i18n/usearch.cpp | 14 +- deps/icu-small/source/i18n/uspoof.cpp | 554 +- deps/icu-small/source/i18n/uspoof_build.cpp | 14 +- deps/icu-small/source/i18n/uspoof_conf.cpp | 259 +- deps/icu-small/source/i18n/uspoof_conf.h | 22 +- deps/icu-small/source/i18n/uspoof_impl.cpp | 640 +- deps/icu-small/source/i18n/uspoof_impl.h | 224 +- deps/icu-small/source/i18n/uspoof_wsconf.cpp | 435 -- deps/icu-small/source/i18n/uspoof_wsconf.h | 70 - deps/icu-small/source/i18n/usrchimp.h | 44 +- .../source/i18n/utf16collationiterator.cpp | 2 + .../source/i18n/utf16collationiterator.h | 2 + .../source/i18n/utf8collationiterator.cpp | 2 + .../source/i18n/utf8collationiterator.h | 2 + deps/icu-small/source/i18n/utmscale.c | 16 +- deps/icu-small/source/i18n/utrans.cpp | 16 +- deps/icu-small/source/i18n/valueformatter.cpp | 2 + deps/icu-small/source/i18n/valueformatter.h | 4 +- deps/icu-small/source/i18n/visibledigits.cpp | 23 +- deps/icu-small/source/i18n/visibledigits.h | 4 +- deps/icu-small/source/i18n/vtzone.cpp | 30 +- deps/icu-small/source/i18n/vzone.cpp | 8 +- deps/icu-small/source/i18n/vzone.h | 10 +- deps/icu-small/source/i18n/windtfmt.cpp | 19 +- deps/icu-small/source/i18n/windtfmt.h | 4 +- deps/icu-small/source/i18n/winnmfmt.cpp | 22 +- deps/icu-small/source/i18n/winnmfmt.h | 4 +- deps/icu-small/source/i18n/wintzimpl.cpp | 10 +- deps/icu-small/source/i18n/wintzimpl.h | 4 +- deps/icu-small/source/i18n/zonemeta.cpp | 2 + deps/icu-small/source/i18n/zonemeta.h | 2 + deps/icu-small/source/i18n/zrule.cpp | 12 +- deps/icu-small/source/i18n/zrule.h | 14 +- deps/icu-small/source/i18n/ztrans.cpp | 4 +- deps/icu-small/source/i18n/ztrans.h | 6 +- deps/icu-small/source/io/io.rc | 11 +- deps/icu-small/source/io/locbund.cpp | 16 +- deps/icu-small/source/io/locbund.h | 2 + deps/icu-small/source/io/sprintf.c | 31 +- deps/icu-small/source/io/sscanf.c | 5 +- deps/icu-small/source/io/ucln_io.cpp | 5 +- deps/icu-small/source/io/ucln_io.h | 2 + deps/icu-small/source/io/ufile.c | 4 +- deps/icu-small/source/io/ufile.h | 14 +- deps/icu-small/source/io/ufmt_cmn.c | 54 +- deps/icu-small/source/io/ufmt_cmn.h | 21 +- deps/icu-small/source/io/unicode/ustdio.h | 48 +- deps/icu-small/source/io/unicode/ustream.h | 2 + deps/icu-small/source/io/uprintf.cpp | 7 +- deps/icu-small/source/io/uprintf.h | 2 + deps/icu-small/source/io/uprntf_p.c | 14 +- deps/icu-small/source/io/uscanf.c | 3 + deps/icu-small/source/io/uscanf.h | 3 + deps/icu-small/source/io/uscanf_p.c | 10 +- deps/icu-small/source/io/ustdio.c | 24 +- deps/icu-small/source/io/ustream.cpp | 2 + deps/icu-small/source/stubdata/stubdata.c | 10 +- .../source/tools/genccode/genccode.c | 2 + deps/icu-small/source/tools/gencmn/gencmn.c | 2 + deps/icu-small/source/tools/genrb/derb.cpp | 2 + deps/icu-small/source/tools/genrb/errmsg.c | 2 + deps/icu-small/source/tools/genrb/errmsg.h | 2 + deps/icu-small/source/tools/genrb/genrb.cpp | 2 + deps/icu-small/source/tools/genrb/genrb.h | 2 + deps/icu-small/source/tools/genrb/parse.cpp | 8 +- deps/icu-small/source/tools/genrb/parse.h | 2 + .../icu-small/source/tools/genrb/prscmnts.cpp | 47 +- deps/icu-small/source/tools/genrb/prscmnts.h | 9 +- deps/icu-small/source/tools/genrb/rbutil.c | 14 +- deps/icu-small/source/tools/genrb/rbutil.h | 2 + deps/icu-small/source/tools/genrb/read.c | 16 +- deps/icu-small/source/tools/genrb/read.h | 2 + deps/icu-small/source/tools/genrb/reslist.cpp | 2 + deps/icu-small/source/tools/genrb/reslist.h | 4 +- deps/icu-small/source/tools/genrb/rle.c | 3 + deps/icu-small/source/tools/genrb/rle.h | 4 +- deps/icu-small/source/tools/genrb/ustr.c | 12 +- deps/icu-small/source/tools/genrb/ustr.h | 2 + deps/icu-small/source/tools/genrb/wrtjava.cpp | 6 +- deps/icu-small/source/tools/genrb/wrtxml.cpp | 2 + deps/icu-small/source/tools/icupkg/icupkg.cpp | 2 + .../source/tools/pkgdata/pkgdata.cpp | 68 +- .../icu-small/source/tools/pkgdata/pkgtypes.c | 2 + .../icu-small/source/tools/pkgdata/pkgtypes.h | 2 + .../source/tools/toolutil/collationinfo.cpp | 2 + .../source/tools/toolutil/collationinfo.h | 2 + .../source/tools/toolutil/dbgutil.cpp | 6 +- .../icu-small/source/tools/toolutil/dbgutil.h | 4 +- .../source/tools/toolutil/denseranges.cpp | 2 + .../source/tools/toolutil/denseranges.h | 2 + .../source/tools/toolutil/filestrm.c | 8 +- .../source/tools/toolutil/filestrm.h | 2 + .../source/tools/toolutil/filetools.cpp | 26 +- .../source/tools/toolutil/filetools.h | 2 + .../source/tools/toolutil/flagparser.c | 8 +- .../source/tools/toolutil/flagparser.h | 2 + .../source/tools/toolutil/package.cpp | 10 +- .../icu-small/source/tools/toolutil/package.h | 4 + .../source/tools/toolutil/pkg_genc.c | 4 +- .../source/tools/toolutil/pkg_genc.h | 2 + .../source/tools/toolutil/pkg_gencmn.c | 2 + .../source/tools/toolutil/pkg_gencmn.h | 2 + .../source/tools/toolutil/pkg_icu.cpp | 2 + .../icu-small/source/tools/toolutil/pkg_icu.h | 2 + .../icu-small/source/tools/toolutil/pkg_imp.h | 2 + .../source/tools/toolutil/pkgitems.cpp | 8 +- .../icu-small/source/tools/toolutil/ppucd.cpp | 2 + deps/icu-small/source/tools/toolutil/ppucd.h | 2 + .../source/tools/toolutil/swapimpl.cpp | 4 +- .../source/tools/toolutil/swapimpl.h | 2 + .../source/tools/toolutil/toolutil.cpp | 10 +- .../source/tools/toolutil/toolutil.h | 8 +- .../icu-small/source/tools/toolutil/ucbuf.cpp | 38 +- deps/icu-small/source/tools/toolutil/ucbuf.h | 3 + .../source/tools/toolutil/ucln_tu.cpp | 2 + deps/icu-small/source/tools/toolutil/ucm.c | 6 +- deps/icu-small/source/tools/toolutil/ucm.h | 3 + .../source/tools/toolutil/ucmstate.c | 3 + .../source/tools/toolutil/udbgutil.cpp | 8 +- .../source/tools/toolutil/udbgutil.h | 2 + .../source/tools/toolutil/unewdata.c | 23 +- .../source/tools/toolutil/unewdata.h | 2 + .../source/tools/toolutil/uoptions.c | 2 + .../source/tools/toolutil/uoptions.h | 4 +- deps/icu-small/source/tools/toolutil/uparse.c | 4 +- deps/icu-small/source/tools/toolutil/uparse.h | 2 + .../source/tools/toolutil/writesrc.c | 38 +- .../source/tools/toolutil/writesrc.h | 2 + .../source/tools/toolutil/xmlparser.cpp | 33 +- .../source/tools/toolutil/xmlparser.h | 4 +- 897 files changed, 23548 insertions(+), 18793 deletions(-) delete mode 100644 deps/icu-small/license.html mode change 100644 => 100755 deps/icu-small/source/common/rbbicst.pl create mode 100644 deps/icu-small/source/common/ubiditransform.c create mode 100644 deps/icu-small/source/common/unicode/ubiditransform.h delete mode 100644 deps/icu-small/source/data/in/icudt57l.dat create mode 100644 deps/icu-small/source/data/in/icudt58l.dat create mode 100644 deps/icu-small/source/i18n/dt_impl.h delete mode 100644 deps/icu-small/source/i18n/identifier_info.cpp delete mode 100644 deps/icu-small/source/i18n/identifier_info.h mode change 100644 => 100755 deps/icu-small/source/i18n/regexcst.pl mode change 100644 => 100755 deps/icu-small/source/i18n/unicode/selfmt.h delete mode 100644 deps/icu-small/source/i18n/uspoof_wsconf.cpp delete mode 100644 deps/icu-small/source/i18n/uspoof_wsconf.h diff --git a/deps/icu-small/LICENSE b/deps/icu-small/LICENSE index 81662a05a769c3..90be7cdf052615 100644 --- a/deps/icu-small/LICENSE +++ b/deps/icu-small/LICENSE @@ -1,9 +1,50 @@ -ICU License - ICU 1.8.1 and later +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://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. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1995-2016 International Business Machines Corporation and others - All rights reserved. Permission is hereby granted, free of charge, to any person obtaining @@ -31,58 +72,9 @@ shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. - All trademarks and registered trademarks mentioned herein are the property of their respective owners. ---------------------- - -Third-Party Software Licenses - -This section contains third-party software notices and/or additional -terms for licensed third-party software components included within ICU -libraries. - -1. Unicode Data Files and Software - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2016 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in -http://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 -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, -(b) this copyright and permission notice appear in associated -documentation, and -(c) there is clear notice in each modified Data File or in the Software -as well as in the documentation associated with the Data File(s) or -Software that the data or software has been modified. - -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. - 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under diff --git a/deps/icu-small/README-SMALL-ICU.txt b/deps/icu-small/README-SMALL-ICU.txt index 3f614659fbf9dd..79b6417f08bcee 100644 --- a/deps/icu-small/README-SMALL-ICU.txt +++ b/deps/icu-small/README-SMALL-ICU.txt @@ -1,8 +1,9 @@ Small ICU sources - auto generated by shrink-icu-src.py This directory contains the ICU subset used by --with-intl=small-icu (the default) -It is a strict subset of ICU 57 source files with the following exception(s): -* deps/icu-small/source/data/in/icudt57l.dat : Reduced-size data file +It is a strict subset of ICU 58 source files with the following exception(s): +* deps/icu-small/source/data/in/icudt58l.dat : Reduced-size data file To rebuild this directory, see ../../tools/icu/README.md + diff --git a/deps/icu-small/license.html b/deps/icu-small/license.html deleted file mode 100644 index 3430616d661af7..00000000000000 --- a/deps/icu-small/license.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - -ICU License - moved to LICENSE - - - -

- The ICU license is now in plain text format, see LICENSE. -Update links and software appropriately. -

- - Copyright (c) 1995-2016 International Business Machines Corporation and others - - - diff --git a/deps/icu-small/source/common/appendable.cpp b/deps/icu-small/source/common/appendable.cpp index e46d0790181004..1a597b5de52e58 100644 --- a/deps/icu-small/source/common/appendable.cpp +++ b/deps/icu-small/source/common/appendable.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines diff --git a/deps/icu-small/source/common/bmpset.cpp b/deps/icu-small/source/common/bmpset.cpp index 7cd32eb99c9e33..ebcd0d23bf9f59 100644 --- a/deps/icu-small/source/common/bmpset.cpp +++ b/deps/icu-small/source/common/bmpset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/bmpset.h b/deps/icu-small/source/common/bmpset.h index d9e08eaa66fe10..8975cd61d5cc21 100644 --- a/deps/icu-small/source/common/bmpset.h +++ b/deps/icu-small/source/common/bmpset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/brkeng.cpp b/deps/icu-small/source/common/brkeng.cpp index c40bcdb0b581fe..cf144833fae73e 100644 --- a/deps/icu-small/source/common/brkeng.cpp +++ b/deps/icu-small/source/common/brkeng.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************************ * Copyright (C) 2006-2016, International Business Machines Corporation @@ -84,7 +86,7 @@ UnhandledEngine::findBreaks( UText *text, int32_t breakType, UStack &/*foundBreaks*/ ) const { if (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled)) { - UChar32 c = utext_current32(text); + UChar32 c = utext_current32(text); if (reverse) { while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) { c = utext_previous32(text); @@ -166,7 +168,7 @@ ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) { } } } - + // We didn't find an engine. Create one. lbe = loadEngineFor(c, breakType); if (lbe != NULL) { @@ -241,7 +243,7 @@ ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) { } DictionaryMatcher * -ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t /* brkType */) { +ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t /* brkType */) { UErrorCode status = U_ZERO_ERROR; // open root from brkitr tree. UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status); @@ -282,7 +284,7 @@ ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t /* m = new UCharsDictionaryMatcher(characters, file); } if (m == NULL) { - // no matcher exists to take ownership - either we are an invalid + // no matcher exists to take ownership - either we are an invalid // type or memory allocation failed udata_close(file); } diff --git a/deps/icu-small/source/common/brkeng.h b/deps/icu-small/source/common/brkeng.h index 932b8db2b5f8c5..163cbbe29674aa 100644 --- a/deps/icu-small/source/common/brkeng.h +++ b/deps/icu-small/source/common/brkeng.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ************************************************************************************ * Copyright (C) 2006-2012, International Business Machines Corporation and others. * @@ -276,7 +278,7 @@ class ICULanguageBreakFactory : public LanguageBreakFactory { *

Create a DictionaryMatcher for the specified script and break type.

* @param script An ISO 15924 script code that identifies the dictionary to be * created. - * @param breakType The kind of text break for which a dictionary is + * @param breakType The kind of text break for which a dictionary is * sought. * @return A DictionaryMatcher with the desired characteristics, or NULL. */ diff --git a/deps/icu-small/source/common/brkiter.cpp b/deps/icu-small/source/common/brkiter.cpp index a05a0e4c20baa8..029ec5e185d8b7 100644 --- a/deps/icu-small/source/common/brkiter.cpp +++ b/deps/icu-small/source/common/brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and @@ -117,7 +119,7 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, // If there is a result, set the valid locale and actual locale, and the kind if (U_SUCCESS(status) && result != NULL) { U_LOCALE_BASED(locBased, *(BreakIterator*)result); - locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), + locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale.data()); result->setBreakType(kind); } @@ -285,7 +287,7 @@ static UBool U_CALLCONV breakiterator_cleanup(void) { U_CDECL_END U_NAMESPACE_BEGIN -static void U_CALLCONV +static void U_CALLCONV initService(void) { gService = new ICUBreakIteratorService(); ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup); @@ -418,6 +420,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) break; case UBRK_SENTENCE: result = BreakIterator::buildInstance(loc, "sentence", kind, status); +#if !UCONFIG_NO_FILTERED_BREAK_ITERATION { char ssKeyValue[kKeyValueLenMax] = {0}; UErrorCode kvStatus = U_ZERO_ERROR; @@ -430,6 +433,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) } } } +#endif break; case UBRK_TITLE: result = BreakIterator::buildInstance(loc, "title", kind, status); diff --git a/deps/icu-small/source/common/bytestream.cpp b/deps/icu-small/source/common/bytestream.cpp index ebd4148e02f2d1..5a5c2e4410e936 100644 --- a/deps/icu-small/source/common/bytestream.cpp +++ b/deps/icu-small/source/common/bytestream.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2011, International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/bytestrie.cpp b/deps/icu-small/source/common/bytestrie.cpp index 8a1ab4c62bbc17..093cd8ddb12106 100644 --- a/deps/icu-small/source/common/bytestrie.cpp +++ b/deps/icu-small/source/common/bytestrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/bytestriebuilder.cpp b/deps/icu-small/source/common/bytestriebuilder.cpp index f252e2d41fe5d7..913d85a21217be 100644 --- a/deps/icu-small/source/common/bytestriebuilder.cpp +++ b/deps/icu-small/source/common/bytestriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -35,7 +37,7 @@ class BytesTrieElement : public UMemory { public: // Use compiler's default constructor, initializes nothing. - void setTo(const StringPiece &s, int32_t val, CharString &strings, UErrorCode &errorCode); + void setTo(StringPiece s, int32_t val, CharString &strings, UErrorCode &errorCode); StringPiece getString(const CharString &strings) const { int32_t offset=stringOffset; @@ -86,7 +88,7 @@ class BytesTrieElement : public UMemory { }; void -BytesTrieElement::setTo(const StringPiece &s, int32_t val, +BytesTrieElement::setTo(StringPiece s, int32_t val, CharString &strings, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; @@ -143,7 +145,7 @@ BytesTrieBuilder::~BytesTrieBuilder() { } BytesTrieBuilder & -BytesTrieBuilder::add(const StringPiece &s, int32_t value, UErrorCode &errorCode) { +BytesTrieBuilder::add(StringPiece s, int32_t value, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return *this; } @@ -165,7 +167,7 @@ BytesTrieBuilder::add(const StringPiece &s, int32_t value, UErrorCode &errorCode return *this; // error instead of dereferencing null } if(elementsLength>0) { - uprv_memcpy(newElements, elements, elementsLength*sizeof(BytesTrieElement)); + uprv_memcpy(newElements, elements, (size_t)elementsLength*sizeof(BytesTrieElement)); } delete[] elements; elements=newElements; diff --git a/deps/icu-small/source/common/bytestrieiterator.cpp b/deps/icu-small/source/common/bytestrieiterator.cpp index e50f07c24fee65..4d04247c4933d0 100644 --- a/deps/icu-small/source/common/bytestrieiterator.cpp +++ b/deps/icu-small/source/common/bytestrieiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -139,7 +141,6 @@ BytesTrie::Iterator::next(UErrorCode &errorCode) { } else { pos_=skipValue(pos, node); } - sp_.set(str_->data(), str_->length()); return TRUE; } if(maxLength_>0 && str_->length()==maxLength_) { @@ -167,10 +168,14 @@ BytesTrie::Iterator::next(UErrorCode &errorCode) { } } +StringPiece +BytesTrie::Iterator::getString() const { + return str_ == NULL ? StringPiece() : str_->toStringPiece(); +} + UBool BytesTrie::Iterator::truncateAndStop() { pos_=NULL; - sp_.set(str_->data(), str_->length()); value_=-1; // no real value for str return TRUE; } @@ -199,7 +204,6 @@ BytesTrie::Iterator::branchNext(const uint8_t *pos, int32_t length, UErrorCode & str_->append((char)trieByte, errorCode); if(isFinal) { pos_=NULL; - sp_.set(str_->data(), str_->length()); value_=value; return NULL; } else { diff --git a/deps/icu-small/source/common/caniter.cpp b/deps/icu-small/source/common/caniter.cpp index ac1206df129501..24793508fa69a7 100644 --- a/deps/icu-small/source/common/caniter.cpp +++ b/deps/icu-small/source/common/caniter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 1996-2015, International Business Machines Corporation and @@ -206,12 +208,12 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st goto CleanPartialInitialization; } - // i should initialy be the number of code units at the + // i should initialy be the number of code units at the // start of the string i = U16_LENGTH(source.char32At(0)); //int32_t i = 1; // find the segments - // This code iterates through the source string and + // This code iterates through the source string and // extracts segments that end up on a codepoint that // doesn't start any decompositions. (Analysis is done // on the NFD form - see above). @@ -239,7 +241,7 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st for (i = 0; i < current_length; i++) { current[i] = 0; } - // for each segment, get all the combinations that can produce + // for each segment, get all the combinations that can produce // it after NFD normalization for (i = 0; i < pieces_length; ++i) { //if (PROGRESS) printf("SEGMENT\n"); @@ -314,7 +316,7 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros if(U_FAILURE(status)) { return; } - // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents + // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents // of source at this point. // prefix this character to all of them @@ -491,9 +493,9 @@ Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UCh } /** - * See if the decomposition of cp2 is at segment starting at segmentPos + * See if the decomposition of cp2 is at segment starting at segmentPos * (with canonical rearrangment!) - * If so, take the remainder, and return the equivalents + * If so, take the remainder, and return the equivalents */ Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) { //Hashtable *CanonicalIterator::extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) { diff --git a/deps/icu-small/source/common/chariter.cpp b/deps/icu-small/source/common/chariter.cpp index 2d923ea0a6b5a8..625ac49eaccdb9 100644 --- a/deps/icu-small/source/common/chariter.cpp +++ b/deps/icu-small/source/common/chariter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/charstr.cpp b/deps/icu-small/source/common/charstr.cpp index 1b27c683de2f18..c792181378ec0b 100644 --- a/deps/icu-small/source/common/charstr.cpp +++ b/deps/icu-small/source/common/charstr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines @@ -144,7 +146,7 @@ UBool CharString::ensureCapacity(int32_t capacity, return TRUE; } -CharString &CharString::appendPathPart(const StringPiece &s, UErrorCode &errorCode) { +CharString &CharString::appendPathPart(StringPiece s, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return *this; } diff --git a/deps/icu-small/source/common/charstr.h b/deps/icu-small/source/common/charstr.h index d2e20c4813ce1d..9758c5c542b3f0 100644 --- a/deps/icu-small/source/common/charstr.h +++ b/deps/icu-small/source/common/charstr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2015, International Business Machines @@ -39,7 +41,7 @@ template class U_COMMON_API MaybeStackArray; class U_COMMON_API CharString : public UMemory { public: CharString() : len(0) { buffer[0]=0; } - CharString(const StringPiece &s, UErrorCode &errorCode) : len(0) { + CharString(StringPiece s, UErrorCode &errorCode) : len(0) { buffer[0]=0; append(s, errorCode); } @@ -76,7 +78,7 @@ class U_COMMON_API CharString : public UMemory { CharString &truncate(int32_t newLength); CharString &append(char c, UErrorCode &errorCode); - CharString &append(const StringPiece &s, UErrorCode &errorCode) { + CharString &append(StringPiece s, UErrorCode &errorCode) { return append(s.data(), s.length(), errorCode); } CharString &append(const CharString &s, UErrorCode &errorCode) { @@ -115,7 +117,7 @@ class U_COMMON_API CharString : public UMemory { * First appends a U_FILE_SEP_CHAR if necessary. * Does nothing if s is empty. */ - CharString &appendPathPart(const StringPiece &s, UErrorCode &errorCode); + CharString &appendPathPart(StringPiece s, UErrorCode &errorCode); /** * Appends a U_FILE_SEP_CHAR if this string is not empty diff --git a/deps/icu-small/source/common/cmemory.c b/deps/icu-small/source/common/cmemory.c index 2b624accc187db..b40994a1eede89 100644 --- a/deps/icu-small/source/common/cmemory.c +++ b/deps/icu-small/source/common/cmemory.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -36,7 +38,7 @@ static UMemFreeFn *pFree; #if U_DEBUG && defined(UPRV_MALLOC_COUNT) #include static int n=0; -static long b=0; +static long b=0; #endif #if U_DEBUG diff --git a/deps/icu-small/source/common/cmemory.h b/deps/icu-small/source/common/cmemory.h index 8c62868855a12b..a1211bdc3c4abc 100644 --- a/deps/icu-small/source/common/cmemory.h +++ b/deps/icu-small/source/common/cmemory.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -120,7 +122,7 @@ typedef union { * Clears any user heap functions from u_setMemoryFunctions() * Does NOT deallocate any remaining allocated memory. */ -U_CFUNC UBool +U_CFUNC UBool cmemory_cleanup(void); /** @@ -281,7 +283,7 @@ inline T *LocalMemory::allocateInsteadAndCopy(int32_t newCapacity, int32_t le if(length>newCapacity) { length=newCapacity; } - uprv_memcpy(p, LocalPointerBase::ptr, length*sizeof(T)); + uprv_memcpy(p, LocalPointerBase::ptr, (size_t)length*sizeof(T)); } uprv_free(LocalPointerBase::ptr); LocalPointerBase::ptr=p; @@ -406,7 +408,7 @@ class MaybeStackArray { // Returning NULL is rejected by gcc for operator new. // The expedient thing is just not to override operator new. // While relatively pointless, heap allocated instances will function. - // static void * U_EXPORT2 operator new(size_t size); + // static void * U_EXPORT2 operator new(size_t size); // static void * U_EXPORT2 operator new[](size_t size); #if U_HAVE_PLACEMENT_NEW // static void * U_EXPORT2 operator new(size_t, void *ptr); @@ -428,7 +430,7 @@ inline T *MaybeStackArray::resize(int32_t newCapacity, int32_t if(length>newCapacity) { length=newCapacity; } - uprv_memcpy(p, ptr, length*sizeof(T)); + uprv_memcpy(p, ptr, (size_t)length*sizeof(T)); } releaseArray(); ptr=p; @@ -459,7 +461,7 @@ inline T *MaybeStackArray::orphanOrClone(int32_t length, int32 if(p==NULL) { return NULL; } - uprv_memcpy(p, ptr, length*sizeof(T)); + uprv_memcpy(p, ptr, (size_t)length*sizeof(T)); } resultCapacity=length; ptr=stackArray; @@ -581,7 +583,7 @@ class MaybeStackHeaderAndArray { // No heap allocation. Use only on the stack. // (Declaring these functions private triggers a cascade of problems; // see the MaybeStackArray class for details.) - // static void * U_EXPORT2 operator new(size_t size); + // static void * U_EXPORT2 operator new(size_t size); // static void * U_EXPORT2 operator new[](size_t size); #if U_HAVE_PLACEMENT_NEW // static void * U_EXPORT2 operator new(size_t, void *ptr); @@ -607,7 +609,7 @@ inline H *MaybeStackHeaderAndArray::resize(int32_t newCapac length=newCapacity; } } - uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T)); + uprv_memcpy(p, ptr, sizeof(H)+(size_t)length*sizeof(T)); releaseMemory(); ptr=p; capacity=newCapacity; @@ -638,7 +640,7 @@ inline H *MaybeStackHeaderAndArray::orphanOrClone(int32_t l if(p==NULL) { return NULL; } - uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T)); + uprv_memcpy(p, ptr, sizeof(H)+(size_t)length*sizeof(T)); } resultCapacity=length; ptr=&stackHeader; diff --git a/deps/icu-small/source/common/common.rc b/deps/icu-small/source/common/common.rc index b6e405a93aec80..020abacc0d81fe 100644 --- a/deps/icu-small/source/common/common.rc +++ b/deps/icu-small/source/common/common.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // @@ -16,7 +18,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// +// LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #pragma code_page(1252) @@ -27,17 +29,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "msvcres.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "#include \0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "\r\n" "\0" @@ -105,3 +107,4 @@ END ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED + diff --git a/deps/icu-small/source/common/cpputils.h b/deps/icu-small/source/common/cpputils.h index b2e0cbc8d61cc7..57af69a7129483 100644 --- a/deps/icu-small/source/common/cpputils.h +++ b/deps/icu-small/source/common/cpputils.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -24,45 +26,45 @@ static inline void uprv_arrayCopy(const double* src, double* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const double* src, int32_t srcStart, double* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int8_t* src, int8_t* dst, int32_t count) - { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } + { uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int8_t* src, int32_t srcStart, int8_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int16_t* src, int16_t* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int16_t* src, int32_t srcStart, int16_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int32_t* src, int32_t* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int32_t* src, int32_t srcStart, int32_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const UChar *src, int32_t srcStart, UChar *dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } /** * Copy an array of UnicodeString OBJECTS (not pointers). diff --git a/deps/icu-small/source/common/cstr.cpp b/deps/icu-small/source/common/cstr.cpp index c30719361eacc5..a0006df18e669f 100644 --- a/deps/icu-small/source/common/cstr.cpp +++ b/deps/icu-small/source/common/cstr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015-2016, International Business Machines @@ -6,22 +8,40 @@ * file name: charstr.cpp */ #include "unicode/utypes.h" +#include "unicode/putil.h" #include "unicode/unistr.h" -#include "charstr.h" #include "cstr.h" +#include "charstr.h" +#include "uinvchar.h" + U_NAMESPACE_BEGIN CStr::CStr(const UnicodeString &in) { UErrorCode status = U_ZERO_ERROR; - int32_t length = in.extract(0, in.length(), NULL, (uint32_t)0); +#if !UCONFIG_NO_CONVERSION || U_CHARSET_IS_UTF8 + int32_t length = in.extract(0, in.length(), static_cast(NULL), static_cast(0)); int32_t resultCapacity = 0; char *buf = s.getAppendBuffer(length, length, resultCapacity, status); if (U_SUCCESS(status)) { in.extract(0, in.length(), buf, resultCapacity); s.append(buf, length, status); } +#else + // No conversion available. Convert any invariant characters; substitute '?' for the rest. + // Note: can't just call u_UCharsToChars() or CharString.appendInvariantChars() on the + // whole string because they require that the entire input be invariant. + char buf[2]; + for (int i=0; i=2 && radix<=16); uval = (uint32_t) v; if(v<0 && radix == 10) { /* Only in base 10 do we conside numbers to be signed. */ - uval = (uint32_t)(-v); + uval = (uint32_t)(-v); buffer[length++] = '-'; } - + tbx = sizeof(tbuf)-1; tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */ do { @@ -175,7 +177,7 @@ T_CString_integerToString(char* buffer, int32_t v, int32_t radix) tbuf[--tbx] = (char)(T_CString_itosOffset(digit)); uval = uval / radix; } while (uval != 0); - + /* copy converted number into user buffer */ uprv_strcpy(buffer+length, tbuf+tbx); length += sizeof(tbuf) - tbx -1; @@ -197,15 +199,15 @@ T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix) uint8_t digit; int32_t length = 0; uint64_t uval; - + U_ASSERT(radix>=2 && radix<=16); uval = (uint64_t) v; if(v<0 && radix == 10) { /* Only in base 10 do we conside numbers to be signed. */ - uval = (uint64_t)(-v); + uval = (uint64_t)(-v); buffer[length++] = '-'; } - + tbx = sizeof(tbuf)-1; tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */ do { @@ -213,7 +215,7 @@ T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix) tbuf[--tbx] = (char)(T_CString_itosOffset(digit)); uval = uval / radix; } while (uval != 0); - + /* copy converted number into user buffer */ uprv_strcpy(buffer+length, tbuf+tbx); length += sizeof(tbuf) - tbx -1; @@ -329,7 +331,7 @@ uprv_strndup(const char *src, int32_t n) { dup = uprv_strdup(src); } else { dup = (char*)uprv_malloc(n+1); - if (dup) { + if (dup) { uprv_memcpy(dup, src, n); dup[n] = 0; } diff --git a/deps/icu-small/source/common/cstring.h b/deps/icu-small/source/common/cstring.h index 64b68ffabb26bc..238cb3138f2568 100644 --- a/deps/icu-small/source/common/cstring.h +++ b/deps/icu-small/source/common/cstring.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/cwchar.c b/deps/icu-small/source/common/cwchar.c index e82908c7d3b92a..4c469ce0ef7d3a 100644 --- a/deps/icu-small/source/common/cwchar.c +++ b/deps/icu-small/source/common/cwchar.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ****************************************************************************** * * Copyright (C) 2001, International Business Machines @@ -50,3 +52,4 @@ U_CAPI size_t uprv_wcslen(const wchar_t *src) { } #endif + diff --git a/deps/icu-small/source/common/cwchar.h b/deps/icu-small/source/common/cwchar.h index b41f4b91448393..c8c3497f7c0031 100644 --- a/deps/icu-small/source/common/cwchar.h +++ b/deps/icu-small/source/common/cwchar.h @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ****************************************************************************** * * Copyright (C) 2001, International Business Machines @@ -40,11 +42,11 @@ # define uprv_wcscat wcscat # define uprv_wcslen wcslen #else -U_CAPI wchar_t* U_EXPORT2 +U_CAPI wchar_t* U_EXPORT2 uprv_wcscpy(wchar_t *dst, const wchar_t *src); -U_CAPI wchar_t* U_EXPORT2 +U_CAPI wchar_t* U_EXPORT2 uprv_wcscat(wchar_t *dst, const wchar_t *src); -U_CAPI size_t U_EXPORT2 +U_CAPI size_t U_EXPORT2 uprv_wcslen(const wchar_t *src); #endif diff --git a/deps/icu-small/source/common/dictbe.cpp b/deps/icu-small/source/common/dictbe.cpp index 00847aa9f2a4c9..924f09bd5dd991 100644 --- a/deps/icu-small/source/common/dictbe.cpp +++ b/deps/icu-small/source/common/dictbe.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2006-2016, International Business Machines Corporation @@ -90,7 +92,7 @@ DictionaryBreakEngine::findBreaks( UText *text, result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks); utext_setNativeIndex(text, current); } - + return result; } @@ -128,24 +130,24 @@ class PossibleWord { public: PossibleWord() : count(0), prefix(0), offset(-1), mark(0), current(0) {}; ~PossibleWord() {}; - + // Fill the list of candidates if needed, select the longest, and return the number found int32_t candidates( UText *text, DictionaryMatcher *dict, int32_t rangeEnd ); - + // Select the currently marked candidate, point after it in the text, and invalidate self int32_t acceptMarked( UText *text ); - + // Back up from the current candidate to the next shorter one; return TRUE if that exists // and point the text after it UBool backUp( UText *text ); - + // Return the longest prefix this candidate location shares with a dictionary word // Return value is in code points. int32_t longestPrefix() { return prefix; }; - + // Mark the current candidate as the one we like void markCurrent() { mark = current; }; - + // Get length in code points of the marked word. int32_t markedCPLength() { return cpLengths[mark]; }; }; @@ -261,16 +263,16 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, int32_t current; UErrorCode status = U_ZERO_ERROR; PossibleWord words[THAI_LOOKAHEAD]; - + utext_setNativeIndex(text, rangeStart); - + while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) { cpWordLength = 0; cuWordLength = 0; // Look for candidate words at the current position int32_t candidates = words[wordsFound%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd); - + // If we found exactly one, use that if (candidates == 1) { cuWordLength = words[wordsFound % THAI_LOOKAHEAD].acceptMarked(text); @@ -291,12 +293,12 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, words[wordsFound%THAI_LOOKAHEAD].markCurrent(); wordsMatched = 2; } - + // If we're already at the end of the range, we're done if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { goto foundBest; } - + // See if any of the possible second words is followed by a third word do { // If we find a third word, stop right away @@ -315,13 +317,13 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, cpWordLength = words[wordsFound % THAI_LOOKAHEAD].markedCPLength(); wordsFound += 1; } - + // We come here after having either found a word or not. We look ahead to the // next word. If it's not a dictionary word, we will combine it with the word we // just found (if there is one), but only if the preceding word does not exceed // the threshold. // The text iterator should now be positioned at the end of the word we found. - + UChar32 uc = 0; if ((int32_t)utext_getNativeIndex(text) < rangeEnd && cpWordLength < THAI_ROOT_COMBINE_THRESHOLD) { // if it is a dictionary word, do nothing. If it isn't, then if there is @@ -357,12 +359,12 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, } } } - + // Bump the word count if there wasn't already one if (cuWordLength <= 0) { wordsFound += 1; } - + // Update the length with the passed-over characters cuWordLength += chars; } @@ -371,14 +373,14 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, utext_setNativeIndex(text, current+cuWordLength); } } - + // Never stop before a combining mark. int32_t currPos; while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { utext_next32(text); cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos; } - + // Look ahead for possible suffixes if a dictionary word does not follow. // We do this in code rather than using a rule so that the heuristic // resynch continues to function. For example, one of the suffix characters @@ -496,16 +498,16 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, int32_t current; UErrorCode status = U_ZERO_ERROR; PossibleWord words[LAO_LOOKAHEAD]; - + utext_setNativeIndex(text, rangeStart); - + while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) { cuWordLength = 0; cpWordLength = 0; // Look for candidate words at the current position int32_t candidates = words[wordsFound%LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd); - + // If we found exactly one, use that if (candidates == 1) { cuWordLength = words[wordsFound % LAO_LOOKAHEAD].acceptMarked(text); @@ -526,12 +528,12 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, words[wordsFound%LAO_LOOKAHEAD].markCurrent(); wordsMatched = 2; } - + // If we're already at the end of the range, we're done if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { goto foundBest; } - + // See if any of the possible second words is followed by a third word do { // If we find a third word, stop right away @@ -549,7 +551,7 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, cpWordLength = words[wordsFound % LAO_LOOKAHEAD].markedCPLength(); wordsFound += 1; } - + // We come here after having either found a word or not. We look ahead to the // next word. If it's not a dictionary word, we will combine it withe the word we // just found (if there is one), but only if the preceding word does not exceed @@ -587,12 +589,12 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, } } } - + // Bump the word count if there wasn't already one if (cuWordLength <= 0) { wordsFound += 1; } - + // Update the length with the passed-over characters cuWordLength += chars; } @@ -601,14 +603,14 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, utext_setNativeIndex(text, current + cuWordLength); } } - + // Never stop before a combining mark. int32_t currPos; while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { utext_next32(text); cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos; } - + // Look ahead for possible suffixes if a dictionary word does not follow. // We do this in code rather than using a rule so that the heuristic // resynch continues to function. For example, one of the suffix characters @@ -689,16 +691,16 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, int32_t current; UErrorCode status = U_ZERO_ERROR; PossibleWord words[BURMESE_LOOKAHEAD]; - + utext_setNativeIndex(text, rangeStart); - + while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) { cuWordLength = 0; cpWordLength = 0; // Look for candidate words at the current position int32_t candidates = words[wordsFound%BURMESE_LOOKAHEAD].candidates(text, fDictionary, rangeEnd); - + // If we found exactly one, use that if (candidates == 1) { cuWordLength = words[wordsFound % BURMESE_LOOKAHEAD].acceptMarked(text); @@ -719,12 +721,12 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, words[wordsFound%BURMESE_LOOKAHEAD].markCurrent(); wordsMatched = 2; } - + // If we're already at the end of the range, we're done if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { goto foundBest; } - + // See if any of the possible second words is followed by a third word do { // If we find a third word, stop right away @@ -742,7 +744,7 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, cpWordLength = words[wordsFound % BURMESE_LOOKAHEAD].markedCPLength(); wordsFound += 1; } - + // We come here after having either found a word or not. We look ahead to the // next word. If it's not a dictionary word, we will combine it withe the word we // just found (if there is one), but only if the preceding word does not exceed @@ -780,12 +782,12 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, } } } - + // Bump the word count if there wasn't already one if (cuWordLength <= 0) { wordsFound += 1; } - + // Update the length with the passed-over characters cuWordLength += chars; } @@ -794,14 +796,14 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, utext_setNativeIndex(text, current + cuWordLength); } } - + // Never stop before a combining mark. int32_t currPos; while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { utext_next32(text); cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos; } - + // Look ahead for possible suffixes if a dictionary word does not follow. // We do this in code rather than using a rule so that the heuristic // resynch continues to function. For example, one of the suffix characters @@ -1050,7 +1052,7 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text, foundBreaks.push((current+cuWordLength), status); } } - + // Don't return a break for the end of the dictionary range if there is one there. if (foundBreaks.peeki() >= rangeEnd) { (void) foundBreaks.popi(); @@ -1121,7 +1123,7 @@ static inline int32_t utext_i32_flag(int32_t bitIndex) { return (int32_t)1 << bitIndex; } - + /* * @param text A UText representing the text * @param rangeStart The start of the range of dictionary characters @@ -1129,7 +1131,7 @@ static inline int32_t utext_i32_flag(int32_t bitIndex) { * @param foundBreaks Output of C array of int32_t break positions, or 0 * @return The number of breaks found */ -int32_t +int32_t CjkBreakEngine::divideUpDictionaryRange( UText *inText, int32_t rangeStart, int32_t rangeEnd, @@ -1192,7 +1194,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, if (U_FAILURE(status)) { return 0; } - + UnicodeString fragment; UnicodeString normalizedFragment; for (int32_t srcI = 0; srcI < inString.length();) { // Once per normalization chunk @@ -1261,7 +1263,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, } } } - + // bestSnlp[i] is the snlp of the best segmentation of the first i // code points in the range to be matched. UVector32 bestSnlp(numCodePts + 1, status); @@ -1271,7 +1273,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, } - // prev[i] is the index of the last CJK code point in the previous word in + // prev[i] is the index of the last CJK code point in the previous word in // the best segmentation of the first i characters. UVector32 prev(numCodePts + 1, status); for(int32_t i = 0; i <= numCodePts; i++){ @@ -1293,6 +1295,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, // ix is the corresponding string (code unit) index. // They differ when the string contains supplementary characters. int32_t ix = 0; + bool is_prev_katakana = false; for (int32_t i = 0; i < numCodePts; ++i, ix = inString.moveIndex32(ix, 1)) { if ((uint32_t)bestSnlp.elementAti(i) == kuint32max) { continue; @@ -1305,8 +1308,8 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, // Note: lengths is filled with code point lengths // The NULL parameter is the ignored code unit lengths. - // if there are no single character matches found in the dictionary - // starting with this charcter, treat character as a 1-character word + // if there are no single character matches found in the dictionary + // starting with this character, treat character as a 1-character word // with the highest value possible, i.e. the least likely to occur. // Exclude Korean characters from this treatment, as they should be left // together by default. @@ -1331,7 +1334,6 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, // characters is considered a candidate word with a default cost // specified in the katakanaCost table according to its length. - bool is_prev_katakana = false; bool is_katakana = isKatakana(inString.char32At(ix)); int32_t katakanaRunLength = 1; if (!is_prev_katakana && is_katakana) { @@ -1380,7 +1382,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, numBreaks++; } - // Now that we're done, convert positions in t_boundary[] (indices in + // Now that we're done, convert positions in t_boundary[] (indices in // the normalized input string) back to indices in the original input UText // while reversing t_boundary and pushing values to foundBreaks. for (int32_t i = numBreaks-1; i >= 0; i--) { @@ -1400,3 +1402,4 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, U_NAMESPACE_END #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + diff --git a/deps/icu-small/source/common/dictbe.h b/deps/icu-small/source/common/dictbe.h index ead0e16cbd9672..9390e92b0d5532 100644 --- a/deps/icu-small/source/common/dictbe.h +++ b/deps/icu-small/source/common/dictbe.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2006-2014, International Business Machines Corporation * @@ -81,7 +83,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine { *

Find any breaks within a run in the supplied text.

* * @param text A UText representing the text. The iterator is left at - * the end of the run of characters which the engine is capable of handling + * the end of the run of characters which the engine is capable of handling * that starts from the first (or last) character in the range. * @param startPos The start of the run within the supplied text. * @param endPos The end of the run within the supplied text. @@ -243,118 +245,118 @@ class LaoBreakEngine : public DictionaryBreakEngine { }; -/******************************************************************* - * BurmeseBreakEngine - */ - -/** - *

BurmeseBreakEngine is a kind of DictionaryBreakEngine that uses a - * DictionaryMatcher and heuristics to determine Burmese-specific breaks.

- * - *

After it is constructed a BurmeseBreakEngine may be shared between - * threads without synchronization.

- */ -class BurmeseBreakEngine : public DictionaryBreakEngine { - private: - /** - * The set of characters handled by this engine - * @internal - */ - - UnicodeSet fBurmeseWordSet; - UnicodeSet fEndWordSet; - UnicodeSet fBeginWordSet; - UnicodeSet fMarkSet; - DictionaryMatcher *fDictionary; - - public: - - /** - *

Default constructor.

- * - * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the - * engine is deleted. - */ - BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status); - - /** - *

Virtual destructor.

- */ - virtual ~BurmeseBreakEngine(); - - protected: - /** - *

Divide up a range of known dictionary characters.

- * - * @param text A UText representing the text - * @param rangeStart The start of the range of dictionary characters - * @param rangeEnd The end of the range of dictionary characters - * @param foundBreaks Output of C array of int32_t break positions, or 0 - * @return The number of breaks found - */ - virtual int32_t divideUpDictionaryRange( UText *text, - int32_t rangeStart, - int32_t rangeEnd, - UStack &foundBreaks ) const; - -}; - -/******************************************************************* - * KhmerBreakEngine - */ - -/** - *

KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a - * DictionaryMatcher and heuristics to determine Khmer-specific breaks.

- * - *

After it is constructed a KhmerBreakEngine may be shared between - * threads without synchronization.

- */ -class KhmerBreakEngine : public DictionaryBreakEngine { - private: - /** - * The set of characters handled by this engine - * @internal - */ - - UnicodeSet fKhmerWordSet; - UnicodeSet fEndWordSet; - UnicodeSet fBeginWordSet; - UnicodeSet fMarkSet; - DictionaryMatcher *fDictionary; - - public: - - /** - *

Default constructor.

- * - * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the - * engine is deleted. - */ - KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status); - - /** - *

Virtual destructor.

- */ - virtual ~KhmerBreakEngine(); - - protected: - /** - *

Divide up a range of known dictionary characters.

- * - * @param text A UText representing the text - * @param rangeStart The start of the range of dictionary characters - * @param rangeEnd The end of the range of dictionary characters - * @param foundBreaks Output of C array of int32_t break positions, or 0 - * @return The number of breaks found - */ - virtual int32_t divideUpDictionaryRange( UText *text, - int32_t rangeStart, - int32_t rangeEnd, - UStack &foundBreaks ) const; - -}; - +/******************************************************************* + * BurmeseBreakEngine + */ + +/** + *

BurmeseBreakEngine is a kind of DictionaryBreakEngine that uses a + * DictionaryMatcher and heuristics to determine Burmese-specific breaks.

+ * + *

After it is constructed a BurmeseBreakEngine may be shared between + * threads without synchronization.

+ */ +class BurmeseBreakEngine : public DictionaryBreakEngine { + private: + /** + * The set of characters handled by this engine + * @internal + */ + + UnicodeSet fBurmeseWordSet; + UnicodeSet fEndWordSet; + UnicodeSet fBeginWordSet; + UnicodeSet fMarkSet; + DictionaryMatcher *fDictionary; + + public: + + /** + *

Default constructor.

+ * + * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the + * engine is deleted. + */ + BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~BurmeseBreakEngine(); + + protected: + /** + *

Divide up a range of known dictionary characters.

+ * + * @param text A UText representing the text + * @param rangeStart The start of the range of dictionary characters + * @param rangeEnd The end of the range of dictionary characters + * @param foundBreaks Output of C array of int32_t break positions, or 0 + * @return The number of breaks found + */ + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, + UStack &foundBreaks ) const; + +}; + +/******************************************************************* + * KhmerBreakEngine + */ + +/** + *

KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a + * DictionaryMatcher and heuristics to determine Khmer-specific breaks.

+ * + *

After it is constructed a KhmerBreakEngine may be shared between + * threads without synchronization.

+ */ +class KhmerBreakEngine : public DictionaryBreakEngine { + private: + /** + * The set of characters handled by this engine + * @internal + */ + + UnicodeSet fKhmerWordSet; + UnicodeSet fEndWordSet; + UnicodeSet fBeginWordSet; + UnicodeSet fMarkSet; + DictionaryMatcher *fDictionary; + + public: + + /** + *

Default constructor.

+ * + * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the + * engine is deleted. + */ + KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~KhmerBreakEngine(); + + protected: + /** + *

Divide up a range of known dictionary characters.

+ * + * @param text A UText representing the text + * @param rangeStart The start of the range of dictionary characters + * @param rangeEnd The end of the range of dictionary characters + * @param foundBreaks Output of C array of int32_t break positions, or 0 + * @return The number of breaks found + */ + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, + UStack &foundBreaks ) const; + +}; + #if !UCONFIG_NO_NORMALIZATION /******************************************************************* diff --git a/deps/icu-small/source/common/dictionarydata.cpp b/deps/icu-small/source/common/dictionarydata.cpp index 6bc82fc7f7495e..00f66369e36ff0 100644 --- a/deps/icu-small/source/common/dictionarydata.cpp +++ b/deps/icu-small/source/common/dictionarydata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014-2016, International Business Machines @@ -28,7 +30,7 @@ const int32_t DictionaryData::TRANSFORM_NONE = 0; const int32_t DictionaryData::TRANSFORM_TYPE_OFFSET = 0x1000000; const int32_t DictionaryData::TRANSFORM_TYPE_MASK = 0x7f000000; const int32_t DictionaryData::TRANSFORM_OFFSET_MASK = 0x1fffff; - + DictionaryMatcher::~DictionaryMatcher() { } @@ -170,10 +172,10 @@ udict_swap(const UDataSwapper *ds, const void *inData, int32_t length, headerSize = udata_swapDataHeader(ds, inData, length, outData, pErrorCode); if (pErrorCode == NULL || U_FAILURE(*pErrorCode)) return 0; pInfo = (const UDataInfo *)((const char *)inData + 4); - if (!(pInfo->dataFormat[0] == 0x44 && - pInfo->dataFormat[1] == 0x69 && - pInfo->dataFormat[2] == 0x63 && - pInfo->dataFormat[3] == 0x74 && + if (!(pInfo->dataFormat[0] == 0x44 && + pInfo->dataFormat[1] == 0x69 && + pInfo->dataFormat[2] == 0x63 && + pInfo->dataFormat[3] == 0x74 && pInfo->formatVersion[0] == 1)) { udata_printError(ds, "udict_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as dictionary data\n", pInfo->dataFormat[0], pInfo->dataFormat[1], pInfo->dataFormat[2], pInfo->dataFormat[3], pInfo->formatVersion[0]); diff --git a/deps/icu-small/source/common/dictionarydata.h b/deps/icu-small/source/common/dictionarydata.h index 44f51210ad08e7..6f8852c620ee9e 100644 --- a/deps/icu-small/source/common/dictionarydata.h +++ b/deps/icu-small/source/common/dictionarydata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014, International Business Machines @@ -60,7 +62,7 @@ class U_COMMON_API DictionaryData : public UMemory { /** * Wrapper class around generic dictionaries, implementing matches(). * getType() should return a TRIE_TYPE_??? constant from DictionaryData. - * + * * All implementations of this interface must be thread-safe if they are to be used inside of the * dictionary-based break iteration code. */ diff --git a/deps/icu-small/source/common/dtintrv.cpp b/deps/icu-small/source/common/dtintrv.cpp index eef1f052fdb784..f3313d5ebfd3d4 100644 --- a/deps/icu-small/source/common/dtintrv.cpp +++ b/deps/icu-small/source/common/dtintrv.cpp @@ -1,9 +1,11 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************************* * Copyright (C) 2008, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * -* File DTINTRV.CPP +* File DTINTRV.CPP * ******************************************************************************* */ @@ -32,7 +34,7 @@ DateInterval::~DateInterval(){} DateInterval::DateInterval(const DateInterval& other) : UObject(other) { *this = other; -} +} DateInterval& @@ -45,16 +47,17 @@ DateInterval::operator=(const DateInterval& other) { } -DateInterval* +DateInterval* DateInterval::clone() const { return new DateInterval(*this); } -UBool -DateInterval::operator==(const DateInterval& other) const { +UBool +DateInterval::operator==(const DateInterval& other) const { return ( fromDate == other.fromDate && toDate == other.toDate ); } U_NAMESPACE_END + diff --git a/deps/icu-small/source/common/errorcode.cpp b/deps/icu-small/source/common/errorcode.cpp index 43868b7046dbac..bc7807d6010037 100644 --- a/deps/icu-small/source/common/errorcode.cpp +++ b/deps/icu-small/source/common/errorcode.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/filteredbrk.cpp b/deps/icu-small/source/common/filteredbrk.cpp index 8350c9f3809450..acba9592f0d239 100644 --- a/deps/icu-small/source/common/filteredbrk.cpp +++ b/deps/icu-small/source/common/filteredbrk.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014-2015, International Business Machines Corporation and @@ -135,7 +137,7 @@ static const UChar kFULLSTOP = 0x002E; // '.' */ class SimpleFilteredSentenceBreakData : public UMemory { public: - SimpleFilteredSentenceBreakData(UCharsTrie *forwards, UCharsTrie *backwards ) + SimpleFilteredSentenceBreakData(UCharsTrie *forwards, UCharsTrie *backwards ) : fForwardsPartialTrie(forwards), fBackwardsTrie(backwards), refcount(1) { } SimpleFilteredSentenceBreakData *incr() { refcount++; return this; } SimpleFilteredSentenceBreakData *decr() { if((--refcount) <= 0) delete this; return 0; } @@ -215,7 +217,7 @@ class SimpleFilteredSentenceBreakIterator : public BreakIterator { int32_t internalPrev(int32_t n); /** * set up the UText with the value of the fDelegate. - * Call this before calling breakExceptionAt. + * Call this before calling breakExceptionAt. * May be able to avoid excess calls */ void resetState(UErrorCode &status); @@ -359,7 +361,7 @@ SimpleFilteredSentenceBreakIterator::internalNext(int32_t n) { default: case kNoExceptionHere: return n; - } + } } return n; } @@ -388,7 +390,7 @@ SimpleFilteredSentenceBreakIterator::internalPrev(int32_t n) { default: case kNoExceptionHere: return n; - } + } } return n; } @@ -401,7 +403,8 @@ SimpleFilteredSentenceBreakIterator::next() { int32_t SimpleFilteredSentenceBreakIterator::first(void) { - return internalNext(fDelegate->first()); + // Don't suppress a break opportunity at the beginning of text. + return fDelegate->first(); } int32_t @@ -415,7 +418,9 @@ SimpleFilteredSentenceBreakIterator::previous(void) { } UBool SimpleFilteredSentenceBreakIterator::isBoundary(int32_t offset) { - if(!fDelegate->isBoundary(offset)) return false; // no break to suppress + if (!fDelegate->isBoundary(offset)) return false; // no break to suppress + + if (fData->fBackwardsTrie.isNull()) return true; // no data = no suppressions UErrorCode status = U_ZERO_ERROR; resetState(status); @@ -428,9 +433,9 @@ UBool SimpleFilteredSentenceBreakIterator::isBoundary(int32_t offset) { default: case kNoExceptionHere: return true; - } + } } - + int32_t SimpleFilteredSentenceBreakIterator::next(int32_t offset) { return internalNext(fDelegate->next(offset)); @@ -467,7 +472,7 @@ SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder() { } -SimpleFilteredBreakIteratorBuilder::SimpleFilteredBreakIteratorBuilder(UErrorCode &status) +SimpleFilteredBreakIteratorBuilder::SimpleFilteredBreakIteratorBuilder(UErrorCode &status) : fSet(status) { } @@ -476,13 +481,42 @@ SimpleFilteredBreakIteratorBuilder::SimpleFilteredBreakIteratorBuilder(const Loc : fSet(status) { if(U_SUCCESS(status)) { - LocalUResourceBundlePointer b(ures_open(U_ICUDATA_BRKITR, fromLocale.getBaseName(), &status)); - LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", NULL, &status)); - LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", NULL, &status)); - if(U_FAILURE(status)) return; // leaves the builder empty, if you try to use it. + UErrorCode subStatus = U_ZERO_ERROR; + LocalUResourceBundlePointer b(ures_open(U_ICUDATA_BRKITR, fromLocale.getBaseName(), &subStatus)); + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open BUNDLE %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } + LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", NULL, &subStatus)); + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open EXCEPTIONS %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } + LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", NULL, &subStatus)); + +#if FB_DEBUG + { + UErrorCode subsub = subStatus; + fprintf(stderr, "open SentenceBreak %s => %s, %s\n", fromLocale.getBaseName(), ures_getLocale(breaks.getAlias(), &subsub), u_errorName(subStatus)); + } +#endif + + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } LocalUResourceBundlePointer strs; - UErrorCode subStatus = status; + subStatus = status; // Pick up inherited warning status now do { strs.adoptInstead(ures_getNextResource(breaks.getAlias(), strs.orphan(), &subStatus)); if(strs.isValid() && U_SUCCESS(subStatus)) { @@ -539,7 +573,7 @@ SimpleFilteredBreakIteratorBuilder::build(BreakIterator* adoptBreakIterator, UEr int32_t subCount = fSet.size(); UnicodeString *ustrs_ptr = newUnicodeStringArray(subCount); - + LocalArray ustrs(ustrs_ptr); LocalMemory partials; diff --git a/deps/icu-small/source/common/filterednormalizer2.cpp b/deps/icu-small/source/common/filterednormalizer2.cpp index 44ed9c13a0265e..fb6e831af7a4c5 100644 --- a/deps/icu-small/source/common/filterednormalizer2.cpp +++ b/deps/icu-small/source/common/filterednormalizer2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/hash.h b/deps/icu-small/source/common/hash.h index d308a57c3d3024..ac7d22feb67bbf 100644 --- a/deps/icu-small/source/common/hash.h +++ b/deps/icu-small/source/common/hash.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2014, International Business Machines @@ -74,9 +76,9 @@ class U_COMMON_API Hashtable : public UMemory { int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status); void* get(const UnicodeString& key) const; - + int32_t geti(const UnicodeString& key) const; - + void* remove(const UnicodeString& key); int32_t removei(const UnicodeString& key); @@ -90,9 +92,9 @@ class U_COMMON_API Hashtable : public UMemory { * @see uhash_nextElement */ const UHashElement* nextElement(int32_t& pos) const; - + UKeyComparator* setKeyComparator(UKeyComparator*keyComp); - + UValueComparator* setValueComparator(UValueComparator* valueComp); UBool equals(const Hashtable& that) const; @@ -105,7 +107,7 @@ class U_COMMON_API Hashtable : public UMemory { * Implementation ********************************************************************/ -inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, +inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status) { if (U_FAILURE(status)) { return; @@ -117,7 +119,7 @@ inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, } } -inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, +inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status) : hash(0) { init( uhash_hashUnicodeString, keyComp, valueComp, status); } @@ -198,7 +200,7 @@ inline void Hashtable::removeAll(void) { inline UKeyComparator* Hashtable::setKeyComparator(UKeyComparator*keyComp){ return uhash_setKeyComparator(hash, keyComp); } - + inline UValueComparator* Hashtable::setValueComparator(UValueComparator* valueComp){ return uhash_setValueComparator(hash, valueComp); } @@ -209,3 +211,4 @@ inline UBool Hashtable::equals(const Hashtable& that)const{ U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/common/icudataver.c b/deps/icu-small/source/common/icudataver.c index 227af0453e83e2..681a187ba21a15 100644 --- a/deps/icu-small/source/common/icudataver.c +++ b/deps/icu-small/source/common/icudataver.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -14,11 +16,11 @@ U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) { UResourceBundle *icudatares = NULL; - + if (U_FAILURE(*status)) { return; } - + if (dataVersionFillin != NULL) { icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status); if (U_SUCCESS(*status)) { diff --git a/deps/icu-small/source/common/icuplug.cpp b/deps/icu-small/source/common/icuplug.cpp index 477a348b5acc4f..ec889f78b3db17 100644 --- a/deps/icu-small/source/common/icuplug.cpp +++ b/deps/icu-small/source/common/icuplug.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -43,7 +45,7 @@ using namespace icu; #endif /** - * Internal structure of an ICU plugin. + * Internal structure of an ICU plugin. */ struct UPlugData { @@ -73,21 +75,21 @@ struct UPlugData { * @param listSize the number of entries in the list * @param memberSize the size of one member * @param itemToRemove the item number of the member - * @return the new listsize + * @return the new listsize */ static int32_t uplug_removeEntryAt(void *list, int32_t listSize, int32_t memberSize, int32_t itemToRemove) { uint8_t *bytePtr = (uint8_t *)list; - + /* get rid of some bad cases first */ if(listSize<1) { return listSize; } - + /* is there anything to move? */ if(listSize > itemToRemove+1) { memmove(bytePtr+(itemToRemove*memberSize), bytePtr+((itemToRemove+1)*memberSize), memberSize); } - + return listSize-1; } @@ -96,13 +98,13 @@ static int32_t uplug_removeEntryAt(void *list, int32_t listSize, int32_t memberS #if U_ENABLE_DYLOAD /** - * Library management. Internal. + * Library management. Internal. * @internal */ struct UPlugLibrary; /** - * Library management. Internal. + * Library management. Internal. * @internal */ typedef struct UPlugLibrary { @@ -123,7 +125,7 @@ static int32_t libraryMax = UPLUG_LIBRARY_INITIAL_COUNT; */ static int32_t searchForLibraryName(const char *libName) { int32_t i; - + for(i=0;i=pastPlug) { return NULL; } else { @@ -284,7 +286,7 @@ static void uplug_callPlug(UPlugData *plug, UPlugReason reason, UErrorCode *stat static void uplug_unloadPlug(UPlugData *plug, UErrorCode *status) { if(plug->awaitingLoad) { /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/ *status = U_INTERNAL_PROGRAM_ERROR; - return; + return; } if(U_SUCCESS(plug->pluginStatus)) { /* Don't unload a plug which has a failing load status - means it didn't actually load. */ @@ -295,11 +297,11 @@ static void uplug_unloadPlug(UPlugData *plug, UErrorCode *status) { static void uplug_queryPlug(UPlugData *plug, UErrorCode *status) { if(!plug->awaitingLoad || !(plug->level == UPLUG_LEVEL_UNKNOWN) ) { /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/ *status = U_INTERNAL_PROGRAM_ERROR; - return; + return; } plug->level = UPLUG_LEVEL_INVALID; uplug_callPlug(plug, UPLUG_REASON_QUERY, status); - if(U_SUCCESS(*status)) { + if(U_SUCCESS(*status)) { if(plug->level == UPLUG_LEVEL_INVALID) { plug->pluginStatus = U_PLUGIN_DIDNT_SET_LEVEL; plug->awaitingLoad = FALSE; @@ -370,17 +372,17 @@ static UPlugData *uplug_allocatePlug(UPlugEntrypoint *entrypoint, const char *co } else { plug->config[0] = 0; } - + if(symName!=NULL) { uprv_strncpy(plug->sym, symName, UPLUG_NAME_MAX); } else { plug->sym[0] = 0; } - + plug->entrypoint = entrypoint; plug->lib = lib; uplug_queryPlug(plug, status); - + return plug; } @@ -419,7 +421,7 @@ uplug_removePlug(UPlugData *plug, UErrorCode *status) { UPlugData *cursor = NULL; UPlugData *plugToRemove = NULL; if(U_FAILURE(*status)) return; - + for(cursor=pluginList;cursor!=NULL;) { if(cursor==plug) { plugToRemove = plug; @@ -428,14 +430,14 @@ uplug_removePlug(UPlugData *plug, UErrorCode *status) { cursor = uplug_nextPlug(cursor); } } - + uplug_doUnloadPlug(plugToRemove, status); } -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_setPlugNoUnload(UPlugData *data, UBool dontUnload) { data->dontUnload = dontUnload; @@ -506,10 +508,10 @@ uplug_getConfiguration(UPlugData *data) { } U_INTERNAL UPlugData* U_EXPORT2 -uplug_getPlugInternal(int32_t n) { +uplug_getPlugInternal(int32_t n) { if(n <0 || n >= pluginCount) { return NULL; - } else { + } else { return &(pluginList[n]); } } @@ -549,7 +551,7 @@ uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UE #if U_ENABLE_DYLOAD -static UPlugData* +static UPlugData* uplug_initErrorPlug(const char *libName, const char *sym, const char *config, const char *nameOrError, UErrorCode loadStatus, UErrorCode *status) { UPlugData *plug = uplug_allocateEmptyPlug(status); @@ -581,7 +583,7 @@ uplug_initErrorPlug(const char *libName, const char *sym, const char *config, co /** * Fetch a plugin from DLL, and then initialize it from a library- but don't load it. */ -static UPlugData* +static UPlugData* uplug_initPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) { void *lib = NULL; UPlugData *plug = NULL; @@ -613,7 +615,7 @@ uplug_initPlugFromLibrary(const char *libName, const char *sym, const char *conf } U_CAPI UPlugData* U_EXPORT2 -uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) { +uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) { UPlugData *plug = NULL; if(U_FAILURE(*status)) { return NULL; } plug = uplug_initPlugFromLibrary(libName, sym, config, status); @@ -633,7 +635,7 @@ U_CAPI UPlugLevel U_EXPORT2 uplug_getCurrentLevel() { static UBool U_CALLCONV uplug_cleanup(void) { int32_t i; - + UPlugData *pluginToRemove; /* cleanup plugs */ for(i=0;iawaitingLoad = FALSE; - } + } } - } + } for(i=0;iawaitingLoad) { - if(pluginToLoad->level == UPLUG_LEVEL_INVALID) { + if(pluginToLoad->level == UPLUG_LEVEL_INVALID) { pluginToLoad->pluginStatus = U_PLUGIN_DIDNT_SET_LEVEL; } else if(pluginToLoad->level == UPLUG_LEVEL_UNKNOWN) { pluginToLoad->pluginStatus = U_INTERNAL_PROGRAM_ERROR; @@ -695,7 +697,7 @@ static void uplug_loadWaitingPlugs(UErrorCode *status) { pluginToLoad->awaitingLoad = FALSE; } } - + #if UPLUG_TRACE DBG((stderr, " Done Loading Plugs. Level: %d\n", (int32_t)uplug_getCurrentLevel())); #endif @@ -731,7 +733,7 @@ uplug_init(UErrorCode *status) { } if(U_FAILURE(*status)) return; -#if defined(DEFAULT_ICU_PLUGINS) +#if defined(DEFAULT_ICU_PLUGINS) if(plugin_dir.isEmpty()) { plugin_dir.append(DEFAULT_ICU_PLUGINS, -1, *status); } @@ -743,7 +745,7 @@ uplug_init(UErrorCode *status) { if(!plugin_dir.isEmpty()) { FILE *f; - + CharString pluginFile; #ifdef OS390BATCH /* There are potentially a lot of ways to implement a plugin directory on OS390/zOS */ @@ -776,16 +778,16 @@ uplug_init(UErrorCode *status) { #endif return; } - - /* plugin_file is not used for processing - it is only used + + /* plugin_file is not used for processing - it is only used so that uplug_getPluginFile() works (i.e. icuinfo) */ uprv_strncpy(plugin_file, pluginFile.data(), sizeof(plugin_file)); - + #if UPLUG_TRACE DBG((stderr, "pluginfile= %s len %d/%d\n", plugin_file, (int)strlen(plugin_file), (int)sizeof(plugin_file))); #endif - + #ifdef __MVS__ if (iscics()) /* 12 Nov 2011 JAM */ { @@ -801,8 +803,8 @@ uplug_init(UErrorCode *status) { char linebuf[1024]; char *p, *libName=NULL, *symName=NULL, *config=NULL; int32_t line = 0; - - + + while(fgets(linebuf,1023,f)) { line++; @@ -828,7 +830,7 @@ uplug_init(UErrorCode *status) { while(*p&&!isspace((int)*p)) { p++; } - + if(*p) { /* has config */ *p=0; ++p; @@ -839,7 +841,7 @@ uplug_init(UErrorCode *status) { config = p; } } - + /* chop whitespace at the end of the config */ if(config!=NULL&&*config!=0) { p = config+strlen(config); @@ -847,9 +849,9 @@ uplug_init(UErrorCode *status) { *p=0; } } - + /* OK, we're good. */ - { + { UErrorCode subStatus = U_ZERO_ERROR; UPlugData *plug = uplug_initPlugFromLibrary(libName, symName, config, &subStatus); if(U_FAILURE(subStatus) && U_SUCCESS(*status)) { @@ -878,3 +880,5 @@ uplug_init(UErrorCode *status) { } #endif + + diff --git a/deps/icu-small/source/common/icuplugimp.h b/deps/icu-small/source/common/icuplugimp.h index 0b5afb1ecd8a42..acbbcaf294d632 100644 --- a/deps/icu-small/source/common/icuplugimp.h +++ b/deps/icu-small/source/common/icuplugimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -7,7 +9,7 @@ ****************************************************************************** * * FILE NAME : icuplugimp.h -* +* * Internal functions for the ICU plugin system * * Date Name Description @@ -24,7 +26,7 @@ #if UCONFIG_ENABLE_PLUGINS /*========================*/ -/** @{ Library Manipulation +/** @{ Library Manipulation */ /** @@ -63,7 +65,7 @@ uplug_findLibrary(void *lib, UErrorCode *status); */ /** - * Initialize the plugins + * Initialize the plugins * @param status error result * @internal - Internal use only. */ @@ -73,12 +75,12 @@ uplug_init(UErrorCode *status); /** * Get raw plug N * @internal - Internal use only - */ + */ U_INTERNAL UPlugData* U_EXPORT2 uplug_getPlugInternal(int32_t n); /** - * Get the name of the plugin file. + * Get the name of the plugin file. * @internal - Internal use only. */ U_INTERNAL const char* U_EXPORT2 diff --git a/deps/icu-small/source/common/listformatter.cpp b/deps/icu-small/source/common/listformatter.cpp index a02549eba9f3cd..9225c22f163eb7 100644 --- a/deps/icu-small/source/common/listformatter.cpp +++ b/deps/icu-small/source/common/listformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/loadednormalizer2impl.cpp b/deps/icu-small/source/common/loadednormalizer2impl.cpp index 42fafdce9e1abe..bd618185f400e4 100644 --- a/deps/icu-small/source/common/loadednormalizer2impl.cpp +++ b/deps/icu-small/source/common/loadednormalizer2impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014, International Business Machines @@ -161,8 +163,8 @@ static UBool U_CALLCONV uprv_loaded_normalizer2_cleanup() { nfkc_cfSingleton = NULL; uhash_close(cache); cache=NULL; - nfkcInitOnce.reset(); - nfkc_cfInitOnce.reset(); + nfkcInitOnce.reset(); + nfkc_cfInitOnce.reset(); return TRUE; } diff --git a/deps/icu-small/source/common/localsvc.h b/deps/icu-small/source/common/localsvc.h index e8bc5a693c1526..6b0624fcb86fb0 100644 --- a/deps/icu-small/source/common/localsvc.h +++ b/deps/icu-small/source/common/localsvc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2006 International Business Machines Corporation * @@ -14,7 +16,7 @@ /** * Prototype for user-supplied service hook. This function is expected to return * a type of factory object specific to the requested service. - * + * * @param what service-specific string identifying the specific user hook * @param status error status * @return a service-specific hook, or NULL on failure. diff --git a/deps/icu-small/source/common/locavailable.cpp b/deps/icu-small/source/common/locavailable.cpp index 10782837f2ddd4..6016fde01921b9 100644 --- a/deps/icu-small/source/common/locavailable.cpp +++ b/deps/icu-small/source/common/locavailable.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -60,7 +62,7 @@ U_NAMESPACE_BEGIN void U_CALLCONV locale_available_init() { // This function is a friend of class Locale. // This function is only invoked via umtx_initOnce(). - + // for now, there is a hardcoded list, so just walk through that list and set it up. // Note: this function is a friend of class Locale. availableLocaleListCount = uloc_countAvailable(); @@ -128,7 +130,7 @@ static void U_CALLCONV loadInstalledLocales() { UErrorCode status = U_ZERO_ERROR; int32_t i = 0; int32_t localeCount; - + U_ASSERT(_installedLocales == NULL); U_ASSERT(_installedLocalesCount == 0); @@ -136,7 +138,7 @@ static void U_CALLCONV loadInstalledLocales() { ures_initStackObject(&installed); indexLocale = ures_openDirect(NULL, _kIndexLocaleName, &status); ures_getByKey(indexLocale, _kIndexTag, &installed, &status); - + if(U_SUCCESS(status)) { localeCount = ures_getSize(&installed); _installedLocales = (char **) uprv_malloc(sizeof(char*) * (localeCount+1)); @@ -160,11 +162,11 @@ static void _load_installedLocales() } U_CAPI const char* U_EXPORT2 -uloc_getAvailable(int32_t offset) +uloc_getAvailable(int32_t offset) { - + _load_installedLocales(); - + if (offset > _installedLocalesCount) return NULL; return _installedLocales[offset]; @@ -176,3 +178,4 @@ uloc_countAvailable() _load_installedLocales(); return _installedLocalesCount; } + diff --git a/deps/icu-small/source/common/locbased.cpp b/deps/icu-small/source/common/locbased.cpp index ba289621f9a997..f2f56adda170f0 100644 --- a/deps/icu-small/source/common/locbased.cpp +++ b/deps/icu-small/source/common/locbased.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/common/locbased.h b/deps/icu-small/source/common/locbased.h index f740026b05623e..ab8628b2b975b6 100644 --- a/deps/icu-small/source/common/locbased.h +++ b/deps/icu-small/source/common/locbased.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines @@ -86,7 +88,7 @@ class U_COMMON_API LocaleBased : public UMemory { private: char* valid; - + char* actual; }; diff --git a/deps/icu-small/source/common/locdispnames.cpp b/deps/icu-small/source/common/locdispnames.cpp index 6d6a06e680eaec..d60920c6124584 100644 --- a/deps/icu-small/source/common/locdispnames.cpp +++ b/deps/icu-small/source/common/locdispnames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -293,7 +295,7 @@ static const char _kSeparator[] = "separator"; static int32_t _getStringOrCopyKey(const char *path, const char *locale, - const char *tableKey, + const char *tableKey, const char* subTableKey, const char *itemKey, const char *substitute, @@ -320,7 +322,7 @@ _getStringOrCopyKey(const char *path, const char *locale, } else { /* second-level item, use special fallback */ s=uloc_getTableStringWithFallback(path, locale, - tableKey, + tableKey, subTableKey, itemKey, &length, @@ -404,7 +406,7 @@ uloc_getDisplayScript(const char* locale, UErrorCode err = U_ZERO_ERROR; int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, uloc_getScript, _kScriptsStandAlone, &err); - + if ( err == U_USING_DEFAULT_WARNING ) { return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, uloc_getScript, _kScripts, pErrorCode); @@ -483,7 +485,7 @@ uloc_getDisplayName(const char *locale, const UChar *pattern; int32_t patLen = 0; int32_t sub0Pos, sub1Pos; - + UChar formatOpenParen = 0x0028; // ( UChar formatReplaceOpenParen = 0x005B; // [ UChar formatCloseParen = 0x0029; // ) @@ -782,9 +784,9 @@ uloc_getDisplayKeyword(const char* keyword, /* pass itemKey=NULL to look for a top-level item */ return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale, - _kKeys, NULL, - keyword, - keyword, + _kKeys, NULL, + keyword, + keyword, dest, destCapacity, status); @@ -820,26 +822,26 @@ uloc_getDisplayKeywordValue( const char* locale, keywordValue[0]=0; keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status); - /* - * if the keyword is equal to currency .. then to get the display name + /* + * if the keyword is equal to currency .. then to get the display name * we need to do the fallback ourselves */ if(uprv_stricmp(keyword, _kCurrency)==0){ int32_t dispNameLen = 0; const UChar *dispName = NULL; - + UResourceBundle *bundle = ures_open(U_ICUDATA_CURR, displayLocale, status); UResourceBundle *currencies = ures_getByKey(bundle, _kCurrencies, NULL, status); UResourceBundle *currency = ures_getByKeyWithFallback(currencies, keywordValue, NULL, status); - + dispName = ures_getStringByIndex(currency, UCURRENCY_DISPLAY_NAME_INDEX, &dispNameLen, status); - + /*close the bundles */ ures_close(currency); ures_close(currencies); ures_close(bundle); - + if(U_FAILURE(*status)){ if(*status == U_MISSING_RESOURCE_ERROR){ /* we just want to write the value over if nothing is available */ @@ -852,7 +854,7 @@ uloc_getDisplayKeywordValue( const char* locale, /* now copy the dispName over if not NULL */ if(dispName != NULL){ if(dispNameLen <= destCapacity){ - uprv_memcpy(dest, dispName, dispNameLen * U_SIZEOF_UCHAR); + u_memcpy(dest, dispName, dispNameLen); return u_terminateUChars(dest, destCapacity, dispNameLen, status); }else{ *status = U_BUFFER_OVERFLOW_ERROR; @@ -869,11 +871,11 @@ uloc_getDisplayKeywordValue( const char* locale, } } - + }else{ return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale, - _kTypes, keyword, + _kTypes, keyword, keywordValue, keywordValue, dest, destCapacity, diff --git a/deps/icu-small/source/common/locdspnm.cpp b/deps/icu-small/source/common/locdspnm.cpp index 7bd4ecead48d9b..a17478ce6d8a61 100644 --- a/deps/icu-small/source/common/locdspnm.cpp +++ b/deps/icu-small/source/common/locdspnm.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines Corporation and @@ -278,7 +280,11 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames { SimpleFormatter format; SimpleFormatter keyTypeFormat; UDisplayContext capitalizationContext; +#if !UCONFIG_NO_BREAK_ITERATION BreakIterator* capitalizationBrkIter; +#else + UObject* capitalizationBrkIter; +#endif static UMutex capitalizationBrkIterLock; UnicodeString formatOpenParen; UnicodeString formatReplaceOpenParen; @@ -341,6 +347,8 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames { UnicodeString& keyValueDisplayName(const char* key, const char* value, UnicodeString& result, UBool skipAdjust) const; void initialize(void); + + struct CapitalizationContextSink; }; UMutex LocaleDisplayNamesImpl::capitalizationBrkIterLock = U_MUTEX_INITIALIZER; @@ -386,6 +394,54 @@ LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale, initialize(); } +struct LocaleDisplayNamesImpl::CapitalizationContextSink : public ResourceSink { + UBool hasCapitalizationUsage; + LocaleDisplayNamesImpl& parent; + + CapitalizationContextSink(LocaleDisplayNamesImpl& _parent) + : hasCapitalizationUsage(FALSE), parent(_parent) {} + virtual ~CapitalizationContextSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable contexts = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; contexts.getKeyAndValue(i, key, value); ++i) { + + CapContextUsage usageEnum; + if (uprv_strcmp(key, "key") == 0) { + usageEnum = kCapContextUsageKey; + } else if (uprv_strcmp(key, "keyValue") == 0) { + usageEnum = kCapContextUsageKeyValue; + } else if (uprv_strcmp(key, "languages") == 0) { + usageEnum = kCapContextUsageLanguage; + } else if (uprv_strcmp(key, "script") == 0) { + usageEnum = kCapContextUsageScript; + } else if (uprv_strcmp(key, "territory") == 0) { + usageEnum = kCapContextUsageTerritory; + } else if (uprv_strcmp(key, "variant") == 0) { + usageEnum = kCapContextUsageVariant; + } else { + continue; + } + + int32_t len = 0; + const int32_t* intVector = value.getIntVector(len, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (len < 2) { continue; } + + int32_t titlecaseInt = (parent.capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU) ? intVector[0] : intVector[1]; + if (titlecaseInt == 0) { continue; } + + parent.fCapitalization[usageEnum] = TRUE; + hasCapitalizationUsage = TRUE; + } + } +}; + +// Virtual destructors must be defined out of line. +LocaleDisplayNamesImpl::CapitalizationContextSink::~CapitalizationContextSink() {} + void LocaleDisplayNamesImpl::initialize(void) { LocaleDisplayNamesImpl *nonConstThis = (LocaleDisplayNamesImpl *)this; @@ -428,58 +484,21 @@ LocaleDisplayNamesImpl::initialize(void) { uprv_memset(fCapitalization, 0, sizeof(fCapitalization)); #if !UCONFIG_NO_BREAK_ITERATION - // The following is basically copied from DateFormatSymbols::initializeData - typedef struct { - const char * usageName; - LocaleDisplayNamesImpl::CapContextUsage usageEnum; - } ContextUsageNameToEnum; - const ContextUsageNameToEnum contextUsageTypeMap[] = { - // Entries must be sorted by usageTypeName; entry with NULL name terminates list. - { "key", kCapContextUsageKey }, - { "keyValue", kCapContextUsageKeyValue }, - { "languages", kCapContextUsageLanguage }, - { "script", kCapContextUsageScript }, - { "territory", kCapContextUsageTerritory }, - { "variant", kCapContextUsageVariant }, - { NULL, (CapContextUsage)0 }, - }; // Only get the context data if we need it! This is a const object so we know now... // Also check whether we will need a break iterator (depends on the data) UBool needBrkIter = FALSE; if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_STANDALONE) { - int32_t len = 0; - UResourceBundle *localeBundle = ures_open(NULL, locale.getName(), &status); - if (U_SUCCESS(status)) { - UResourceBundle *contextTransforms = ures_getByKeyWithFallback(localeBundle, "contextTransforms", NULL, &status); - if (U_SUCCESS(status)) { - UResourceBundle *contextTransformUsage; - while ( (contextTransformUsage = ures_getNextResource(contextTransforms, NULL, &status)) != NULL ) { - const int32_t * intVector = ures_getIntVector(contextTransformUsage, &len, &status); - if (U_SUCCESS(status) && intVector != NULL && len >= 2) { - const char* usageKey = ures_getKey(contextTransformUsage); - if (usageKey != NULL) { - const ContextUsageNameToEnum * typeMapPtr = contextUsageTypeMap; - int32_t compResult = 0; - // linear search; list is short and we cannot be sure that bsearch is available - while ( typeMapPtr->usageName != NULL && (compResult = uprv_strcmp(usageKey, typeMapPtr->usageName)) > 0 ) { - ++typeMapPtr; - } - if (typeMapPtr->usageName != NULL && compResult == 0) { - int32_t titlecaseInt = (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU)? intVector[0]: intVector[1]; - if (titlecaseInt != 0) { - fCapitalization[typeMapPtr->usageEnum] = TRUE;; - needBrkIter = TRUE; - } - } - } - } - status = U_ZERO_ERROR; - ures_close(contextTransformUsage); - } - ures_close(contextTransforms); - } - ures_close(localeBundle); + LocalUResourceBundlePointer resource(ures_open(NULL, locale.getName(), &status)); + if (U_FAILURE(status)) { return; } + CapitalizationContextSink sink(*this); + ures_getAllItemsWithFallback(resource.getAlias(), "contextTransforms", sink, status); + if (status == U_MISSING_RESOURCE_ERROR) { + // Silently ignore. Not every locale has contextTransforms. + status = U_ZERO_ERROR; + } else if (U_FAILURE(status)) { + return; } + needBrkIter = sink.hasCapitalizationUsage; } // Get a sentence break iterator if we will need it if (needBrkIter || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE) { @@ -494,8 +513,10 @@ LocaleDisplayNamesImpl::initialize(void) { } LocaleDisplayNamesImpl::~LocaleDisplayNamesImpl() { +#if !UCONFIG_NO_BREAK_ITERATION delete capitalizationBrkIter; - } +#endif +} const Locale& LocaleDisplayNamesImpl::getLocale() const { diff --git a/deps/icu-small/source/common/locid.cpp b/deps/icu-small/source/common/locid.cpp index d6ca74dfafeb64..d2781db95bdd8c 100644 --- a/deps/icu-small/source/common/locid.cpp +++ b/deps/icu-small/source/common/locid.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -42,6 +44,7 @@ #include "uhash.h" #include "ucln_cmn.h" #include "ustr_imp.h" +#include "charstr.h" U_CDECL_BEGIN static UBool U_CALLCONV locale_cleanup(void); @@ -57,6 +60,12 @@ static UMutex gDefaultLocaleMutex = U_MUTEX_INITIALIZER; static UHashtable *gDefaultLocalesHashT = NULL; static Locale *gDefaultLocale = NULL; +/** + * \def ULOC_STRING_LIMIT + * strings beyond this value crash in CharString + */ +#define ULOC_STRING_LIMIT 357913941 + U_NAMESPACE_END typedef enum ELocalePos { @@ -283,13 +292,12 @@ Locale::Locale( const char * newLanguage, } else { - MaybeStackArray togo; + UErrorCode status = U_ZERO_ERROR; int32_t size = 0; int32_t lsize = 0; int32_t csize = 0; int32_t vsize = 0; int32_t ksize = 0; - char *p; // Calculate the size of the resulting string. @@ -297,13 +305,23 @@ Locale::Locale( const char * newLanguage, if ( newLanguage != NULL ) { lsize = (int32_t)uprv_strlen(newLanguage); + if ( lsize < 0 || lsize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } size = lsize; } + CharString togo(newLanguage, lsize, status); // start with newLanguage + // _Country if ( newCountry != NULL ) { csize = (int32_t)uprv_strlen(newCountry); + if ( csize < 0 || csize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } size += csize; } @@ -318,6 +336,10 @@ Locale::Locale( const char * newLanguage, // remove trailing _'s vsize = (int32_t)uprv_strlen(newVariant); + if ( vsize < 0 || vsize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } while( (vsize>1) && (newVariant[vsize-1] == SEP_CHAR) ) { vsize--; @@ -342,70 +364,56 @@ Locale::Locale( const char * newLanguage, if ( newKeywords != NULL) { ksize = (int32_t)uprv_strlen(newKeywords); + if ( ksize < 0 || ksize > ULOC_STRING_LIMIT ) { + setToBogus(); + return; + } size += ksize + 1; } - // NOW we have the full locale string.. - - /*if the whole string is longer than our internal limit, we need - to go to the heap for temporary buffers*/ - if (size >= togo.getCapacity()) - { - // If togo_heap could not be created, initialize with default settings. - if (togo.resize(size+1) == NULL) { - init(NULL, FALSE); - } - } - - togo[0] = 0; - // Now, copy it back. - p = togo.getAlias(); - if ( lsize != 0 ) - { - uprv_strcpy(p, newLanguage); - p += lsize; - } + + // newLanguage is already copied if ( ( vsize != 0 ) || (csize != 0) ) // at least: __v { // ^ - *p++ = SEP_CHAR; + togo.append(SEP_CHAR, status); } if ( csize != 0 ) { - uprv_strcpy(p, newCountry); - p += csize; + togo.append(newCountry, status); } if ( vsize != 0) { - *p++ = SEP_CHAR; // at least: __v - - uprv_strncpy(p, newVariant, vsize); // Must use strncpy because - p += vsize; // of trimming (above). - *p = 0; // terminate + togo.append(SEP_CHAR, status) + .append(newVariant, vsize, status); } if ( ksize != 0) { if (uprv_strchr(newKeywords, '=')) { - *p++ = '@'; /* keyword parsing */ + togo.append('@', status); /* keyword parsing */ } else { - *p++ = '_'; /* Variant parsing with a script */ + togo.append('_', status); /* Variant parsing with a script */ if ( vsize == 0) { - *p++ = '_'; /* No country found */ + togo.append('_', status); /* No country found */ } } - uprv_strcpy(p, newKeywords); - p += ksize; + togo.append(newKeywords, status); } + if (U_FAILURE(status)) { + // Something went wrong with appending, etc. + setToBogus(); + return; + } // Parse it, because for example 'language' might really be a complete // string. - init(togo.getAlias(), FALSE); + init(togo.data(), FALSE); } } @@ -662,6 +670,7 @@ Locale::setToBogus() { *script = 0; *country = 0; fIsBogus = TRUE; + variantBegin = 0; } const Locale& U_EXPORT2 diff --git a/deps/icu-small/source/common/loclikely.cpp b/deps/icu-small/source/common/loclikely.cpp index 09b53298841ef9..c13b37e1a1f2d6 100644 --- a/deps/icu-small/source/common/loclikely.cpp +++ b/deps/icu-small/source/common/loclikely.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -125,7 +127,7 @@ static const char* const unknownRegion = "ZZ"; * to be used when constructing the new tag. If the alternateTags parameter is NULL, or * it contains no language tag, the default tag for the unknown language is used. * - * If the length of the new string exceeds the capacity of the output buffer, + * If the length of the new string exceeds the capacity of the output buffer, * the function copies as many bytes to the output buffer as it can, and returns * the error U_BUFFER_OVERFLOW_ERROR. * @@ -382,7 +384,7 @@ createTagStringWithAlternates( * must be less than or equal to 0. If the lang parameter is an empty string, the * default value for an unknown language is written to the output buffer. * - * If the length of the new string exceeds the capacity of the output buffer, + * If the length of the new string exceeds the capacity of the output buffer, * the function copies as many bytes to the output buffer as it can, and returns * the error U_BUFFER_OVERFLOW_ERROR. * @@ -534,7 +536,7 @@ parseTagString( */ if (_isIDSeparator(*position)) { ++position; - } + } } subtagLength = ulocimp_getCountry(position, region, *regionLength, &position); @@ -923,7 +925,7 @@ _uloc_addLikelySubtags(const char* localeID, uprv_memcpy( maximizedLocaleID, localeID, - localIDLength <= maximizedLocaleIDCapacity ? + localIDLength <= maximizedLocaleIDCapacity ? localIDLength : maximizedLocaleIDCapacity); resultLength = @@ -1180,7 +1182,7 @@ _uloc_minimizeSubtags(const char* localeID, uprv_memcpy( minimizedLocaleID, localeID, - localeIDLength <= minimizedLocaleIDCapacity ? + localeIDLength <= minimizedLocaleIDCapacity ? localeIDLength : minimizedLocaleIDCapacity); return u_terminateChars( @@ -1249,7 +1251,7 @@ uloc_addLikelySubtags(const char* localeID, maximizedLocaleID, maximizedLocaleIDCapacity, err); - } + } } U_CAPI int32_t U_EXPORT2 @@ -1273,7 +1275,7 @@ uloc_minimizeSubtags(const char* localeID, minimizedLocaleID, minimizedLocaleIDCapacity, err); - } + } } // Pairs of (language subtag, + or -) for finding out fast if common languages @@ -1330,6 +1332,8 @@ Locale::isRightToLeft() const { return uloc_isRightToLeft(getBaseName()); } +U_NAMESPACE_END + // The following must at least allow for rg key value (6) plus terminator (1). #define ULOC_RG_BUFLEN 8 @@ -1379,4 +1383,3 @@ ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion, return u_terminateChars(region, regionCapacity, rgLen, status); } -U_NAMESPACE_END diff --git a/deps/icu-small/source/common/locmap.c b/deps/icu-small/source/common/locmap.c index f545a04d487962..c03cd5cf969507 100644 --- a/deps/icu-small/source/common/locmap.c +++ b/deps/icu-small/source/common/locmap.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1996-2016, International Business Machines @@ -18,7 +20,7 @@ * * Date Name Description * 3/11/97 aliu Fixed off-by-one bug in assignment operator. Added - * setId() method and safety check against + * setId() method and safety check against * MAX_ID_LENGTH. * 04/23/99 stephen Added C wrapper for convertToPosix. * 09/18/00 george Removed the memory leaks. @@ -213,11 +215,8 @@ ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US) ILCID_POSIX_SUBTABLE(ckb) { {0x92, "ckb"}, - {0x92, "ku"}, {0x7c92, "ckb_Arab"}, - {0x7c92, "ku_Arab"}, - {0x0492, "ckb_Arab_IQ"}, - {0x0492, "ku_Arab_IQ"} + {0x0492, "ckb_Arab_IQ"} }; /* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */ @@ -1019,33 +1018,40 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr const char *pPosixID = NULL; #ifdef USE_WINDOWS_LOCALE_API - int32_t tmpLen = 0; - char locName[157]; /* ULOC_FULLNAME_CAPACITY */ - - tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName)); - if (tmpLen > 1) { - /* Windows locale name may contain sorting variant, such as "es-ES_tradnl". - In such case, we need special mapping data found in the hardcoded table - in this source file. */ - char *p = uprv_strchr(locName, '_'); - if (p) { - /* Keep the base locale, without variant */ - *p = 0; - tmpLen = uprv_strlen(locName); - } else { - /* No hardcoded table lookup necessary */ - bLookup = FALSE; - } - /* Change the tag separator from '-' to '_' */ - p = locName; - while (*p) { - if (*p == '-') { - *p = '_'; + // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and + // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for + // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot + // use the Windows API to resolve locale ID for this specific case. + if (hostid & 0x3FF != 0x92) { + int32_t tmpLen = 0; + char locName[157]; /* ULOC_FULLNAME_CAPACITY */ + + tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName)); + if (tmpLen > 1) { + /* Windows locale name may contain sorting variant, such as "es-ES_tradnl". + In such case, we need special mapping data found in the hardcoded table + in this source file. */ + char *p = uprv_strchr(locName, '_'); + if (p) { + /* Keep the base locale, without variant */ + *p = 0; + tmpLen = uprv_strlen(locName); + } + else { + /* No hardcoded table lookup necessary */ + bLookup = FALSE; } - p++; + /* Change the tag separator from '-' to '_' */ + p = locName; + while (*p) { + if (*p == '-') { + *p = '_'; + } + p++; + } + FIX_LANGUAGE_ID_TAG(locName, tmpLen); + pPosixID = locName; } - FIX_LANGUAGE_ID_TAG(locName, tmpLen); - pPosixID = locName; } #endif if (bLookup) { @@ -1126,7 +1132,7 @@ uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status) mid = (high+low) >> 1; /*Finds median*/ - if (mid == oldmid) + if (mid == oldmid) break; compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID); @@ -1166,3 +1172,4 @@ uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status) *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; /* return international (root) */ } + diff --git a/deps/icu-small/source/common/locmap.h b/deps/icu-small/source/common/locmap.h index 4345e216bd7136..4e14fe5ddcf81e 100644 --- a/deps/icu-small/source/common/locmap.h +++ b/deps/icu-small/source/common/locmap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -7,7 +9,7 @@ ****************************************************************************** * * File locmap.h : Locale Mapping Classes -* +* * * Created by: Helena Shih * @@ -34,3 +36,4 @@ U_CAPI int32_t uprv_convertToPosix(uint32_t hostid, char* posixID, int32_t posix U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status); #endif /* LOCMAP_H */ + diff --git a/deps/icu-small/source/common/locresdata.cpp b/deps/icu-small/source/common/locresdata.cpp index 15cbc38471cac2..ee606397dfbeb4 100644 --- a/deps/icu-small/source/common/locresdata.cpp +++ b/deps/icu-small/source/common/locresdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -82,9 +84,9 @@ uloc_getTableStringWithFallback(const char *path, const char *locale, if(U_FAILURE(errorCode)){ *pErrorCode = errorCode; } - + break;*/ - + ures_getByKeyWithFallback(&table,subTableKey, &table, &errorCode); } if(U_SUCCESS(errorCode)){ @@ -111,8 +113,8 @@ uloc_getTableStringWithFallback(const char *path, const char *locale, break; } } - - if(U_FAILURE(errorCode)){ + + if(U_FAILURE(errorCode)){ /* still can't figure out ?.. try the fallback mechanism */ int32_t len = 0; @@ -125,9 +127,9 @@ uloc_getTableStringWithFallback(const char *path, const char *locale, *pErrorCode = errorCode; break; } - + u_UCharsToChars(fallbackLocale, explicitFallbackName, len); - + /* guard against recursive fallback */ if(uprv_strcmp(explicitFallbackName, locale)==0){ *pErrorCode = U_INTERNAL_PROGRAM_ERROR; @@ -210,7 +212,7 @@ uloc_getCharacterOrientation(const char* localeId, /** * Get the layout line orientation for the specified locale. - * + * * @param localeID locale name * @param status Error status * @return an enum indicating the layout orientation for lines. diff --git a/deps/icu-small/source/common/locutil.cpp b/deps/icu-small/source/common/locutil.cpp index 0b73d9d3e740b5..a27edf12f57a9b 100644 --- a/deps/icu-small/source/common/locutil.cpp +++ b/deps/icu-small/source/common/locutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2002-2014, International Business Machines Corporation and @@ -30,7 +32,7 @@ static icu::Hashtable * LocaleUtility_cache = NULL; */ /** - * Release all static memory held by Locale Utility. + * Release all static memory held by Locale Utility. */ U_CDECL_BEGIN static UBool U_CALLCONV service_cleanup(void) { @@ -269,3 +271,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/locutil.h b/deps/icu-small/source/common/locutil.h index cf64e343d06649..64f7dcc2c052f7 100644 --- a/deps/icu-small/source/common/locutil.h +++ b/deps/icu-small/source/common/locutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2002-2005, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/messageimpl.h b/deps/icu-small/source/common/messageimpl.h index 9af400cd27ddf2..980f777e8df7b4 100644 --- a/deps/icu-small/source/common/messageimpl.h +++ b/deps/icu-small/source/common/messageimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/messagepattern.cpp b/deps/icu-small/source/common/messagepattern.cpp index 7265b81eda1741..31d5bb7b9a687e 100644 --- a/deps/icu-small/source/common/messagepattern.cpp +++ b/deps/icu-small/source/common/messagepattern.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines @@ -114,7 +116,7 @@ MessagePatternList::copyFrom( errorCode=U_MEMORY_ALLOCATION_ERROR; return; } - uprv_memcpy(a.getAlias(), other.a.getAlias(), length*sizeof(T)); + uprv_memcpy(a.getAlias(), other.a.getAlias(), (size_t)length*sizeof(T)); } } @@ -452,7 +454,7 @@ MessagePattern::parseMessage(int32_t index, int32_t msgStartLength, UChar c=msg.charAt(index++); if(c==u_apos) { if(index==msg.length()) { - // The apostrophe is the last character in the pattern. + // The apostrophe is the last character in the pattern. // Add a Part for auto-quoting. addPart(UMSGPAT_PART_TYPE_INSERT_CHAR, index, 0, u_apos, errorCode); // value=char to be inserted diff --git a/deps/icu-small/source/common/msvcres.h b/deps/icu-small/source/common/msvcres.h index 4d087a2ac95a77..ac23b97af7092a 100644 --- a/deps/icu-small/source/common/msvcres.h +++ b/deps/icu-small/source/common/msvcres.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //{{NO_DEPENDENCIES}} // Copyright (c) 2003-2010 International Business Machines // Corporation and others. All Rights Reserved. @@ -9,8 +11,8 @@ // /* -These are defined before unicode/uversion.h in order to prevent -STLPort's broken stddef.h from being used when rc.exe parses this file. +These are defined before unicode/uversion.h in order to prevent +STLPort's broken stddef.h from being used when rc.exe parses this file. */ #define _STLP_OUTERMOST_HEADER_ID 0 #define _STLP_WINCE 1 diff --git a/deps/icu-small/source/common/mutex.h b/deps/icu-small/source/common/mutex.h index cd2fcb16e48f95..525628b4041ac6 100644 --- a/deps/icu-small/source/common/mutex.h +++ b/deps/icu-small/source/common/mutex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -28,13 +30,13 @@ U_NAMESPACE_BEGIN //---------------------------------------------------------------------------- // Code within that accesses shared static or global data should -// should instantiate a Mutex object while doing so. You should make your own +// should instantiate a Mutex object while doing so. You should make your own // private mutex where possible. // For example: -// +// // UMutex myMutex; -// +// // void Function(int arg1, int arg2) // { // static Object* foo; // Shared read-write object diff --git a/deps/icu-small/source/common/norm2_nfc_data.h b/deps/icu-small/source/common/norm2_nfc_data.h index 9925afa3413761..4ddba0f8ba64c4 100644 --- a/deps/icu-small/source/common/norm2_nfc_data.h +++ b/deps/icu-small/source/common/norm2_nfc_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -10,524 +12,534 @@ #ifdef INCLUDED_FROM_NORMALIZER2_CPP static const UVersionInfo norm2_nfc_data_formatVersion={2,0,0,0}; -static const UVersionInfo norm2_nfc_data_dataVersion={8,0,0,0}; +static const UVersionInfo norm2_nfc_data_dataVersion={9,0,0,0}; static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={ -0x40,0x49c0,0x8614,0x8714,0x8714,0x8714,0x8714,0x8714,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0 +0x40,0x4bb8,0x880c,0x890c,0x890c,0x890c,0x890c,0x890c,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0 }; -static const uint16_t norm2_nfc_data_trieIndex[9400]={ -0x28d,0x295,0x29d,0x2a5,0x2b3,0x2bb,0x2c3,0x2cb,0x2d3,0x2db,0x2e3,0x2eb,0x2f3,0x2fb,0x301,0x309, -0x311,0x319,0x2ac,0x2b4,0x31e,0x326,0x2ac,0x2b4,0x32e,0x336,0x33e,0x346,0x34e,0x356,0x35e,0x366, -0x36e,0x376,0x37e,0x386,0x38e,0x396,0x39e,0x3a6,0x2ac,0x2b4,0x2ac,0x2b4,0x3ad,0x3b5,0x3bd,0x3c5, -0x3c9,0x3d1,0x3d7,0x3df,0x2ac,0x2b4,0x3e7,0x3ef,0x3f3,0x3fb,0x403,0x40b,0x2ac,0x2b4,0x409,0x411, -0x416,0x41d,0x421,0x2ac,0x2ac,0x2ac,0x2ac,0x429,0x2ac,0x431,0x439,0x2ac,0x2ac,0x441,0x449,0x2ac, -0x2ac,0x451,0x459,0x2ac,0x2ac,0x461,0x469,0x2ac,0x2ac,0x441,0x470,0x2ac,0x478,0x47e,0x486,0x2ac, -0x2ac,0x2ac,0x48d,0x2ac,0x2ac,0x493,0x49b,0x2ac,0x2ac,0x47e,0x4a2,0x2ac,0x2ac,0x2ac,0x4a8,0x2ac, -0x2ac,0x4b0,0x4b7,0x2ac,0x2ac,0x4ba,0x4c1,0x2ac,0x4c4,0x4cb,0x4d3,0x4db,0x4e3,0x4eb,0x4f2,0x2ac, -0x2ac,0x4f9,0x2ac,0x2ac,0x500,0x2ac,0x2ac,0x2ac,0x8ea,0x2ac,0x2ac,0x8f2,0x2ac,0x8f8,0x900,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x504,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x50c,0x50c,0x2ac,0x2ac,0x2ac,0x2ac,0x512,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x51a,0x2ac,0x2ac,0x2ac,0x51d,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x524,0x2ac,0x2ac,0x52c,0x2ac,0x534,0x2ac,0x2ac,0x53c,0x541,0x549,0x54f,0x2ac,0x555,0x2ac,0x55c, -0x2ac,0x561,0x2ac,0x2ac,0x2ac,0x2ac,0x567,0x56f,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x577,0x57c, -0x584,0x58c,0x594,0x59c,0x5a4,0x5ac,0x5b4,0x5bc,0x5c4,0x5cc,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc, -0x604,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x608,0x610,0x2ac,0x617,0x2ac,0x2ac,0x61b,0x622,0x627,0x2ac, -0x62f,0x637,0x63f,0x647,0x64f,0x657,0x2ac,0x65f,0x2ac,0x665,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x668,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x670,0x2ac,0x2ac,0x2ac,0x675,0x2ac,0x2ac,0x2ac,0x67d, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x685,0x68c,0x694,0x69c,0x6a4,0x6ac,0x6b4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x6bc,0x6c4,0x2ac,0x2ac,0x6cc,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x6d3,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x6da,0x6e2,0x2ac,0x6e8,0x6ec,0x2ac,0x2ac,0x562,0x6f4,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x6f8,0x700,0x703,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x469, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x90f,0x2ac,0x2ac, -0x917,0x91e,0x28d,0x925,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d, -0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x70b,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743, -0x74b,0x753,0x75b,0x763,0x76b,0x773,0x77b,0x2ac,0x782,0x78a,0x792,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x79a,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0xab4,0xab4,0xacc,0xb0c,0xb4c,0xb8c,0xbcc,0xc04,0xc44,0xab0,0xc78,0xab0,0xcb8,0xcf8,0xd38,0xd78, -0xdb8,0xdf8,0xe38,0xe78,0xab0,0xab0,0xeb4,0xef4,0xf24,0xf5c,0xab0,0xf9c,0xfcc,0x100c,0xab0,0x1024, -0x880,0x8b0,0x8ee,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x928,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x944,0x188,0x188,0x97a,0x188,0x188,0x9b4,0x188,0x188, +static const uint16_t norm2_nfc_data_trieIndex[9652]={ +0x2a8,0x2b0,0x2b8,0x2c0,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,0x324, +0x32c,0x334,0x2c7,0x2cf,0x339,0x341,0x2c7,0x2cf,0x349,0x351,0x359,0x361,0x369,0x371,0x379,0x381, +0x389,0x391,0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x2c7,0x2cf,0x2c7,0x2cf,0x3c8,0x3d0,0x3d8,0x3e0, +0x3e4,0x3ec,0x3f2,0x3fa,0x2c7,0x2cf,0x402,0x40a,0x40e,0x416,0x41e,0x426,0x2c7,0x2cf,0x424,0x42c, +0x431,0x438,0x43c,0x2c7,0x2c7,0x2c7,0x443,0x44b,0x2c7,0x453,0x45b,0x2c7,0x2c7,0x463,0x46b,0x2c7, +0x2c7,0x473,0x47b,0x2c7,0x2c7,0x483,0x48b,0x2c7,0x2c7,0x463,0x492,0x2c7,0x49a,0x4a0,0x4a8,0x2c7, +0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4a0,0x4c4,0x2c7,0x2c7,0x2c7,0x4ca,0x2c7, +0x2c7,0x4d2,0x4d9,0x2c7,0x2c7,0x4dc,0x4e3,0x2c7,0x4e6,0x4ed,0x4f5,0x4fd,0x505,0x50d,0x514,0x2c7, +0x2c7,0x51b,0x2c7,0x2c7,0x522,0x2c7,0x2c7,0x2c7,0x929,0x2c7,0x2c7,0x931,0x2c7,0x937,0x93f,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x526,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52e,0x52e,0x2c7,0x2c7,0x2c7,0x2c7,0x534,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x53c,0x2c7,0x2c7,0x2c7,0x53f,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x546,0x2c7,0x2c7,0x54e,0x2c7,0x556,0x2c7,0x2c7,0x55e,0x563,0x56b,0x571,0x2c7,0x577,0x2c7,0x57e, +0x2c7,0x583,0x2c7,0x2c7,0x2c7,0x2c7,0x589,0x591,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x599,0x59e, +0x5a6,0x5ae,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0x606,0x60e,0x616,0x61e, +0x626,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x62a,0x632,0x2c7,0x639,0x2c7,0x2c7,0x63d,0x644,0x649,0x2c7, +0x651,0x659,0x661,0x669,0x671,0x679,0x2c7,0x681,0x2c7,0x687,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x68a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x692,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x69f, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x6a7,0x6ae,0x6b6,0x6be,0x6c6,0x6ce,0x6d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x6de,0x6e6,0x2c7,0x2c7,0x6ee,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x6fc,0x704,0x2c7,0x70a,0x70e,0x2c7,0x2c7,0x584,0x716,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x71a,0x722,0x725,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x94e,0x2c7,0x2c7, +0x956,0x95d,0x2a8,0x964,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, +0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x72d,0x735,0x73d,0x745,0x74d,0x755,0x75d,0x765, +0x76d,0x775,0x77d,0x785,0x78d,0x795,0x79d,0x2c7,0x7a4,0x7ac,0x7b4,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x7bc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0xb20,0xb20,0xb38,0xb78,0xbb8,0xbf8,0xc38,0xc70,0xcb0,0xb1c,0xce4,0xb1c,0xd24,0xd64,0xda4,0xde4, +0xe24,0xe64,0xea4,0xee4,0xb1c,0xb1c,0xf20,0xf60,0xf90,0xfc8,0xb1c,0x1008,0x1038,0x1078,0xb1c,0x1090, +0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x951,0x188,0x188, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96d,0x188,0x188,0x9a3,0x188,0x9e3,0xa1d,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x9f4, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x79e, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7a6,0x2ac,0x2ac,0x2ac,0x7a9,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x7b0,0x7b4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7bc,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x6d3,0x675,0x7be,0x7c6,0x2ac,0x2ac,0x7ce,0x7d5,0x2ac,0x562,0x2ac,0x2ac,0x7dd,0x2ac,0x2ac,0x7e0, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7e6,0x2ac,0x441,0x7ed,0x7f4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x7fa,0x802,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x807,0x80f,0x2ac,0x2ac,0x675, -0x2ac,0x2ac,0x2ac,0x812,0x2ac,0x2ac,0x2ac,0x818,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x81c, -0x2ac,0x822,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x828,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x830,0x838,0x840,0x846,0x84e,0x2ac,0x2ac,0x2ac,0x856,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x85a,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x862,0x86a,0x872,0x87a,0x882,0x88a,0x892,0x89a,0x8a2,0x8aa,0x8b2,0x8ba, -0x8c2,0x8ca,0x8d2,0x8da,0x8e2,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,4,6,0,0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4, -0xae,0xba,0xc0,0xd2,0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0, -0,0,0,0,0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218, -0x222,0x22e,0x234,0x246,0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x2f4,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947, -0x57a,0x57f,0x2fa,0x584,0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962, -0x599,0x5a4,0x5ad,0,0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977, -0x5c8,0x5cd,0x300,0x5d2,0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992, -0x5e7,0x5f2,0x5fb,0,0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616, -0x9aa,0x9ad,0x9b0,0x9b3,0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628, -0x9ce,0x9d1,0x9d4,0x9d7,0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb, -0x9fe,0xa01,0,0,0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0, -0xa1f,0xa22,0xa25,0xa28,0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d, -0xa40,0xa43,0xa46,0xa49,0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0, -0xa5b,0xa5e,0xa61,0xa64,0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c, -0xa7f,0xa82,0,0,0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a, -0xa9d,0xaa0,0xaa3,0xaa6,0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x665,0x672,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x67f,0x68c,0,0,0, -0,0,0,0x308,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xabe,0xac1,0xac4,0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5, -0xafa,0,0xaff,0xb04,0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e, -0xb25,0xb2a,0xb2e,0xb31,0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49, -0xb4d,0xb50,0xb53,0xb56,0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a, -0xb7d,0xb80,0xb83,0xb86,0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa, -0,0,0xbad,0xbb0,0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9, -0xbbe,0xbc3,0x6b7,0x6bc,0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x30a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6, -0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc, -0xffdc,0xffdc,0xffe8,0xfed8,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca, -0xfeca,0xffdc,0xffdc,0xffdc,0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01, -0xfe01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc, -0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6, -0xffe8,0xffdc,0xffdc,0xffe6,0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0, -0,0,0,0,0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8, -0xbdd,0xbe0,0xbe3,0,0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322, -0,0x32c,0,0,0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0, -0,0x350,0xbf4,0xbf7,0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372, -0,0x37e,0,0,0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0, -0,0x3aa,0x6cb,0x6d4,0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a, -0,0,0,0,0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc, -0x3ce,0xc26,0x3d6,0,0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2, -0,0,0,0x3e4,0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8, -0x3fa,0xc29,0x402,0,0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e, -0,0,0,0x410,0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35, -0,0,0,0,0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44, -0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c, -0x41a,0x41c,0xc5f,0xc62,0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80, -0x41e,0x420,0xc83,0xc86,0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0, -0xca7,0xcaa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6, -0xffe6,0xffde,0xffe4,0xffe6,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14, -0xff15,0xff16,0,0xff17,0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5d, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c0, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c8,0x2c7,0x2c7,0x2c7,0x7cb,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x7d2,0x7d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7de,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x6f5,0x697,0x7e0,0x7e8,0x2c7,0x2c7,0x7f0,0x7f7,0x2c7,0x584,0x2c7,0x2c7,0x7ff,0x2c7,0x2c7,0x802, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x808,0x2c7,0x463,0x80f,0x816,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x81e,0x2c7,0x2c7,0x822,0x82a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x82f,0x837,0x2c7,0x2c7,0x697, +0x2c7,0x2c7,0x2c7,0x83a,0x2c7,0x2c7,0x2c7,0x840,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x844,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x850,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x858,0x860,0x868, +0x86e,0x876,0x2c7,0x2c7,0x2c7,0x87e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x886,0x88e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x892,0x2c7,0x2c7,0x2c7,0x899,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a1,0x8a9,0x8b1, +0x8b9,0x8c1,0x8c9,0x8d1,0x8d9,0x8e1,0x8e9,0x8f1,0x8f9,0x901,0x909,0x911,0x919,0x921,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,0x2a7,0x2a7, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,0, +0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4,0xae,0xba,0xc0,0xd2, +0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0,0,0,0,0, +0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218,0x222,0x22e,0x234,0x246, +0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x2f4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947,0x57a,0x57f,0x2fa,0x584, +0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962,0x599,0x5a4,0x5ad,0, +0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977,0x5c8,0x5cd,0x300,0x5d2, +0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992,0x5e7,0x5f2,0x5fb,0, +0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616,0x9aa,0x9ad,0x9b0,0x9b3, +0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628,0x9ce,0x9d1,0x9d4,0x9d7, +0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb,0x9fe,0xa01,0,0, +0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0,0xa1f,0xa22,0xa25,0xa28, +0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d,0xa40,0xa43,0xa46,0xa49, +0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0,0xa5b,0xa5e,0xa61,0xa64, +0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c,0xa7f,0xa82,0,0, +0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a,0xa9d,0xaa0,0xaa3,0xaa6, +0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x665,0x672,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x67f,0x68c,0,0,0,0,0,0,0x308, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xabe,0xac1,0xac4, +0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5,0xafa,0,0xaff,0xb04, +0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e,0xb25,0xb2a,0xb2e,0xb31, +0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49,0xb4d,0xb50,0xb53,0xb56, +0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a,0xb7d,0xb80,0xb83,0xb86, +0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa,0,0,0xbad,0xbb0, +0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9,0xbbe,0xbc3,0x6b7,0x6bc, +0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x30a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6, +0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc,0xffdc,0xffdc,0xffe8,0xfed8, +0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca,0xfeca,0xffdc,0xffdc,0xffdc, +0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01,0xfe01,0xffdc,0xffdc,0xffdc, +0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, +0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe8,0xffdc,0xffdc,0xffe6, +0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0,0,0,0,0, +0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8,0xbdd,0xbe0,0xbe3,0, +0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322,0,0x32c,0,0, +0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0,0,0x350,0xbf4,0xbf7, +0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372,0,0x37e,0,0, +0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0,0,0x3aa,0x6cb,0x6d4, +0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a,0,0,0,0, +0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc,0x3ce,0xc26,0x3d6,0, +0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2,0,0,0,0x3e4, +0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8,0x3fa,0xc29,0x402,0, +0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e,0,0,0,0x410, +0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35,0,0,0,0, +0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c,0x41a,0x41c,0xc5f,0xc62, +0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80,0x41e,0x420,0xc83,0xc86, +0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0,0xca7,0xcaa,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffde,0xffe4,0xffe6, +0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14,0xff15,0xff16,0,0xff17, +0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0,0,0,0,0, +0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6,0xfee6,0xfedc,0xffdc,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff23,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2,0,0x430,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0xffe6, +0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff24,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc, +0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6, +0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0, -0,0,0,0,0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6, -0xfee6,0xfedc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff23,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2, -0,0x430,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc, -0xffe6,0,0,0xffe6,0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xff24,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6, -0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6, -0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffdc, +0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6, +0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0x432,0xcc5,0,0,0,0,0,0,0x434,0xcc8,0,0x436, +0xccb,0,0,0,0,0,0,0,0xfe07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6, +0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503,0x1506,0x1509,0x150c,0x150f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff07,0,0xfe00,0,0,0,0,0, +0,0,0,0x438,0,0,0,0xcce,0xcd1,0xff09,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0x1512,0x1515,0,0x1518,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x151b, +0,0,0x151e,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0,0,0,0,0x1521,0x1524,0x1527,0,0,0x152a,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x43c, +0xcd4,0,0,0xcd7,0xcda,0xff09,0,0,0,0,0,0,0,0,0xfe00,0xfe00, +0,0,0,0,0x152d,0x1530,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x442,0,0xcdd,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00,0, +0,0,0,0,0,0,0x444,0x448,0,0,0xce0,0xce3,0xce6,0xff09,0,0, +0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0,0x44a,0,0xce9,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0xff54,0xfe5b,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xff07,0,0,0x44c,0xcec,0,0xfe00,0,0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6, +0,0xff09,0,0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0, +0,0,0,0,0,0,0x454,0x458,0,0,0xcfa,0xcfd,0xd00,0xff09,0,0, +0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0,0xfe09,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xff67,0xff67,0xff09,0,0,0,0,0,0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff76,0xff76,0,0,0,0,0,0, +0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xffdc,0,0xffdc,0,0xffd8,0,0, +0,0,0,0,0,0,0,0x1533,0,0,0,0,0,0,0,0, +0,0x1536,0,0,0,0,0x1539,0,0,0,0,0x153c,0,0,0,0, +0x153f,0,0,0,0,0,0,0,0,0,0,0,0,0x1542,0,0, +0,0,0,0,0,0xff81,0xff82,0x1546,0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82, +0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6,0xff09,0,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0,0x1557,0,0,0,0,0,0,0,0, +0,0x155a,0,0,0,0,0x155d,0,0,0,0,0x1560,0,0,0,0, +0x1563,0,0,0,0,0,0,0,0,0,0,0,0,0x1566,0,0, +0,0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x460,0xd0e,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0, +0,0,0,0xff07,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0xffe6,0,0, +0,0,0,0,0,0,0,0,0,0xffe4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffde,0xffe6,0xffdc,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, -0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc, -0,0,0,0,0,0,0,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6, -0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0x432,0xcc5,0,0, -0,0,0,0,0x434,0xcc8,0,0x436,0xccb,0,0,0,0,0,0,0, -0xfe07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503, -0x1506,0x1509,0x150c,0x150f,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff07,0,0xfe00,0,0,0,0,0,0,0,0,0x438,0,0,0,0xcce, -0xcd1,0xff09,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0x1512,0x1515,0,0x1518,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x151b,0,0,0x151e,0,0,0,0,0, -0xff07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0x1521,0x1524,0x1527, -0,0,0x152a,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x43c,0xcd4,0,0,0xcd7,0xcda,0xff09,0,0, -0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0x152d,0x1530,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x442,0,0xcdd,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0x444,0x448, -0,0,0xce0,0xce3,0xce6,0xff09,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0,0x44a,0,0xce9,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0xff54,0xfe5b,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0,0,0x44c,0xcec,0,0xfe00,0, -0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6,0,0xff09,0,0,0,0,0,0, -0,0xfe00,0xfe00,0,0,0,0,0,0,0,0,0,0,0,0x454,0x458, -0,0,0xcfa,0xcfd,0xd00,0xff09,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0,0xfe09,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff67,0xff67,0xff09,0,0,0,0,0, -0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff76,0xff76,0,0,0,0,0,0,0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffdc,0xffdc,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffdc,0,0xffdc,0,0xffd8,0,0,0,0,0,0,0,0,0,0x1533, -0,0,0,0,0,0,0,0,0,0x1536,0,0,0,0,0x1539,0, -0,0,0,0x153c,0,0,0,0,0x153f,0,0,0,0,0,0,0, -0,0,0,0,0,0x1542,0,0,0,0,0,0,0,0xff81,0xff82,0x1546, -0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82,0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6, -0xff09,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0x1557, -0,0,0,0,0,0,0,0,0,0x155a,0,0,0,0,0x155d,0, -0,0,0,0x1560,0,0,0,0,0x1563,0,0,0,0,0,0,0, -0,0,0,0,0,0x1566,0,0,0,0,0,0,0,0,0xffdc,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x460,0xd0e,0,0,0,0,0, -0,0,0xfe00,0,0,0,0,0,0,0,0,0xff07,0,0xff09,0xff09,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffdc,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc, +0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0x462,0xd11,0x464, +0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0,0,0x46c,0xd20,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, -0,0,0,0,0,0xffe6,0,0,0,0,0,0,0,0,0,0, -0,0xffe4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffde,0xffe6,0xffdc, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xffe6,0xffdc,0,0,0,0,0,0,0, +0xff07,0xfe00,0,0,0,0,0x46e,0xd23,0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f, 0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0, -0,0,0,0,0,0x462,0xd11,0x464,0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0, -0,0x46c,0xd20,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0xfe00,0,0,0,0,0x46e,0xd23, -0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f,0xff09,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, +0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff07,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0xff09,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xff07,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xffe6,0xffe6,0xffe6,0,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, +0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0, +0,0xffdc,0,0,0,0,0,0,0xffe6,0,0,0,0xffe6,0xffe6,0,0, +0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6, +0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0xffe6,0xffe9,0xffdc,0xffe6,0xffdc,0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47, +0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63,0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82, +0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f,0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7, +0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2,0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1, +0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01,0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19, +0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38,0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59, +0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f,0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88, +0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5,0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd, +0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd,0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5, +0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d,0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25, +0xf28,0xf2b,0,0xf2e,0,0,0,0,0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47, +0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f,0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97, +0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad,0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5, +0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8,0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f, +0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037,0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058, +0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f,0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c, +0x109f,0x10a2,0,0,0,0,0,0,0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766, +0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6,0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0, +0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0,0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802, +0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842,0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7, +0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105,0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0, +0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0,0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b, +0,0x89a,0,0x1150,0,0x1155,0,0x115a,0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd, +0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d,0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576, +0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0,0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f, +0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9,0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213, +0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d,0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287, +0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1,0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da, +0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478,0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb, +0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e,0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320, +0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333,0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b, +0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab,0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c, +0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0,0xfdc1,0xfdc1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6, +0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0,0,0xffe6,0,0,0,0xff01,0xff01,0xffe6, +0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x15b7,0,0,0,0x15b9,0x15bc, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x484,0,0x486,0,0x488,0,0,0,0,0,0x1379,0x137c, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x137f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0,0x48e,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x490,0x138b,0,0,0,0x492,0x138e,0,0x494, +0x1391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x496,0x1394,0x498,0x1397,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x49a,0,0,0,0,0x139a,0,0x49c,0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0, +0,0x4a2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x13a6,0x4a4,0x13a9,0,0x4a6,0x4a8,0,0,0,0,0,0, +0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac,0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4, +0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc,0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0, +0,0,0,0,0,0x4c2,0x4c4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x4c6,0,0,0,0,0,0x4c8,0x4ca,0,0x4cc, +0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0,0x4d2,0x4d4,0,0,0,0,0,0, +0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee,0,0,0,0,0,0,0x13f1,0x13f4, +0x13f7,0x13fa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x15bf,0x15c1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x15c3,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0xffda,0xffe4,0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4d6,0, +0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc,0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4, +0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec,0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424, +0x4f4,0x1427,0,0,0,0,0,0x4f6,0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439, +0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1448,0,0,0, +0,0xfe08,0xfe08,0,0,0x50a,0x144b,0,0,0,0,0,0,0,0x50c,0, +0,0,0,0x50e,0x144e,0x510,0x1451,0x512,0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a, +0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522,0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475, +0x52a,0x1478,0,0,0,0,0,0x52c,0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a, +0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x540,0x542,0x544,0x546,0,0x1499,0,0,0x149c, +0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff09, +0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xff07,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0, -0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01, -0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,0,0xffdc,0,0,0,0,0,0, -0xffe6,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6, 0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0xffe9,0xffdc,0xffe6,0xffdc, -0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47,0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63, -0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82,0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f, -0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7,0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2, -0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1,0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01, -0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19,0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38, -0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59,0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f, -0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88,0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5, -0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd,0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd, -0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5,0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d, -0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25,0xf28,0xf2b,0,0xf2e,0,0,0,0, -0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47,0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f, -0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97,0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad, -0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5,0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8, -0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f,0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037, -0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058,0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f, -0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c,0x109f,0x10a2,0,0,0,0,0,0, -0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766,0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6, -0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0,0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0, -0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802,0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842, -0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7,0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105, -0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0,0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0, -0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b,0,0x89a,0,0x1150,0,0x1155,0,0x115a, -0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd,0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d, -0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576,0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0, -0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f,0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9, -0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213,0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d, -0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287,0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1, -0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da,0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478, -0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb,0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e, -0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320,0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333, -0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b,0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab, -0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c,0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0, -0xfdc1,0xfdc1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6,0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0, -0,0xffe6,0,0,0,0xff01,0xff01,0xffe6,0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc, -0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x15b7,0,0,0,0x15b9,0x15bc,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x484,0,0x486,0, -0x488,0,0,0,0,0,0x1379,0x137c,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x137f,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0, -0x48e,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x490, -0x138b,0,0,0,0x492,0x138e,0,0x494,0x1391,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x496, -0x1394,0x498,0x1397,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x49a,0,0,0,0,0x139a,0,0x49c, -0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0,0,0x4a2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x13a6,0x4a4,0x13a9,0, -0x4a6,0x4a8,0,0,0,0,0,0,0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac, -0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4,0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc, -0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0,0,0,0,0,0,0x4c2,0x4c4,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4c6,0, -0,0,0,0,0x4c8,0x4ca,0,0x4cc,0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0, -0x4d2,0x4d4,0,0,0,0,0,0,0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee, -0,0,0,0,0,0,0x13f1,0x13f4,0x13f7,0x13fa,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x15bf,0x15c1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x15c3,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, 0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0, +0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0xffda,0xffe4, -0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x4d6,0,0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc, -0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4,0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec, -0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424,0x4f4,0x1427,0,0,0,0,0,0x4f6, -0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439,0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1448,0,0,0,0,0xfe08,0xfe08,0,0,0x50a,0x144b,0, -0,0,0,0,0,0,0x50c,0,0,0,0,0x50e,0x144e,0x510,0x1451,0x512, -0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a,0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522, -0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475,0x52a,0x1478,0,0,0,0,0,0x52c, -0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a,0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x540, -0x542,0x544,0x546,0,0x1499,0,0,0x149c,0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, -0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0,0,0,0,0,0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6, +0xffe6,0,0,0,0,0,0xffe6,0xffe6,0,0xffe6,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, +0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc,0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da, +0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea,0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa, +0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a,0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a, +0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a,0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a, +0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a,0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a, +0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a,0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a, +0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688,0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698, +0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8,0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8, +0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8,0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8, +0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8,0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8, +0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706,0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714, +0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724,0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734, +0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742,0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752, +0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762,0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684, +0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780,0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790, +0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0,0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0, +0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0,0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0, +0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0,0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6, +0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0,0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8, +0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808,0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818, +0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828,0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838, +0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848,0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856, +0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864,0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872, +0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f,0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d, +0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b,0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822, +0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3,0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd, +0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9,0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7, +0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1,0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed, +0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5,0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff, +0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e,0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x191f,0xff1a,0x1922, +0,0,0,0,0,0,0,0,0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938, +0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0,0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0, +0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971,0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0, +0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0, +0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffdc,0,0xffe6,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0, -0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xff01,0xffdc,0,0,0,0,0xff09,0,0,0,0,0,0xffe6,0xffdc,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6,0xffe6,0,0,0,0,0,0xffe6,0xffe6, -0,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0,0,0,0,0,0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc, -0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da,0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea, -0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa,0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a, -0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a,0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a, -0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a,0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a, -0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a,0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a, -0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a,0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688, -0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698,0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8, -0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8,0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8, -0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8,0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8, -0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8,0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706, -0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714,0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724, -0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734,0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742, -0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752,0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762, -0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684,0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780, -0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790,0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0, -0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0,0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0, -0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0,0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0, -0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6,0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0, -0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8,0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808, -0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818,0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828, -0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838,0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848, -0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856,0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864, -0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872,0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f, -0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d,0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b, -0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822,0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3, -0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd,0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9, -0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7,0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1, -0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed,0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5, -0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff,0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e, -0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x191f,0xff1a,0x1922,0,0,0,0,0,0,0,0, -0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938,0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0, -0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0,0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971, -0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc, -0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffdc,0,0,0xffdc,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xff01,0xffdc,0,0,0,0,0xff09, -0,0,0,0,0,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x54a,0x14ab,0x54d,0x14b0,0,0,0,0,0,0,0,0,0x550,0,0, -0,0,0,0x14b5,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0xfe07,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x54a,0x14ab,0x54d,0x14b0,0,0,0, +0,0,0,0,0,0x550,0,0,0,0,0,0x14b5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0xfe07,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09, +0xff09,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, +0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,0, +0,0,0,0,0,0,0,0,0,0xff07,0xff09,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x559,0,0,0,0x14c4,0x14c9,0xff09,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xff07,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09,0xff09,0,0,0,0,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0xff07,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xff09,0xff07,0,0,0,0,0,0,0,0,0, -0,0xff07,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x559,0,0,0,0x14c4, -0x14c9,0xff09,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0, 0,0x55f,0xfe00,0x14ce,0x14d3,0xfe00,0x14d8,0,0,0,0xff09,0xff07,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -552,59 +564,65 @@ static const uint16_t norm2_nfc_data_trieIndex[9400]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0, -0,0,0,0,0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16, -0x1a18,0x1a1a,0x1804,0x1a1c,0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35, -0x1a37,0x1a39,0x1a3b,0x187b,0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a, -0x1887,0x1a50,0x1a52,0x1688,0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65, -0x1a67,0x1a6a,0x1a6c,0x1a6e,0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b, -0x1a84,0x1a86,0x1a88,0x1a8a,0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e, -0x1aa0,0x1aa2,0x1aa5,0x1aa7,0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1, -0x1ac3,0x1ac5,0x1ac7,0x1ac7,0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf, -0x181a,0x1ae1,0x1ae3,0x1ae5,0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff, -0x1b01,0x1b03,0x1b06,0x1b08,0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c, -0x1b1f,0x1b22,0x1b24,0x1b26,0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d, -0x18a3,0x1b3d,0x1b3f,0x1820,0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53, -0x1b55,0x1b58,0x1b5a,0x1b5c,0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75, -0x1824,0x1b77,0x1b79,0x1b7c,0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92, -0x1616,0x18b3,0x1b94,0x1b96,0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c, -0x1bae,0x1bb0,0x1bb2,0x1bb4,0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc, -0x1bcf,0x1bd2,0x1bd5,0x1bd7,0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed, -0x1bef,0x1bf1,0x1bf3,0x18bb,0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c, -0x1c0e,0x1c10,0x1c12,0x1c14,0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f, -0x1c32,0x1c34,0x1c36,0x1c38,0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d, -0x1686,0x1c50,0x1c53,0x1c55,0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70, -0x18d3,0x1910,0x1c72,0x1c74,0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88, -0x1c8a,0x184a,0x1c8c,0x1c8e,0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8, -0x1caa,0x1cac,0x1cae,0x1cb0,0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc, -0x1ccf,0x1cd1,0x1856,0x1cd3,0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef, -0x1cf2,0x1cf5,0x1cf8,0x1b16,0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11, -0x16aa,0x1d14,0x1d16,0x1d18,0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31, -0x1d33,0x1d35,0x1d37,0x1d39,0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53, -0x1d55,0x1d57,0x1d59,0x18e5,0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72, -0x1d74,0x1d76,0x1d78,0x1d7a,0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91, -0x1d93,0x1d96,0x1d99,0x1d9b,0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5, -0x1db7,0x1db9,0x1dbb,0x1dbd,0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8, -0x1ddb,0x1ddd,0x1ddf,0x1de1,0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8, -0x1dfa,0x1dfc,0x1901,0x1dff,0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b, -0x1e1d,0x1e1f,0x1e21,0x1e23,0x1e25,0x1e27,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0, -0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff07,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16,0x1a18,0x1a1a,0x1804,0x1a1c, +0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35,0x1a37,0x1a39,0x1a3b,0x187b, +0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a,0x1887,0x1a50,0x1a52,0x1688, +0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65,0x1a67,0x1a6a,0x1a6c,0x1a6e, +0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b,0x1a84,0x1a86,0x1a88,0x1a8a, +0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e,0x1aa0,0x1aa2,0x1aa5,0x1aa7, +0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1,0x1ac3,0x1ac5,0x1ac7,0x1ac7, +0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf,0x181a,0x1ae1,0x1ae3,0x1ae5, +0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff,0x1b01,0x1b03,0x1b06,0x1b08, +0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c,0x1b1f,0x1b22,0x1b24,0x1b26, +0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d,0x18a3,0x1b3d,0x1b3f,0x1820, +0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53,0x1b55,0x1b58,0x1b5a,0x1b5c, +0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75,0x1824,0x1b77,0x1b79,0x1b7c, +0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92,0x1616,0x18b3,0x1b94,0x1b96, +0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c,0x1bae,0x1bb0,0x1bb2,0x1bb4, +0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc,0x1bcf,0x1bd2,0x1bd5,0x1bd7, +0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed,0x1bef,0x1bf1,0x1bf3,0x18bb, +0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c,0x1c0e,0x1c10,0x1c12,0x1c14, +0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f,0x1c32,0x1c34,0x1c36,0x1c38, +0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d,0x1686,0x1c50,0x1c53,0x1c55, +0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70,0x18d3,0x1910,0x1c72,0x1c74, +0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88,0x1c8a,0x184a,0x1c8c,0x1c8e, +0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8,0x1caa,0x1cac,0x1cae,0x1cb0, +0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc,0x1ccf,0x1cd1,0x1856,0x1cd3, +0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef,0x1cf2,0x1cf5,0x1cf8,0x1b16, +0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11,0x16aa,0x1d14,0x1d16,0x1d18, +0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31,0x1d33,0x1d35,0x1d37,0x1d39, +0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53,0x1d55,0x1d57,0x1d59,0x18e5, +0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72,0x1d74,0x1d76,0x1d78,0x1d7a, +0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91,0x1d93,0x1d96,0x1d99,0x1d9b, +0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5,0x1db7,0x1db9,0x1dbb,0x1dbd, +0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8,0x1ddb,0x1ddd,0x1ddf,0x1de1, +0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8,0x1dfa,0x1dfc,0x1901,0x1dff, +0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b,0x1e1d,0x1e1f,0x1e21,0x1e23, +0x1e25,0x1e27,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, +0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0,0,0,0,0, +0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, +0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x56e,0x56e,0x56e,0x56e, 0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, +0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0,0x1e29,0x1e29,0,0x1e29, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0, -0x1e29,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x1e29,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0, 0,0,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0,0x1e29,0,0x1e29,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x1e27,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1e27,0, +0,0,0,0 }; static const uint16_t norm2_nfc_data_extraData[7722]={ @@ -1094,7 +1112,7 @@ static const uint16_t norm2_nfc_data_extraData[7722]={ }; static const uint8_t norm2_nfc_data_smallFCD[256]={ -0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0x87,0x66,0x66,0x46,0x64,0x44,0x66,0x5b, +0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x44,0x66,0x5b, 0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,0xae,0xc2,0xc0,0xff,0xff, 0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0, 0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1114,16 +1132,16 @@ static const uint8_t norm2_nfc_data_smallFCD[256]={ static const UTrie2 norm2_nfc_data_trie={ norm2_nfc_data_trieIndex, - norm2_nfc_data_trieIndex+2612, + norm2_nfc_data_trieIndex+2720, NULL, - 2612, - 6788, + 2720, + 6932, 0x188, - 0xab0, + 0xb1c, 0x0, 0x0, 0x30000, - 0x24b4, + 0x25b0, NULL, 0, FALSE, FALSE, 0, NULL }; diff --git a/deps/icu-small/source/common/norm2allmodes.h b/deps/icu-small/source/common/norm2allmodes.h index 64c84a217c348a..943e83d56704c6 100644 --- a/deps/icu-small/source/common/norm2allmodes.h +++ b/deps/icu-small/source/common/norm2allmodes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/common/normalizer2.cpp b/deps/icu-small/source/common/normalizer2.cpp index af80e98edb89d2..33d94174eb4f95 100644 --- a/deps/icu-small/source/common/normalizer2.cpp +++ b/deps/icu-small/source/common/normalizer2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -201,8 +203,8 @@ static UBool U_CALLCONV uprv_normalizer2_cleanup() { nfcSingleton = NULL; delete noopSingleton; noopSingleton = NULL; - nfcInitOnce.reset(); - noopInitOnce.reset(); + nfcInitOnce.reset(); + noopInitOnce.reset(); return TRUE; } diff --git a/deps/icu-small/source/common/normalizer2impl.cpp b/deps/icu-small/source/common/normalizer2impl.cpp index 84b67b9df02771..be0240eee2a3ce 100644 --- a/deps/icu-small/source/common/normalizer2impl.cpp +++ b/deps/icu-small/source/common/normalizer2impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -1862,7 +1864,7 @@ enumCIDRangeHandler(const void *context, UChar32 start, UChar32 end, uint32_t va // UInitOnce instantiation function for CanonIterData -static void U_CALLCONV +static void U_CALLCONV initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) { U_ASSERT(impl->fCanonIterData == NULL); impl->fCanonIterData = new CanonIterData(errorCode); diff --git a/deps/icu-small/source/common/normalizer2impl.h b/deps/icu-small/source/common/normalizer2impl.h index eb026dbecda12a..a6bf967979f48a 100644 --- a/deps/icu-small/source/common/normalizer2impl.h +++ b/deps/icu-small/source/common/normalizer2impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/normlzr.cpp b/deps/icu-small/source/common/normlzr.cpp index 7c4c54ce368e5e..19c09f096650c7 100644 --- a/deps/icu-small/source/common/normlzr.cpp +++ b/deps/icu-small/source/common/normlzr.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************* - * COPYRIGHT: + * COPYRIGHT: * Copyright (c) 1996-2012, International Business Machines Corporation and * others. All Rights Reserved. ************************************************************************* @@ -86,7 +88,7 @@ Normalizer::~Normalizer() delete text; } -Normalizer* +Normalizer* Normalizer::clone() const { return new Normalizer(*this); @@ -99,7 +101,7 @@ int32_t Normalizer::hashCode() const { return text->hashCode() + fUMode + fOptions + buffer.hashCode() + bufferPos + currentIndex + nextIndex; } - + UBool Normalizer::operator==(const Normalizer& that) const { return @@ -117,9 +119,9 @@ UBool Normalizer::operator==(const Normalizer& that) const //------------------------------------------------------------------------- void U_EXPORT2 -Normalizer::normalize(const UnicodeString& source, +Normalizer::normalize(const UnicodeString& source, UNormalizationMode mode, int32_t options, - UnicodeString& result, + UnicodeString& result, UErrorCode &status) { if(source.isBogus() || U_FAILURE(status)) { result.setToBogus(); @@ -152,17 +154,17 @@ Normalizer::normalize(const UnicodeString& source, } void U_EXPORT2 -Normalizer::compose(const UnicodeString& source, +Normalizer::compose(const UnicodeString& source, UBool compat, int32_t options, - UnicodeString& result, + UnicodeString& result, UErrorCode &status) { normalize(source, compat ? UNORM_NFKC : UNORM_NFC, options, result, status); } void U_EXPORT2 -Normalizer::decompose(const UnicodeString& source, +Normalizer::decompose(const UnicodeString& source, UBool compat, int32_t options, - UnicodeString& result, + UnicodeString& result, UErrorCode &status) { normalize(source, compat ? UNORM_NFKD : UNORM_NFD, options, result, status); } @@ -360,7 +362,7 @@ int32_t Normalizer::endIndex() const { //------------------------------------------------------------------------- void -Normalizer::setMode(UNormalizationMode newMode) +Normalizer::setMode(UNormalizationMode newMode) { fUMode = newMode; init(); @@ -373,8 +375,8 @@ Normalizer::getUMode() const } void -Normalizer::setOption(int32_t option, - UBool value) +Normalizer::setOption(int32_t option, + UBool value) { if (value) { fOptions |= option; @@ -395,7 +397,7 @@ Normalizer::getOption(int32_t option) const * The iteration position is set to the beginning of the input text. */ void -Normalizer::setText(const UnicodeString& newText, +Normalizer::setText(const UnicodeString& newText, UErrorCode &status) { if (U_FAILURE(status)) { @@ -416,8 +418,8 @@ Normalizer::setText(const UnicodeString& newText, * The iteration position is set to the beginning of the string. */ void -Normalizer::setText(const CharacterIterator& newText, - UErrorCode &status) +Normalizer::setText(const CharacterIterator& newText, + UErrorCode &status) { if (U_FAILURE(status)) { return; @@ -455,7 +457,7 @@ Normalizer::setText(const UChar* newText, * @param result Receives a copy of the text under iteration. */ void -Normalizer::getText(UnicodeString& result) +Normalizer::getText(UnicodeString& result) { text->getText(result); } diff --git a/deps/icu-small/source/common/parsepos.cpp b/deps/icu-small/source/common/parsepos.cpp index 26f882051292b8..af6ac6c1f7d1b7 100644 --- a/deps/icu-small/source/common/parsepos.cpp +++ b/deps/icu-small/source/common/parsepos.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2003-2003, International Business Machines diff --git a/deps/icu-small/source/common/patternprops.cpp b/deps/icu-small/source/common/patternprops.cpp index b2c524998667e3..30c3f683914816 100644 --- a/deps/icu-small/source/common/patternprops.cpp +++ b/deps/icu-small/source/common/patternprops.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/patternprops.h b/deps/icu-small/source/common/patternprops.h index 0ceab510a1c071..f309c2dbadb083 100644 --- a/deps/icu-small/source/common/patternprops.h +++ b/deps/icu-small/source/common/patternprops.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/pluralmap.cpp b/deps/icu-small/source/common/pluralmap.cpp index 61c36e4a7f4a3a..fc5f8fc2369625 100644 --- a/deps/icu-small/source/common/pluralmap.cpp +++ b/deps/icu-small/source/common/pluralmap.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines Corporation and * others. All Rights Reserved. @@ -27,7 +29,7 @@ PluralMapBase::Category PluralMapBase::toCategory(const UnicodeString &pluralForm) { CharString cCategory; UErrorCode status = U_ZERO_ERROR; - cCategory.appendInvariantChars(pluralForm, status); + cCategory.appendInvariantChars(pluralForm, status); return U_FAILURE(status) ? NONE : toCategory(cCategory.data()); } @@ -39,3 +41,4 @@ const char *PluralMapBase::getCategoryName(Category c) { U_NAMESPACE_END + diff --git a/deps/icu-small/source/common/pluralmap.h b/deps/icu-small/source/common/pluralmap.h index 63ccf8d31d14f9..76e95c5826003a 100644 --- a/deps/icu-small/source/common/pluralmap.h +++ b/deps/icu-small/source/common/pluralmap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/propname.cpp b/deps/icu-small/source/common/propname.cpp index b638547ff6f801..4107869ee1e0d4 100644 --- a/deps/icu-small/source/common/propname.cpp +++ b/deps/icu-small/source/common/propname.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines diff --git a/deps/icu-small/source/common/propname.h b/deps/icu-small/source/common/propname.h index c20ae45490d9b5..c93d3d75032503 100644 --- a/deps/icu-small/source/common/propname.h +++ b/deps/icu-small/source/common/propname.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines diff --git a/deps/icu-small/source/common/propname_data.h b/deps/icu-small/source/common/propname_data.h index 3acc640b19a9a6..4863b26dc7ec12 100644 --- a/deps/icu-small/source/common/propname_data.h +++ b/deps/icu-small/source/common/propname_data.h @@ -1,104 +1,108 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: propname_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: propname_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp + #ifdef INCLUDED_FROM_PROPNAME_CPP U_NAMESPACE_BEGIN -const int32_t PropNameData::indexes[8]={0x20,0x12d0,0x446f,0x8a58,0x8a58,0x8a58,0x2f,0}; +const int32_t PropNameData::indexes[8]={0x20,0x135c,0x468d,0x8e95,0x8e95,0x8e95,0x2f,0}; -const int32_t PropNameData::valueMaps[1196]={ +const int32_t PropNameData::valueMaps[1231]={ 6,0,0x3d,0,0xd5,0x356,0xd5,0x36c,0xd5,0x381,0xd5,0x397,0xd5,0x3a2,0xd5,0x3c3, 0xd5,0x3d3,0xd5,0x3e2,0xd5,0x3f0,0xd5,0x414,0xd5,0x42b,0xd5,0x443,0xd5,0x45a,0xd5,0x469, 0xd5,0x478,0xd5,0x489,0xd5,0x497,0xd5,0x4a9,0xd5,0x4c3,0xd5,0x4de,0xd5,0x4f3,0xd5,0x510, 0xd5,0x521,0xd5,0x52c,0xd5,0x54b,0xd5,0x561,0xd5,0x572,0xd5,0x582,0xd5,0x59d,0xd5,0x5b6, -0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x62b,0xd5,0x642,0xd5,0x656, -0xd5,0x66c,0xd5,0x680,0xd5,0x696,0xd5,0x6b0,0xd5,0x6c8,0xd5,0x6e4,0xd5,0x6ec,0xd5,0x6f4, -0xd5,0x6fc,0xd5,0x704,0xd5,0x70d,0xd5,0x71a,0xd5,0x72d,0xd5,0x74a,0xd5,0x767,0xd5,0x784, -0xd5,0x7a2,0xd5,0x7c0,0xd5,0x7e4,0xd5,0x7f1,0xd5,0x818,0xd5,0x837,0xd5,0x1000,0x1016,0x860, -0x14f,0xa80,0x16a,0x292f,0xdb,0x294e,0x275,0x2a8c,0x28b,0x2ae6,0x295,0x2d43,0x2b7,0x3458,0x311,0x34c8, -0x31b,0x3756,0x347,0x3794,0x34f,0x40ea,0x3fa,0x4168,0x404,0x418d,0x40a,0x41a7,0x410,0x41c8,0x417,0x41e2, -0xdb,0x4207,0xdb,0x422d,0x41e,0x42b3,0x42f,0x432c,0x442,0x43c9,0x457,0x2000,0x2001,0x4400,0x45e,0x3000, -0x3001,0x448c,0,0x4000,0x400e,0x449e,0,0x44a7,0,0x44c1,0,0x44d2,0,0x44e3,0,0x44f9, -0,0x4502,0,0x451f,0,0x453d,0,0x455b,0,0x4579,0,0x458f,0,0x45a3,0,0x45b9, -0,0x7000,0x7001,0x45d2,0,0x6f5,0x12,0,1,0x12,0x20,0x713,0x49,0,1,7, +0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x637,0xd5,0x64e,0xd5,0x662, +0xd5,0x678,0xd5,0x68c,0xd5,0x6a2,0xd5,0x6bc,0xd5,0x6d4,0xd5,0x6f0,0xd5,0x6f8,0xd5,0x700, +0xd5,0x708,0xd5,0x710,0xd5,0x719,0xd5,0x726,0xd5,0x739,0xd5,0x756,0xd5,0x773,0xd5,0x790, +0xd5,0x7ae,0xd5,0x7cc,0xd5,0x7f0,0xd5,0x7fd,0xd5,0x824,0xd5,0x843,0xd5,0x1000,0x1016,0x86c, +0x14f,0xa8c,0x16a,0x2a61,0xdb,0x2a80,0x280,0x2bbe,0x296,0x2c18,0x2a0,0x2e75,0x2c2,0x35d7,0x31f,0x3647, +0x329,0x38f8,0x358,0x3936,0x360,0x42e5,0x413,0x4363,0x41d,0x4388,0x423,0x43a2,0x429,0x43c3,0x430,0x43dd, +0xdb,0x4402,0xdb,0x4428,0x437,0x44d2,0x44d,0x454b,0x460,0x45e8,0x47a,0x2000,0x2001,0x461f,0x481,0x3000, +0x3001,0x46ab,0,0x4000,0x400e,0x46bd,0,0x46c6,0,0x46e0,0,0x46f1,0,0x4702,0,0x4718, +0,0x4721,0,0x473e,0,0x475c,0,0x477a,0,0x4798,0,0x47ae,0,0x47c2,0,0x47d8, +0,0x7000,0x7001,0x47f1,0,0x702,0x12,0,1,0x12,0x20,0x720,0x49,0,1,7, 8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67, 0x6b,0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2, 0xe4,0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,0x67,0x72,0x7f,0x8c,0x99,0xa6, 0xb3,0xc0,0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,0x135,0x142,0x14f,0x15c,0x169,0x176, 0x183,0x190,0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,0x209,0x218,0x227,0x236,0x245,0x254, -0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x8a5, -1,0,0x17,0x86f,0x880,0x891,0x8a5,0x8bc,0x8d4,0x8e6,0x8fb,0x912,0x927,0x937,0x949,0x966, -0x982,0x994,0x9b1,0x9cd,0x9e9,0x9fe,0xa13,0xa2d,0xa48,0xa63,0xa47,1,0,0x107,0xa8b,0xa98, -0xaab,0xad3,0xaf1,0xb0f,0xb27,0xb52,0xb7c,0xb94,0xba7,0xbba,0xbc9,0xbd8,0xbe7,0xbf6,0xc0d,0xc1e, -0xc31,0xc44,0xc51,0xc5e,0xc6d,0xc7e,0xc93,0xca4,0xcaf,0xcb8,0xcc9,0xcda,0xced,0xcff,0xd12,0xd25, -0xd64,0xd71,0xd7e,0xd8b,0xda0,0xdd0,0xdea,0xe0b,0xe36,0xe59,0xeb7,0xede,0xef9,0xf08,0xf2f,0xf57, -0xf7a,0xf9d,0xfc7,0xfe0,0xfff,0x1022,0x1046,0x1059,0x1073,0x109d,0x10b5,0x10dd,0x1106,0x1119,0x112c,0x113f, -0x1166,0x1175,0x1195,0x11c3,0x11e1,0x120f,0x122b,0x1246,0x125f,0x1278,0x1299,0x12c9,0x12e8,0x130a,0x133e,0x136b, -0x13b0,0x13d1,0x13fb,0x141c,0x1445,0x1458,0x148b,0x14a2,0x14b1,0x14c2,0x14ed,0x1504,0x1535,0x1563,0x15a6,0x15b1, -0x15ea,0x15fb,0x160c,0x1619,0x162c,0x1666,0x168a,0x16ae,0x16e8,0x1720,0x174b,0x1763,0x178f,0x17bb,0x17c8,0x17d7, -0x17f4,0x1816,0x1844,0x1864,0x188b,0x18b2,0x18d1,0x18e4,0x18f5,0x1906,0x192b,0x1950,0x1977,0x19ab,0x19d8,0x19f6, -0x1a09,0x1a22,0x1a5b,0x1a6a,0x1a8a,0x1aac,0x1ace,0x1ae5,0x1afc,0x1b29,0x1b42,0x1b5b,0x1b8c,0x1bb6,0x1bd1,0x1be4, -0x1c03,0x1c0c,0x1c1f,0x1c3d,0x1c5b,0x1c6e,0x1c85,0x1c9a,0x1ccf,0x1cf3,0x1d08,0x1d17,0x1d2a,0x1d4e,0x1d57,0x1d7b, -0x1d92,0x1da5,0x1db4,0x1dbf,0x1de0,0x1df8,0x1e07,0x1e16,0x1e25,0x1e3c,0x1e51,0x1e66,0x1e9f,0x1eb2,0x1ece,0x1ed9, -0x1ee6,0x1f14,0x1f38,0x1f5b,0x1f6e,0x1f90,0x1fa3,0x1fbe,0x1fe1,0x2004,0x2029,0x203a,0x2069,0x2096,0x20ad,0x20c8, -0x20d7,0x2102,0x213a,0x2174,0x21a2,0x21b3,0x21c0,0x21e4,0x21f3,0x220f,0x2229,0x2246,0x227e,0x2293,0x22c0,0x22df, -0x230d,0x232d,0x2361,0x2370,0x239a,0x23bd,0x23e8,0x23f3,0x2404,0x241f,0x2443,0x2450,0x2465,0x248c,0x24b7,0x24ee, -0x2501,0x2512,0x2542,0x2553,0x2562,0x2577,0x2595,0x25a8,0x25bb,0x25d2,0x25ef,0x25fa,0x2603,0x2625,0x263a,0x265f, -0x2676,0x269f,0x26ba,0x26cf,0x26e8,0x2709,0x273e,0x274f,0x2780,0x27a4,0x27b5,0x27ce,0x27d9,0x2806,0x2828,0x2856, -0x2889,0x2898,0x28a9,0x28c6,0x2908,0x1afc,1,0,0x12,0x2965,0x2975,0x2988,0x2998,0x29a8,0x29b7,0x29c7, -0x29d9,0x29ec,0x29fe,0x2a0e,0x2a1e,0x2a2d,0x2a3c,0x2a4c,0x2a59,0x2a68,0x2a7c,0x1bba,1,0,6,0x2aa1, -0x2aac,0x2ab9,0x2ac6,0x2ad3,0x2ade,0x1bfe,1,0,0x1e,0x2afb,0x2b0a,0x2b1f,0x2b34,0x2b49,0x2b5d,0x2b6e, -0x2b82,0x2b95,0x2ba6,0x2bbf,0x2bd1,0x2be2,0x2bf6,0x2c09,0x2c21,0x2c33,0x2c3e,0x2c4e,0x2c5c,0x2c71,0x2c86,0x2c9c, -0x2cb6,0x2ccc,0x2cdc,0x2cf0,0x2d04,0x2d15,0x2d2d,0x1e29,1,0,0x56,0x2d55,0x2d78,0x2d81,0x2d8e,0x2d99, -0x2da2,0x2dad,0x2db6,0x2dcf,0x2dd4,0x2ddd,0x2dfa,0x2e03,0x2e10,0x2e19,0x2e3d,0x2e44,0x2e4d,0x2e60,0x2e6b,0x2e74, -0x2e7f,0x2e98,0x2ea1,0x2eb0,0x2ebb,0x2ec4,0x2ecf,0x2ed8,0x2edf,0x2ee8,0x2ef3,0x2efc,0x2f15,0x2f1e,0x2f2b,0x2f36, -0x2f47,0x2f52,0x2f67,0x2f7e,0x2f87,0x2f90,0x2fa9,0x2fb4,0x2fbd,0x2fc6,0x2fdd,0x2ffa,0x3005,0x3016,0x3021,0x3028, -0x3035,0x3042,0x306f,0x3084,0x308d,0x30a8,0x30cb,0x30ec,0x310d,0x3132,0x3159,0x317a,0x319d,0x31be,0x31e5,0x3206, -0x322b,0x324a,0x3269,0x3288,0x32a5,0x32c6,0x32e7,0x330a,0x332f,0x334e,0x336d,0x338e,0x33b5,0x33da,0x33f9,0x341a, -0x343d,0x20dd,1,0,6,0x3469,0x3478,0x3488,0x3498,0x34a8,0x34b9,0x213b,1,0,0x28,0x34d7, -0x34e3,0x34f1,0x3500,0x350f,0x351f,0x3530,0x3544,0x3559,0x356f,0x3582,0x3596,0x35a6,0x35af,0x35ba,0x35ca,0x35e6, -0x35f8,0x3606,0x3615,0x3621,0x3636,0x364a,0x365d,0x366b,0x367f,0x368d,0x3697,0x36a9,0x36b5,0x36c3,0x36d3,0x36da, -0x36e1,0x36e8,0x36ef,0x36f6,0x370c,0x372d,0x373f,0x237d,1,0,4,0x3767,0x3772,0x377e,0x3788,0x23a3, -1,0,0xa7,0x379f,0x37ac,0x37c1,0x37ce,0x37dd,0x37eb,0x37fa,0x3809,0x381b,0x382a,0x3838,0x3849,0x3858, -0x3867,0x3874,0x3880,0x388f,0x389e,0x38a8,0x38b5,0x38c2,0x38d1,0x38df,0x38ee,0x38fa,0x3904,0x3910,0x3920,0x3930, -0x393e,0x394a,0x395b,0x3967,0x3973,0x3981,0x398e,0x399a,0x39a7,0xca4,0x39b4,0x39c2,0x39dc,0x39e5,0x39f3,0x3a01, -0x3a0d,0x3a1c,0x3a2a,0x3a38,0x3a44,0x3a53,0x3a61,0x3a6f,0x3a7c,0x3a8b,0x3aa6,0x3ab5,0x3ac6,0x3ad7,0x3aea,0x3afc, -0x3b0b,0x3b1d,0x3b2c,0x3b38,0x3b43,0x1db4,0x3b50,0x3b5b,0x3b66,0x3b71,0x3b7c,0x3b97,0x3ba2,0x3bad,0x3bb8,0x3bcb, -0x3bdf,0x3bea,0x3bf9,0x3c08,0x3c13,0x3c1e,0x3c2b,0x3c3a,0x3c48,0x3c53,0x3c6e,0x3c78,0x3c89,0x3c9a,0x3ca9,0x3cba, -0x3cc5,0x3cd0,0x3cdb,0x3ce6,0x3cf1,0x3cfc,0x3d07,0x3d11,0x3d1c,0x3d2c,0x3d37,0x3d45,0x3d52,0x3d5d,0x3d6c,0x3d79, -0x3d86,0x3d95,0x3da2,0x3db3,0x3dc5,0x3dd5,0x3de0,0x3df3,0x3e0a,0x3e18,0x3e25,0x3e30,0x3e3d,0x3e4e,0x3e6a,0x3e80, -0x3e8b,0x3ea8,0x3eb8,0x3ec7,0x3ed2,0x3edd,0x1ece,0x3ee9,0x3ef4,0x3f0c,0x3f1c,0x3f2b,0x3f39,0x3f47,0x3f52,0x3f5d, -0x3f71,0x3f88,0x3fa0,0x3fb0,0x3fc0,0x3fd0,0x3fe2,0x3fed,0x3ff8,0x4002,0x400d,0x401b,0x402e,0x403a,0x4045,0x4050, -0x406c,0x4079,0x4087,0x40a0,0x27ce,0x40af,0x25ef,0x40bc,0x40ca,0x40dc,0x2c00,1,0,6,0x4104,0x4117, -0x4127,0x4135,0x4146,0x4156,0x2c5c,0x12,0,1,0x4180,0x4186,0x2c69,0x12,0,1,0x4180,0x4186, -0x2c76,1,0,3,0x4180,0x4186,0x41bf,0x2c8c,1,0,3,0x4180,0x4186,0x41bf,0x2ca2,1, -0,0xd,0x4249,0x4253,0x425f,0x4266,0x4271,0x4276,0x427d,0x4284,0x428d,0x4292,0x4297,0x42a7,0x373f,0x2d10, -1,0,0xf,0x4249,0x42c6,0x42d0,0x42da,0x42e5,0x3615,0x42ef,0x42fb,0x4303,0x430a,0x4314,0x425f,0x4266, -0x4276,0x431e,0x2d97,1,0,0x11,0x4249,0x433b,0x42da,0x4347,0x4354,0x4362,0x3615,0x436d,0x425f,0x437e, -0x4276,0x438d,0x439b,0x373f,0x372d,0x43a7,0x43b8,0x2e6f,1,0,3,0x43e7,0x43ef,0x43f7,0x2e88,0x36, -1,2,4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00, -0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000, -0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2afb,0x2b0a,0x2b1f,0x2b34,0x442e,0x2b49,0x2b5d,0x4424,0x2b6e,0x2b82, -0x2b95,0x443f,0x2ba6,0x2bbf,0x2bd1,0x4456,0x2be2,0x2bf6,0x2c09,0x447f,0x2c21,0x2c33,0x2c3e,0x2c4e,0x441b,0x2c5c, -0x2c71,0x2c86,0x2c9c,0x2cb6,0x2ccc,0x2cdc,0x2cf0,0x2d04,0x4475,0x2d15,0x2d2d,0x4460 +0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x8b2, +1,0,0x17,0x87b,0x88c,0x89d,0x8b1,0x8c8,0x8e0,0x8f2,0x907,0x91e,0x933,0x943,0x955,0x972, +0x98e,0x9a0,0x9bd,0x9d9,0x9f5,0xa0a,0xa1f,0xa39,0xa54,0xa6f,0xa54,1,0,0x112,0xa97,0xaa4, +0xab7,0xadf,0xafd,0xb1b,0xb33,0xb5e,0xb88,0xba0,0xbb3,0xbc6,0xbd5,0xbe4,0xbf3,0xc02,0xc19,0xc2a, +0xc3d,0xc50,0xc5d,0xc6a,0xc79,0xc8a,0xc9f,0xcb0,0xcbb,0xcc4,0xcd5,0xce6,0xcf9,0xd0b,0xd1e,0xd31, +0xd70,0xd7d,0xd8a,0xd97,0xdac,0xddc,0xdf6,0xe17,0xe42,0xe65,0xec3,0xeea,0xf05,0xf14,0xf3b,0xf63, +0xf86,0xfa9,0xfd3,0xfec,0x100b,0x102e,0x1052,0x1065,0x107f,0x10a9,0x10c1,0x10e9,0x1112,0x1125,0x1138,0x114b, +0x1172,0x1181,0x11a1,0x11cf,0x11ed,0x121b,0x1237,0x1252,0x126b,0x1284,0x12a5,0x12d5,0x12f4,0x1316,0x134a,0x1377, +0x13bc,0x13dd,0x1407,0x1428,0x1451,0x1464,0x1497,0x14ae,0x14bd,0x14ce,0x14f9,0x1510,0x1541,0x156f,0x15b2,0x15bd, +0x15f6,0x1607,0x1618,0x1625,0x1638,0x1672,0x1696,0x16ba,0x16f4,0x172c,0x1757,0x176f,0x179b,0x17c7,0x17d4,0x17e3, +0x1800,0x1822,0x1850,0x1870,0x1897,0x18be,0x18dd,0x18f0,0x1901,0x1912,0x1937,0x195c,0x1983,0x19b7,0x19e4,0x1a02, +0x1a15,0x1a2e,0x1a67,0x1a76,0x1a96,0x1ab8,0x1ada,0x1af1,0x1b08,0x1b35,0x1b4e,0x1b67,0x1b98,0x1bc2,0x1bdd,0x1bf0, +0x1c0f,0x1c18,0x1c2b,0x1c49,0x1c67,0x1c7a,0x1c91,0x1ca6,0x1cdb,0x1cff,0x1d14,0x1d23,0x1d36,0x1d5a,0x1d63,0x1d87, +0x1d9e,0x1db1,0x1dc0,0x1dcb,0x1dec,0x1e04,0x1e13,0x1e22,0x1e31,0x1e48,0x1e5d,0x1e72,0x1eab,0x1ebe,0x1eda,0x1ee5, +0x1ef2,0x1f20,0x1f44,0x1f67,0x1f7a,0x1f9c,0x1faf,0x1fca,0x1fed,0x2010,0x2035,0x2046,0x2075,0x20a2,0x20b9,0x20d4, +0x20e3,0x210e,0x2146,0x2180,0x21ae,0x21bf,0x21cc,0x21f0,0x21ff,0x221b,0x2235,0x2252,0x228a,0x229f,0x22cc,0x22eb, +0x2319,0x2339,0x236d,0x237c,0x23a6,0x23c9,0x23f4,0x23ff,0x2410,0x242b,0x244f,0x245c,0x2471,0x2498,0x24c3,0x24fa, +0x250d,0x251e,0x254e,0x255f,0x256e,0x2583,0x25a1,0x25b4,0x25c7,0x25de,0x25fb,0x2606,0x260f,0x2631,0x2646,0x266b, +0x2682,0x26ab,0x26c6,0x26db,0x26f4,0x2715,0x274a,0x275b,0x278c,0x27b0,0x27c1,0x27da,0x27e5,0x2812,0x2834,0x2862, +0x2895,0x28a4,0x28b5,0x28d2,0x2914,0x293b,0x2948,0x295d,0x2981,0x29a7,0x29e0,0x29f1,0x2a15,0x2a20,0x2a2d,0x2a3c, +0x1b91,1,0,0x12,0x2a97,0x2aa7,0x2aba,0x2aca,0x2ada,0x2ae9,0x2af9,0x2b0b,0x2b1e,0x2b30,0x2b40,0x2b50, +0x2b5f,0x2b6e,0x2b7e,0x2b8b,0x2b9a,0x2bae,0x1c4f,1,0,6,0x2bd3,0x2bde,0x2beb,0x2bf8,0x2c05,0x2c10, +0x1c93,1,0,0x1e,0x2c2d,0x2c3c,0x2c51,0x2c66,0x2c7b,0x2c8f,0x2ca0,0x2cb4,0x2cc7,0x2cd8,0x2cf1,0x2d03, +0x2d14,0x2d28,0x2d3b,0x2d53,0x2d65,0x2d70,0x2d80,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36, +0x2e47,0x2e5f,0x1ebe,1,0,0x59,0x2e87,0x2eaa,0x2eb3,0x2ec0,0x2ecb,0x2ed4,0x2edf,0x2ee8,0x2f01,0x2f06, +0x2f0f,0x2f2c,0x2f35,0x2f42,0x2f4b,0x2f6f,0x2f76,0x2f7f,0x2f92,0x2f9d,0x2fa6,0x2fb1,0x2fca,0x2fd3,0x2fe2,0x2fed, +0x2ff6,0x3001,0x300a,0x3011,0x301a,0x3025,0x302e,0x3047,0x3050,0x305d,0x3068,0x3079,0x3084,0x3099,0x30b0,0x30b9, +0x30c2,0x30db,0x30e6,0x30ef,0x30f8,0x310f,0x312c,0x3137,0x3148,0x3153,0x315a,0x3167,0x3174,0x31a1,0x31b6,0x31bf, +0x31da,0x31fd,0x321e,0x323f,0x3264,0x328b,0x32ac,0x32cf,0x32f0,0x3317,0x3338,0x335d,0x337c,0x339b,0x33ba,0x33d7, +0x33f8,0x3419,0x343c,0x3461,0x3480,0x349f,0x34c0,0x34e7,0x350c,0x352b,0x354c,0x356f,0x358a,0x35a3,0x35be,0x2191, +1,0,6,0x35e8,0x35f7,0x3607,0x3617,0x3627,0x3638,0x21ef,1,0,0x2b,0x3656,0x3662,0x3670, +0x367f,0x368e,0x369e,0x36af,0x36c3,0x36d8,0x36ee,0x3701,0x3715,0x3725,0x372e,0x3739,0x3749,0x3765,0x3777,0x3785, +0x3794,0x37a0,0x37b5,0x37c9,0x37dc,0x37ea,0x37fe,0x380c,0x3816,0x3828,0x3834,0x3842,0x3852,0x3859,0x3860,0x3867, +0x386e,0x3875,0x388b,0x38ac,0x38be,0x38d5,0x38e0,0x38ef,0x2448,1,0,4,0x3909,0x3914,0x3920,0x392a, +0x246e,1,0,0xaf,0x3941,0x394e,0x3963,0x3970,0x397f,0x398d,0x399c,0x39ab,0x39bd,0x39cc,0x39da,0x39eb, +0x39fa,0x3a09,0x3a16,0x3a22,0x3a31,0x3a40,0x3a4a,0x3a57,0x3a64,0x3a73,0x3a81,0x3a90,0x3a9c,0x3aa6,0x3ab2,0x3ac2, +0x3ad2,0x3ae0,0x3aec,0x3afd,0x3b09,0x3b15,0x3b23,0x3b30,0x3b3c,0x3b49,0xcb0,0x3b56,0x3b64,0x3b7e,0x3b87,0x3b95, +0x3ba3,0x3baf,0x3bbe,0x3bcc,0x3bda,0x3be6,0x3bf5,0x3c03,0x3c11,0x3c1e,0x3c2d,0x3c48,0x3c57,0x3c68,0x3c79,0x3c8c, +0x3c9e,0x3cad,0x3cbf,0x3cce,0x3cda,0x3ce5,0x1dc0,0x3cf2,0x3cfd,0x3d08,0x3d13,0x3d1e,0x3d39,0x3d44,0x3d4f,0x3d5a, +0x3d6d,0x3d81,0x3d8c,0x3d9b,0x3daa,0x3db5,0x3dc0,0x3dcd,0x3ddc,0x3dea,0x3df5,0x3e10,0x3e1a,0x3e2b,0x3e3c,0x3e4b, +0x3e5c,0x3e67,0x3e72,0x3e7d,0x3e88,0x3e93,0x3e9e,0x3ea9,0x3eb3,0x3ebe,0x3ece,0x3ed9,0x3ee7,0x3ef4,0x3eff,0x3f0e, +0x3f1b,0x3f28,0x3f37,0x3f44,0x3f55,0x3f67,0x3f77,0x3f82,0x3f95,0x3fac,0x3fba,0x3fc7,0x3fd2,0x3fdf,0x3ff0,0x400c, +0x4022,0x402d,0x404a,0x405a,0x4069,0x4074,0x407f,0x1eda,0x408b,0x4096,0x40ae,0x40be,0x40cd,0x40db,0x40e9,0x40f4, +0x40ff,0x4113,0x412a,0x4142,0x4152,0x4162,0x4172,0x4184,0x418f,0x419a,0x41a4,0x41af,0x41bd,0x41d0,0x41dc,0x41e9, +0x41f4,0x4210,0x421d,0x422b,0x4244,0x27da,0x4253,0x25fb,0x4260,0x426e,0x4280,0x428e,0x429a,0x42aa,0x2a15,0x42b8, +0x42c4,0x42cf,0x42da,0x2d1f,1,0,6,0x42ff,0x4312,0x4322,0x4330,0x4341,0x4351,0x2d7b,0x12,0, +1,0x437b,0x4381,0x2d88,0x12,0,1,0x437b,0x4381,0x2d95,1,0,3,0x437b,0x4381,0x43ba, +0x2dab,1,0,3,0x437b,0x4381,0x43ba,0x2dc1,1,0,0x12,0x4444,0x444e,0x445a,0x4461,0x446c, +0x4471,0x4478,0x447f,0x4488,0x448d,0x4492,0x44a2,0x38be,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x2e6a,1,0, +0xf,0x4444,0x44e5,0x44ef,0x44f9,0x4504,0x3794,0x450e,0x451a,0x4522,0x4529,0x4533,0x445a,0x4461,0x4471,0x453d, +0x2ef1,1,0,0x16,0x4444,0x455a,0x44f9,0x4566,0x4573,0x4581,0x3794,0x458c,0x445a,0x459d,0x4471,0x45ac, +0x45ba,0x38be,0x38ac,0x45c6,0x45d7,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x3001,1,0,3,0x4606,0x460e, +0x4616,0x301a,0x36,1,2,4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200, +0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000, +0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2c2d,0x2c3c,0x2c51,0x2c66,0x464d,0x2c7b,0x2c8f, +0x4643,0x2ca0,0x2cb4,0x2cc7,0x465e,0x2cd8,0x2cf1,0x2d03,0x4675,0x2d14,0x2d28,0x2d3b,0x469e,0x2d53,0x2d65,0x2d70, +0x2d80,0x463a,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,0x4694,0x2e47,0x2e5f,0x467f }; -const uint8_t PropNameData::bytesTries[12703]={ -0,0x15,0x6d,0xc3,0x16,0x73,0xc1,0xea,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1, +const uint8_t PropNameData::bytesTries[13105]={ +0,0x15,0x6d,0xc3,0x23,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1, 0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,0x63, 0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,0x81, 1,0x61,0x24,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c, 0x65,0x63,0x74,0x6f,0x72,0x69,3,0x62,0xc3,0x14,0x68,0x32,0x6f,0x42,0x73,0x13, 0x70,0x61,0x63,0x65,0x5f,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x5f,0x16, -0x72,0x64,0x62,0x72,0x65,0x61,0x6b,0xc3,0x14,0x73,0xa2,0x49,0x74,0xa4,0x2e,0x75, +0x72,0x64,0x62,0x72,0x65,0x61,0x6b,0xc3,0x14,0x73,0xa2,0x49,0x74,0xa4,0x3b,0x75, 3,0x63,0xd9,0x40,0xc,0x69,0x52,0x6e,0x58,0x70,0x12,0x70,0x65,0x72,0x5c,0x13, 0x63,0x61,0x73,0x65,0x5c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xc, 0x12,0x64,0x65,0x6f,0x5b,0x10,0x69,1,0x63,0x3e,0x66,0x1b,0x69,0x65,0x64,0x69, @@ -114,781 +118,807 @@ const uint8_t PropNameData::bytesTries[12703]={ 0x70,0x69,0x6e,0x67,0xd9,0x40,8,0x10,0x63,0xd9,0x40,7,0x62,0xc3,0x13,0x63, 0x34,0x64,0x57,0x65,0x6e,0x66,0x10,0x63,0xd9,0x40,6,0xc2,0xa,2,0x66,0xd9, 0x40,6,0x72,0x28,0x78,0xd9,0x70,0,0x12,0x69,0x70,0x74,0xc2,0xa,0x19,0x65, -0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xd9,0x70,0,1,0x67,0x50,0x6e, -1,0x73,0x3a,0x74,0x18,0x65,0x6e,0x63,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,0x13, -0x14,0x69,0x74,0x69,0x76,0x65,0x65,1,0x6d,0x2e,0x73,0x13,0x74,0x61,0x72,0x74, -0x73,0x19,0x65,0x6e,0x74,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x73,3,0x63,0x66, -0x65,0x72,0x69,0x98,0x72,0x19,0x61,0x69,0x6c,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63, -0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73, -0x73,0xc3,0x11,0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e, -0x69,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59, -0x1d,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9, -0x40,0xa,0x6d,0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64, -0x69,0x63,0x61,0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74, -0xc3,9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61, -0x63,0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d, -0x65,0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0, -0x12,0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98, -0x64,0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd, -0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72, -0x74,0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63, -0x68,0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71, -1,0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe, -0x13,0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17, -0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b, -0xd8,0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68, -0x61,0x72,0x51,1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73, -0x2c,0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1, -0x73,0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79, -0x6e,0x74,0x61,0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f, -0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0, -0xfd,0x69,0xa2,0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98, -0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63, -0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11, -0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74, -0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63, -0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69, -0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61, -0x6b,0xc3,8,1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f, -0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1, -0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70, -0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61, -0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74, -0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63, -0x43,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a, -0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72, -0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86, -0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65, -0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74, -0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10, -0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74, -0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2, -0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e, -0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65, -0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72, -0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65, -0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c, -0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13, -0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0, -0x64,0xa4,0xbd,0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e, -0x64,0x65,0x72,0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69, -0x64,0x74,0x68,0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72, -0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66, -0x69,0x65,0x72,0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c, -0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10, -0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20, -0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69, -0x3e,0x6c,0xa2,0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15, -0x11,0x64,0x69,2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62, -0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15, -0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73, -0xc3,0,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67, -0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3, -1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1, -6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36, -0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18, -0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e, -0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61, -0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c, -0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c, -0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69, -0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61, -0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64, -0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65, -0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61, -0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62, -0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2, -3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2, -0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d, -0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3, -0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63, -0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72, -0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65, -0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72, -0x75,0x65,0x23,0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24, -0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61, -0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e, -3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72, -0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e, -0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3, -0xe0,0x61,0x5c,0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,0x26, -0x73,0xa3,0xf0,0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3, -0xf0,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,0x74, -0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,0x6c, -0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,0x65, -0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,0xd8, -0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,0x72, -0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,2, -0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,0x6c, -0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,0x11, -0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10, -0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47, -0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37, -0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a, -2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36, -0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34, -0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f, -0x32,0x61,0x10,0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75, -0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62, -0x6f,0x76,0x65,0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48, -0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33, -0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74, -0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65, -0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d, -0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74, -0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53, -0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69, -0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d, -0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73, -0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f, -0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61, -0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72, -0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72, -2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68, -0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65, -0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61, -0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65, -0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74, -0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61, -0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73, -0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62, -0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61, -0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69, -0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74, -0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e, -0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x15,0x6d,0xc7,0x44,0x73,0xc3,0x75,0x76, -0x9c,0x76,0x92,0x77,0xa2,0x8b,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17, -0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74, -0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, -0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x61,0x36,0x65, -0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e, -0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2, -0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64, -0x3c,0x72,0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14, -0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3, -0xaf,0x18,0x61,0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b, -0x74,0xa6,0x2b,0x75,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64, -0x63,0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69, -0x6e,0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78, -0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74, -0xa3,0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,7,0x6f,0xc1,0x5b,0x6f, -0x54,0x70,0x68,0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b, -0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f, -0x6d,0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c, -0x73,0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65, -0x72,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d, -0x74,0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6, -0x15,0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16, -0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d, -0x9e,0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64, -0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1, -0x61,0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75, -0x62,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73, -0x1b,0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1, -0x6c,0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, -0xa3,0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70, -0x72,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3, -0x6d,0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d, -0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61, -0x70,0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62, -0xa3,0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63, -0x61,0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e, -0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,0x84,0x69,0xa2, -0x5b,0x6d,0x16,0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16, -0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61, -0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac, -1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d, -0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76, -0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e, -0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75, -0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,4,0x61, -0x68,0x65,0xa2,0x74,0x68,0xa2,0x77,0x69,0xa2,0x7f,0x72,0x1c,0x61,0x6e,0x73,0x70, -0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62, -0x6f,0x6c,0x73,0xa3,0xcf,3,0x67,0x34,0x69,0x5a,0x6b,0xa2,0x46,0x6d,0x11,0x69, -0x6c,0x49,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62, -0x13,0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16, -0x75,0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c, -0x73,0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65, -0x74,0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x13,0x6c,0x75,0x67,0x75,0x4b,0x10,0x61, -1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,0x3c,0x72,0x13, -0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,0x69,0x6e,0x61, -0x67,0x68,0xa3,0x90,0x6d,0x84,0x6e,0xa6,0x1a,0x6f,0xa6,0x4e,0x70,0xa8,2,0x72, -1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,0x69,0xa2,0xc0, -0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3, -0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,6,0x6f,0x76,0x6f,0x6c,0x72,0xa2,0x51, -0x75,0xa2,0x52,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,2, -0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb6, -0x62,0xa3,0xee,1,0x64,0x32,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6b,0x10, -0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19,0x6f,0x6e,0x65, -0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74,0x65,0x72,0x73, -0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2,0x5c,0x18,0x61, -0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61,0x6e,0x69,0xa5, -3,0x61,0xa2,0x9b,0x65,0xa4,0x1f,0x69,1,0x61,0xa2,0x8f,0x73,0x10,0x63,5, -0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61, -0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d, -0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62, -0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d,0x3a,0x73,0x6c, -0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61,0x74,0x1f,0x68, -0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1, -0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61, -0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68, -0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f,0xa3,0xd8,3, -0x68,0xa2,0x4f,0x6c,0xa2,0x65,0x6e,0xa2,0x6a,0x74,0x10,0x68,2,0x61,0x3a,0x65, -0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x16,0x6c,0x70,0x68, -0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,1,0x61, -0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f, -0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, -0xa3,0x5d,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,0xaa,0x14,0x74,0x69,0x6c, -0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,0x15,0x61,0x79,0x61,0x6c, -0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0xea, -0x12,0x61,0x69,0x63,0xa3,0xc6,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74, -0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68, -0x73,0xa3,0xd7,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69, -0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e, -0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75, -0x69,0xa3,0xeb,5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72, -0x66,0x6f,0x72,0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b, -0x21,0x61,0x3a,0x62,0x21,0x65,0x16,0x77,0x74,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b, -0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x43,0x70,0x36,0x72, -0x6a,0x73,0x14,0x6d,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x18,0x74,0x69,0x63,0x61,0x6c, -0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e, -0x69,0x74,0x69,0x6f,0x6e,0x85,1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74, -0x61,0x6c,0x64,0x69,0x6e,0x67,0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47, -0x63,0xa2,0x66,0x67,0xa2,0x66,0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70, -0x36,0x73,0x56,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1, -0x6d,0x2e,0x73,0x12,0x69,0x61,0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f, -0x75,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54, -0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17, -0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63, -0xa3,0x58,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d, -0x65,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63, -0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73, -0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72, -0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61, -0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a, -0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d, -0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61, -0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72, -1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73, -0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15, -0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f, -0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96, -0x67,0xc3,0x8a,0x6a,0xc1,0x81,0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,0x54, -0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,0x69, -0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69, -0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,0x94, -0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,0x29, -0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,0x69, -0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d, -0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65, -0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d, -0x2e,0x6e,0x34,0x73,0x10,0x75,0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61, -0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62, -0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76, -0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61, -1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12, -0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,0x61, -0x3c,0x6d,0x4c,0x6f,0x64,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16, -0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,0x79, -0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x38, -0x6e,0x40,0x74,0x9c,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69, -0xa3,0xc1,3,0x61,0x34,0x62,0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12, -0x73,0x75,0x70,0xa2,0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11, -0x75,0x6e,0xa3,0x42,0x11,0x78,0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c, -0x73,0x97,0x14,0x61,0x6b,0x61,0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f, -0x6f,0x6e,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73, -0xa3,0x6b,0x11,0x78,0x74,0xa3,0x6b,0x67,0xa2,0x84,0x68,0xa4,0x24,0x69,3,0x64, -0x4a,0x6d,0x8e,0x6e,0xa2,0x44,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e, -0x73,0x69,0x6f,0x6e,0x73,0x2b,1,0x63,0x99,0x65,0x1c,0x6f,0x67,0x72,0x61,0x70, -0x68,0x69,0x63,0x64,0x65,0x73,0x63,0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63, -0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61, -0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63, -0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14, -0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69, -0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65, -0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x6b,0x72,0xa2,0x6f,0x75,1,0x6a,0x30,0x72,0x14, -0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c, -0x6f,1,0x6d,0x4e,0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2, -0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x87,0x1a,0x65,0x74,0x72,0x69, -0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65, -0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74, -0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63, -0xa3,0x88,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b, -0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f, -0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3, -0xe4,2,0x61,0xa2,0x48,0x65,0xa2,0xcf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67, -0x61,0x6e,0x61,0x9d,0x10,0x68,1,0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67, -0x61,0x74,0x65,0x73,0xa3,0x4b,1,0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f, -0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73, -0x65,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32, -0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70, -0x77,0x14,0x69,0x64,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69, -0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c, -0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,1, -0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63, -0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f, -0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f, -0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64, -1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9, -0x62,0xa6,0x20,0x63,0xa6,0xe8,0x64,0xac,0x5f,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e, -0x96,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75, -0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74, -0xa2,0x85,1,0x61,0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61, -0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f, -0x73,0x65,0x64,2,0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61, -0x70,0x68,0x69,0x63,0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73, -0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c, -0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74, -0x74,0x65,0x72,0x73,0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61, -0x36,0x67,0x62,0x6c,0x14,0x62,0x61,0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79, -0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f, -0x72,0x6d,0xa5,1,0x10,0x79,0x1f,0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72, -0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xc2,6,0x6e,0xc0,0xe5,0x6e,0x3e,0x72, -0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61, -0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f, -0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d, -0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c, -0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69, -0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2, -0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38, -3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70, -0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65, -0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65, -0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74, -0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e, -0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1, -0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69, -0x69,0x23,0x65,0x98,0x68,0xa2,0x47,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62, -0x65,0x74,0x69,0x63,0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74, -0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d, -0x69,0x63,0x61,0x6c,0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0, -0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,0x6f, -0x6d,0xa3,0xfd,6,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b, -0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61, -0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64, -0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65, -0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68, -0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73, -0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14, -0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x42,0x65,0xa2,0x4b,0x6c,0x1a,0x6f,0x63, -0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,0x6d,0x40,0x73, -0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x93,0x11, -0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,0x65,0x6d,0x65, -0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,0x68,0xa3,0xdd,0x15, -0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,0x41,5,0x6f, -0xc1,0x46,0x6f,0xa2,0x4f,0x75,0xa4,0xa,0x79,1,0x70,0x90,0x72,0x14,0x69,0x6c, -0x6c,0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c, -0x65,0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74, -2,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3, -0x9e,0x62,0xa3,0xa0,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,0x6c,0x61,0x62,0x61, -0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,0xa0,0x75,0x17,0x6e, -0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,0x65,0x72,0x61, -0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,0x61,0x74,0x6a,0x61, -0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,0x46,0x68,0x9e,0x6d, -0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77, -0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,0x72,0x6b,0x73, -0x2e,2,0x65,0x40,0x66,0xa6,0x1b,0x73,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65, -0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe0,0x17,0x61, -0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,0x1f,0x69,0x6e,0x64, -0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,0x1b, -0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,0x83,0x12,0x74,0x69, -0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73, -0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62, -0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,0x98,0x16,0x6e,0x75, -0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74, -0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xda,0x68,0xa4,4,0x6a,0x10, -0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2,0x91,0x73,0xa2,0xa3,0x75, -0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68, -0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,4,0x61,0xa3, -0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,0xa5,0,0x14,0x6f,0x6d, -0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,0x44,0x64,0x17,0x65,0x6f, -0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,0x70,0xa3,0x5f,0x14,0x69, -0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,0x64,0x65,0x6f,0x67,0x72, -0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,0x78,0x74,4,0x61,0xa3, -0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,0xa5,0,0x19,0x61,0x64, -0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,0x6e, -0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,0x6f, -0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,0x69, -0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,0x69, -0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,0x6e, -0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65,0x65,0x60,0x12,0x73,0x75, -0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xff,1,0x6b,0x26, -0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e,0x69,0x7e,0x6f,0xa2,0x5d, -0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x50,0x76,0x16,0x61, -0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,0x14,0x65,0x6e, -0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,1,0x61,0x30,0x6e, -0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c, -0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74, -0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x13,0x6d,0x69, -0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,8,0x6d,0x5f,0x6d, -0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65, -0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28, -0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f, -0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72, -0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61, -0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58, -0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74, -0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69, -0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e, -0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2, -0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10, -0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68, -0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67, -0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27, -0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65, -0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e, -0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70, -0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67, -0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61, -0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53, -0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74, -0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65, -0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64, -0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f, -0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c, -0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65, -0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b, -0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c, -0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d, -0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65, -0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65, -0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66, -0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e, -0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d, -0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79, -0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d, -0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10, -0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, -0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c, -0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28, -0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35, -0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64, -0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b, -0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e, -0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42, -0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f, -0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66, -0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, -0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68, -0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d, -0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12,0x6d,0xc1,0xec,0x73,0xa1, -0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73,0x7a,1,0x61,0x2c,0x68, -0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74,0x22,0x74,0x38,0x77,0x4c, -0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18,0x72,0x61,0x69,0x67,0x68, -0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b,0x61,0x66,0x6d,0x61,0x2e, -0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11,0x68,0x65,0x65,1,0x65, -0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,1,0x61,0x4e,0x65,1, -0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13, -0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,0x61,0x77,0x79,1,0x65, -0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,0x7a,1,0x62,0x34, -0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,0x72,0x72,0x65,0x65, -0x7d,0x6d,0x6c,0x6e,0xa4,0x18,0x70,0xa4,0x35,0x71,0xa4,0x35,0x72,1,0x65,0x38, -0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,1,0x68,0x5f,0x76, -0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61,0x2e,0x65,0xa2,0xeb,0x69, -0x10,0x6d,0x53,0x17,0x6e,0x69,0x63,0x68,0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76, -0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69, -0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11, -0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74, -0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f, -0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64, -0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68, -0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48, -0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66, -0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75, -0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70, -0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64, -0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12, -0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d, -0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x11,0x65,0x6d,0x51,2,0x6f, -0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f, -0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21,0x10,0x6e,0x57,0x10,0x65, -0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,0x7b,0x66,0x42,0x67,0x7a, -0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12,0x61,0x64,0x68,0x4f,2, -0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,0x74,0x68, -0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,0x10,0x61,1, -0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65,0x3e,1,0x68,0x28,0x74, -0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1,0x68,0x3b,0x6d,0x1a,0x7a, -0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d,2,0x61,0x3a,0x68,0x44, -0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b,1,0x66,0x47,0x70,0x10, -0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2c,0x62,0x4c,0x64,0x86,0x65,0x31,1, -0x69,0x38,0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x10,0x6e, -0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,0x69,0x79, -0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,0x68,0x2b, -0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,0x6e,0x2e, -0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,0x6e,0x69, -0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67, -0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,0x63,0x23, -0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e, -0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x25,0x19, -0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,0xc0,0xcd, -0x73,0x46,0x73,0x42,0x75,0x72,0x77,0x7e,0x78,0x96,0x7a,0x10,0x77,0x58,0x14,0x73, -0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57, -0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15, -0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f, -0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50, -0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c, -0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f, -0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c, -0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70, -0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49, -1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69, -0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63, -0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68, -0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74, -0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34, -0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c, -0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65, -0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65, -0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e, -0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66, -0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2, -0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c, -0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61, -0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72, -0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c, -0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27, -0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72, -0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74, -0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a, -0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1, -0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18, -0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b, -0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75, -0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73, -0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,0x10, -0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,1,0x64,0x42, -0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65, -0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d, -0x61,0x6c,0x23,0,0x18,0x6e,0xc3,0x79,0x74,0xc1,0x2f,0x77,0x5d,0x77,0x80,0x78, -0xa2,0x44,0x79,0xa2,0x4e,0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a, -0x7a,0xa3,0x67,0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x30,0x6d,0x34, -0x73,0x11,0x79,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1, -0x61,0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67, -0x63,0x69,0x74,0x69,0xa3,0x92,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11, -0x65,0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xb5,0x76, -1,0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3, -0x63,5,0x67,0x36,0x67,0x68,0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10, -0x68,0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74, -0x61,0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61, -1,0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x56,0x66, -0x11,0x6e,0x67,0x99,6,0x6c,0x1c,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74, -0xa3,0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10, -0x67,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99, -1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75, -2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12, -0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68, -0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67, -0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0,0xef,0x71,0xa2,0xc1, -0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x58,0x79, -1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e, -0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72, -0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61, -0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77, -0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,0x11,0x72,0x61,0xa2,0x98,0x16,0x73,0x6f, -0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65, -0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64, -0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12, -0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61, -0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69, -0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3, -0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e, -0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67, -0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d,0x6e,0xa2,0x83,0x6f, -0xa2,0xbc,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,0x6c,0x74,0x65, -0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,0xa3,0x5c,0x11, -0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,0x6c,0x4e,0x6e, -0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,0xa2,0x5a, -0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,0xa3,0x7c, -0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,0xa5,0x14,0x69, -0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3, -0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,0x11,0x72,0x6d, -0xa3,0x59,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x6a,0x73,0x11,0x68,0x75,0xa3, -0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,0x6e, -0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x16,0x77,0x74,0x61,0x69,0x6c,0x75,0x65,0x97, -1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67, -0x3e,0x6c,0x50,0x72,0xa2,0x7a,0x73,0x11,0x6d,0x61,0x84,0x12,0x6e,0x79,0x61,0x85, -1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,0x6d,0x5b,1,0x63,0xa2,0x55,0x64, -5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0x58, -0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3, -0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x68, -0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e, -0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61, -0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d, -2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,0x68,0xa3, -0x58,0x68,0xc2,0x9c,0x6b,0xc1,0xcf,0x6b,0xa2,0xdc,0x6c,0xa4,0x5d,0x6d,8,0x6f, -0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,0x10,0x72, -0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3, -0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10, -0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2, -0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x34,0x65,0xa0,0x69,0xa2,0x83,0x6c,0x11, -0x79,0x6d,0x55,3,0x68,0x32,0x6c,0x48,0x6e,0x54,0x79,0x10,0x61,0xa3,0x55,1, -0x61,0x26,0x6a,0xa3,0xa0,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61, -0x6c,0x61,0x6d,0x55,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61, -0x6e,0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,2,0x65,0x72,0x6e,0x84, -0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c, -0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75, -0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b, -0xa3,0x73,0x10,0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3, -0x8c,0x11,0x61,0x6f,0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70,0x36,0x74,0x11,0x68, -0x69,0xa3,0x78,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,0x61,0x2e,0x68, -0x98,0x6e,0x11,0x64,0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e,0x48,0x74,0x56,0x79, -0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,0x69,0xa3, -0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,0x6b,0x61,0x6e,0x61, -0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,3,0x61,0x3c, -0x6d,0x4e,0x6f,0x5a,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0x91,0x10,0x72, -0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,1,0x65,0x24,0x72,0x4f,0x10,0x72, -0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61,0x5c,0x65,0x90,0x69, -0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2,0x6c,0x11,0x61,0x6e, -0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2,0x6e,0x42,0x6f,0x46, -0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53,0x10,0x6e,0x53,0x10, -0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52,0x11,0x68,0x61,0xa3, -0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10,0x62,0x80,0x10,0x75, -0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,0x61,0x72,1,0x61,0xa3,0x53,0x62, -0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x60,0x69,0xa2,0x79,0x6a,2,0x61,0x30,0x70, -0x44,0x75,0x11,0x72,0x63,0xa3,0x94,0x11,0x76,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73, -0x65,0xa3,0x4e,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1a,0x6c,0x34,0x6d,0x3a,0x72, -0x40,0x75,0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x11,0x6e,0x67,0xa3, -0x4b,0x11,0x6b,0x74,0x8d,0x61,0x3a,0x65,0x86,0x69,0x11,0x72,0x61,0x48,0x13,0x67, -0x61,0x6e,0x61,0x49,1,0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3, -0xa2,0x42,5,0x73,0xc,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f, -0x77,0x67,0x28,0x69,0x43,0x6f,0x77,0x44,0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46, -0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70, -0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64, -0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70, -0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61, -0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23, -0x64,0xc0,0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f, -0x8e,0x72,0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b, -0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f, -1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90, -0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b, -1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89, -0x12,0x74,0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,0x75,0x11,0x70,0x6c,0xa2, -0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15, -0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,0x11,0x72,0x74, -0x33,2,0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63, -0x37,0x10,0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69, -0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,0x11, -0x62,0x61,0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa2,0xf9, -0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2, -0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69, -0x6f,0x74,0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d, -0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3, -0x65,0x61,0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e, -0x50,0x72,0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e, -0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64, -0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69, -0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f, -0x6b,0x65,0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,5, -0x6e,0x43,0x6e,0x44,0x72,0x6c,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13, -0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68, -0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,0x3e,0x6d, -2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,0x62, -0x24,0x11,0x69,0x63,0x25,0x66,0x30,0x67,0x36,0x68,0x11,0x6f,0x6d,0xa3,0xa1,0x11, -0x61,0x6b,0xa3,0x93,0x11,0x68,0x62,0xa3,0x9f,5,0x6f,0x36,0x6f,0x4e,0x72,0x5e, -0x75,1,0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13, -0x6e,0x65,0x73,0x65,0x8f,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10, -0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69, -0xa3,0x41,0x61,0x2e,0x65,0x82,0x6c,0x11,0x69,0x73,0xa1,3,0x6c,0x3a,0x6d,0x48, -0x73,0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e, -0x65,0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86, -0x13,0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29, -3,0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a, -0x61,0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17, -0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c, -0x65,0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21, -0x6f,0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a, -0x72,0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79, -0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65, -0x73,0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73, -0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e, -0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10, -0x6f,0x21,9,0x72,0x31,0x72,0x34,0x73,0x5c,0x74,0x31,0x76,0x33,0x78,0x10,0x78, -0x21,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64, -0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,0x63,0x69,0x6e, -0x67,0x6d,0x61,0x72,0x6b,0x35,0x63,0x44,0x65,0x5c,0x6c,0x6a,0x6f,0x78,0x70,1, -0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,2,0x6e,0x23,0x6f,0x24,0x72, -0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x23,0x10,0x78,0x26,0x13,0x74,0x65,0x6e,0x64, -0x27,0x28,1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21, -9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10, -0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65, -0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31, -0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65, -0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63, -0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65, -0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24, -0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f, -0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0xd,0x6c,0x76,0x6f,0x36,0x6f,0x30,0x72,0x38, -0x73,0x60,0x78,0x10,0x78,0x21,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x24,0x69, -0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f, -0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,0x65,0x71,0x75,0x6f,0x74, -0x65,0x3f,0x6c,0x50,0x6d,0x56,0x6e,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d, -0x65,0x72,0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,1,0x65,0x23,0x66, -0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e, -0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29, -0x65,0x3d,0x65,0x40,0x66,0x5e,0x68,0x6c,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b, -0x61,0x6e,0x61,0x27,0x10,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75, -0x6d,0x6c,0x65,0x74,0x2f,0x10,0x6f,0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x65, -0x24,0x6c,0x3d,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61, -0x46,0x63,0x52,0x64,1,0x6f,0x24,0x71,0x41,0x18,0x75,0x62,0x6c,0x65,0x71,0x75, -0x6f,0x74,0x65,0x41,0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,2, -0x63,0x32,0x6e,0x3c,0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73, -0x65,0x25,0x20,0x12,0x6f,0x6e,0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c, -0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,0x70, -0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,0xff, -8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf, -0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72, -0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,0x16, -0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,0, -0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,0x70, -0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61, -0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,0x65, -0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,0x73, -0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8, -0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,0, -0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,0, -0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,0x61, -0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,0x64, -0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,0x72, -0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9, -0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,0x6d, -0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67, -0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,1, -3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,8, -0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,0x72, -0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,0, -0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9, -0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4, -0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69, -0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,4, -0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,0x68, -0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,1, -0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,0x70, -0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,0x10, -0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, -0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74, -0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74, -0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,0x72, -0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,0x70, -0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,0x1b, -0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80, -1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,0x72, -0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,0x22, -0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,0x6e, -0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70, -0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,0x62, -0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80, -0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75, -0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,0x74, -0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,0, -0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,0, -0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0 +0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xd9,0x70,0,1,0x67,0x6a,0x6e, +1,0x73,0x54,0x74,0x13,0x65,0x6e,0x63,0x65,1,0x62,0x34,0x74,0x16,0x65,0x72, +0x6d,0x69,0x6e,0x61,0x6c,0x67,0x13,0x72,0x65,0x61,0x6b,0xc3,0x13,0x14,0x69,0x74, +0x69,0x76,0x65,0x65,1,0x6d,0x2e,0x73,0x13,0x74,0x61,0x72,0x74,0x73,0x19,0x65, +0x6e,0x74,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x73,3,0x63,0x66,0x65,0x72,0x69, +0x98,0x72,0x19,0x61,0x69,0x6c,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c, +0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x11, +0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,0x69,0x6e,0x61, +0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,0x1d,0x74,0x6c, +0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d, +0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64,0x69,0x63,0x61, +0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,9,0x75, +0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,0x74,0x65, +0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,0x72,0x69, +0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,0x79,0x70, +0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,0xa2,0x53, +0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,0x17,0x69, +0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,0x6d,1, +0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63, +0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,0x63,0xc3, +0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65, +0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,0x63,0x6b, +0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,0x40,5, +1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,0x72,0x51, +1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73,0x2c,0x74,0x30, +0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,0x38,0x77, +0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,0x74,0x61, +0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61, +0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2, +0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56, +0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65, +0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f, +0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e, +0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f, +0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63, +0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8, +1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65, +0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74, +0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61, +0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f, +0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75, +0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67, +0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e, +0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70, +0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a, +0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f, +0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65, +0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb, +0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e, +0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2, +0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11, +0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12, +0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b, +0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78, +0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72, +0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73, +0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0,0x64,0xa4,0xbd, +0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72, +0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68, +0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72,0x65,0x73,0x65, +0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72, +0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c,0x4e,0x73,0x1a, +0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10,0x65,0xd9,0x40, +0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20,0x14,0x62,0x65, +0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69,0x3e,0x6c,0xa2, +0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15,0x11,0x64,0x69, +2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62,0x72,0x61,0x63, +0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15,0x24,1,0x6c, +0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73,0xc3,0,0x26, +0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79, +0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3,1,0x6f,0x11, +0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1,6,0x68,0x7c, +0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36,0x6c,0x87,0x74, +0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18,0x61,0x6e,0x67, +0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e,0x74,0x98,0x75, +0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61,0x73,0x65,1, +0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c,0x64,0x65,0x64, +0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c,0x66,0x6b,0x63, +0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69,0x74,0x6c,0x65, +0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61,0x2e,0x63,0xa2, +0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64,0x83,0x66,0x3a, +0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65,0x15,0x6f,0x6c, +0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65, +0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69, +0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2,3,0x61,0x30, +0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2,0x63,0x3a,0x66, +0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d,0x6f,0x6d,0x70, +0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3,0x15,0x61,0x75, +0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63,0x6f,0x64,0x65, +0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72,0x69,0x74,0x69, +0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65,0x73,0x23,0x20, +0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72,0x75,0x65,0x23, +0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24,0x72,0x33,0x13, +0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61,0x79,0x23,0xa2, +0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e,3,0x6b,0x2f, +0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72,0x65,0x6f,0x72, +0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e,0x61,0x76,0x6f, +0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3,0xe0,0x61,0x5c, +0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,0x26,0x73,0xa3,0xf0, +0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,0xa2,0xe6, +3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,0x74,0x62,0x7c,0x74, +0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2, +0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14, +0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10, +0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,0x72,0x13,0x69,0x67, +0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c, +0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,0x6c,0x30,0x72,0x13, +0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,0x11,0x63,0x63,4, +0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10,0x31,0xa3,0x5b, +9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47,0x30,0x30,0x31, +0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37,0xa3,0x6b,0x36, +0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a,2,0x30,0xa3, +0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36,0x55,0x37,0x57, +0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34,0x51,6,0x33, +8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f,0x32,0x61,0x10, +0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65, +1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65, +0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,0x77,1,0x68, +0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,0x22,1,0x69, +0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,0x74,0x6f,0x6c, +0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69, +0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,0x15,0x73,0x6f, +0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,0x73,0x65,0x70, +0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,0x70,2,0x61, +0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61, +0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,0x14,0x6f,0x72, +0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61, +0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,0x28,0x73,0x10, +0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x43, +1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x35, +0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,2,0x65,0x37, +0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,0x74,0x20,2, +0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x39,0x17,0x6d, +0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x49, +3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,0x61,0x6e,2, +0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,0x6f,0x72,0x29, +0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72, +0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,0x74,0x72,0x6f, +0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,0x84,0x63,1, +0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,0x72,0x61,0x74, +0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,0x63,1,0x6c, +0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,0x65,0x72,0x3b, +0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,0x65,0x75,0x74, +0x72,0x61,0x6c,0x45,0,0x15,0x6d,0xc7,0x81,0x73,0xc3,0x8b,0x76,0x9c,0x76,0x92, +0x77,0xa2,0x8b,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c, +0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65, +0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16, +0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x61,0x36,0x65,0x7a,0x73,0xa2, +0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74, +0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73, +0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19, +0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65, +0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,0x18,0x61, +0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b,0x74,0xa6,0x2b, +0x75,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e, +0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c, +0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e, +0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,0xad,0x15, +0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,7,0x6f,0xc1,0x5b,0x6f,0x54,0x70,0x68, +0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b,0x17,0x6f,0x74, +0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f,0x6d,0x70,0x65, +0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56, +0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65, +0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,0x6f,0x6e, +0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,0x64,0x61, +0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,0x70,0xa2, +0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63, +0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,0x4e,0x73, +0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,0x73,0x63, +0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,0x61,0x74, +0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,0x40,0x75, +1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15, +0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76, +0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3, +0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f, +0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73, +0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,0x68,0x63, +0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x6f, +0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,0x74,0x75, +0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,0x84,0x69,0xa2,0x5b,0x6d,0x16, +0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69, +0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74, +0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52, +0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63, +0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61, +0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61, +0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65, +0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,4,0x61,0x68,0x65,0xa2, +0x8a,0x68,0xa2,0x8d,0x69,0xa2,0x95,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74, +0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0xa3,0xcf,4,0x67,0x58,0x69,0x7e,0x6b,0xa2,0x58,0x6d,0xa2,0x5a,0x6e,0x12,0x67, +0x75,0x74,0xa4,0x10,0x19,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5, +0x11,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13, +0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75, +0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74, +0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x49,0x13,0x6c,0x75,0x67,0x75, +0x4b,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66, +0x3c,0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14, +0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,0x6d,0x84,0x6e,0xa6,0x34,0x6f,0xa6,0x6d,0x70, +0xa8,0x29,0x72,1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10, +0x69,0xa2,0xc0,0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,6,0x6f,0x86,0x6f,0x6c, +0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65, +0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1, +0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61, +0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74, +0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19, +0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74, +0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2, +0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61, +0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x29,0x69,1,0x61,0xa2,0x8f,0x73, +0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e, +0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66, +0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61, +0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d, +0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61, +0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72, +0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f, +0xa3,0xd8,4,0x68,0xa2,0x52,0x6c,0xa2,0x68,0x6e,0xa2,0x6d,0x72,0xa2,0x7d,0x74, +0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72, +0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74, +0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72, +0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73, +0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67, +0xa2,0xaa,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3, +0xe9,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68, +0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,0x13,0x63,0x68,0x65, +0x6e,0xa5,0xc,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1, +0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7, +0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69,0x6d,0x61,0x79, +0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f, +0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb, +5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72, +0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44, +0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65, +0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x4b,0x70, +0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x11, +0x67,0x65,0xa5,0xf,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61, +0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85, +1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67, +0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,0x63,0xa2,0x66,0x67,0xa2,0x66, +0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70,0x36,0x73,0x56,0x74,0x14,0x75, +0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61, +0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61, +0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68, +0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,0x75,0x6e,0x67,0x61,0x72,0x69, +0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,0xa3,0x58,0x13,0x68,0x69,0x6b, +0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,5,0x72,0x35,0x72,0x44, +0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72, +0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76, +0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61, +0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68, +0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15, +0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e, +0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75, +0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e, +0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69, +0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96,0x67,0xc3,0xb9,0x6a,0xc1,0x81, +0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78, +0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69, +0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11, +0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7, +0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95, +0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24, +0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70, +0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c, +0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d,0x2e,0x6e,0x34,0x73,0x10,0x75, +0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62, +1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17, +0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72, +0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61, +0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3, +0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,0x61,0x3c,0x6d,0x4c,0x6f,0x64,0x75, +0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68, +0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3, +0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x38,0x6e,0x40,0x74,0x9c,0x79,0x13, +0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62, +0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12,0x73,0x75,0x70,0xa2,0xcb,0x16, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78, +0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61, +0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63, +0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3, +0x6b,0x67,0xa2,0xa3,0x68,0xa4,0x53,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2, +0x62,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73, +0x2b,1,0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64, +0x56,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70, +0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63, +0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65, +0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69, +0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, +0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd, +0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72, +0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b, +0x72,0xa2,0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14, +0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67, +0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65, +0x6e,0x74,0xa3,0x87,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73, +0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e, +0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71, +0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4, +0xa,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63, +0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78, +0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74, +0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2, +0xcf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1, +0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1, +0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c, +0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67, +0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e, +0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61, +0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d, +0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3, +0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,1,0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f, +0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c, +0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62, +0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c, +0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9, +0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64, +0xac,0x7b,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,0x69,0x6f,0x70, +0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65, +0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63, +0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63, +0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70, +0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68, +0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72, +0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3, +0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64, +0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x36,0x67,0x62,0x6c,0x14,0x62,0x61, +0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74, +0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x10,0x79,0x1f, +0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73, +0xa3,0xc2,7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14, +0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74, +1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65, +0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13, +0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f, +0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f, +0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12, +0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2, +0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3, +0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3, +0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c, +0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74, +0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14, +0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42, +0x68,0xa2,0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63, +0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f, +0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c, +0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d, +0xa5,7,0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77, +0x11,0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58, +0x79,0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b, +0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78, +0x16,0x64,0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0, +0x12,0x65,0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61, +1,0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72, +0x6e,0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3, +0x64,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2, +0x52,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3, +0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65, +0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76, +0x61,0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61, +0x6c,0x69,0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1, +0x4c,0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c, +0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3, +0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2, +0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79, +0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70, +0xa2,0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e, +0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70, +0x15,0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2, +0x64,0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d, +0x62,0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c, +0x6d,0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x1b,0x73,0x18,0x75,0x70, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65, +0x64,0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f, +0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72, +0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65, +0x73,0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75, +0x6d,0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63, +0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d, +0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64, +0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xda, +0x68,0xa4,4,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2, +0x91,0x73,0xa2,0xa3,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f, +0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69, +0x6f,0x6e,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65, +0xa5,0,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62, +0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75, +0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18, +0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70, +0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11, +0x78,0x74,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65, +0xa5,0,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70, +0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c, +0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75, +0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3, +0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73, +0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65, +0x65,0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74, +0xa3,0xff,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e, +0x69,0x7e,0x6f,0xa2,0x5d,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1, +0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74, +0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3, +0x5a,1,0x61,0x30,0x6e,0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69, +0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70, +0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c, +0x73,0x77,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3, +0xab,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69, +0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62, +0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10, +0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d, +0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1, +0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63, +0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f, +0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c, +0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10, +0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27, +0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74, +0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4, +0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22, +0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77, +0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25, +0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72, +0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49, +0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75, +0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69, +0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74, +0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61, +0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65, +0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73, +0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66, +0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75, +0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72, +0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33, +0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72, +0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70, +0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b, +0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, +0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60, +0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c, +0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29, +0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72, +0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74, +0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63, +0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74, +0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74, +0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75, +0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f, +0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e, +0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75, +0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12, +0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f, +0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74, +0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69, +0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, +0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12, +0x6d,0xc1,0xec,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73, +0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74, +0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18, +0x72,0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b, +0x61,0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11, +0x68,0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67, +1,0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62, +0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11, +0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10, +0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14, +0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x18,0x70,0xa4,0x35,0x71,0xa4, +0x35,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68, +0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61, +0x2e,0x65,0xa2,0xeb,0x69,0x10,0x6d,0x53,0x17,0x6e,0x69,0x63,0x68,0x61,0x65,0x61, +0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42, +0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65, +0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a, +0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e, +0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77, +0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a, +0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3, +0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68, +0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c, +0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68, +0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44, +0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79, +0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,1,0x61, +0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x11, +0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f, +0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21, +0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66, +0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12, +0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65, +0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10, +0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65, +0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1, +0x68,0x3b,0x6d,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d, +2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b, +1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2e,0x62,0x8a, +0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,0x65,0x10, +0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,0x30,0x6e, +0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,0x6f,0x6e, +0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61, +0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29, +0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68, +0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a, +0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69, +0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e, +0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f, +0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69, +0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0, +0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,0x7a,0x10, +0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67, +0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72, +0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a, +0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e, +0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f, +0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72, +0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72, +0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61, +0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74, +0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69, +0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78, +0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74, +0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65, +0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d, +4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e, +0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28, +0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d, +0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62, +0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c, +0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64, +0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11, +0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75, +0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27, +0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e, +0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1, +0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51, +0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74, +0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74, +0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74, +0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f, +0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b, +0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61, +0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65, +0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72, +0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,0x63,0x6c, +0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,0x72,0x16, +0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,0x32,0x75, +0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,0x2e,0x69, +0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,0,0x18, +0x6e,0xc3,0x95,0x74,0xc1,0x38,0x77,0x61,0x77,0x88,0x78,0xa2,0x48,0x79,0xa2,0x52, +0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x11,0x78, +0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x38,0x6d,0x3c,0x73,0x10,0x79,1,0x65, +0xa3,0xae,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1,0x61, +0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63, +0x69,0x74,0x69,0xa3,0x92,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65, +0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xba,0x76,1, +0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63, +5,0x67,0x36,0x67,0x68,0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68, +0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61, +0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1, +0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11, +0x6e,0x67,0x99,6,0x6c,0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3, +0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67, +0xa2,0x9a,0x11,0x75,0x74,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99, +0x10,0x69,0xa3,0x99,1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12, +0x6c,0x6f,0x67,0x75,2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f, +0x10,0x65,0x89,0x12,0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3, +0x62,0x10,0x75,0x68,0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f, +0x77,0x6e,0xa3,0x67,0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0, +0xef,0x71,0xa2,0xc1,0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c, +0x75,0xa2,0x58,0x79,1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c, +0x6a,0xa3,0x60,0x6e,0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69, +0x6e,0x61,0x67,0x72,0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91, +0x68,0x62,0x12,0x61,0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3, +0xa6,0x17,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,0x11,0x72,0x61,0xa2, +0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71, +0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61, +0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64, +0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72, +0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3, +0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85, +0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e, +0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13, +0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d, +0x6e,0xa2,0x83,0x6f,0xa2,0xc1,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b, +0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72, +0x64,0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61, +0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b, +0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3, +0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63, +0xa2,0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d, +0x6f,0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3, +0x90,0x11,0x72,0x6d,0xa3,0x59,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x74,0x73, +0x11,0x68,0x75,0xa3,0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74, +0x61,0x65,0x61,0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x10,0x77,1,0x61,0xa3, +0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,1,0x67,0x2e,0x6f,0xa2,0x57,0x10, +0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,0x73, +2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67, +0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10, +0x6d,0x5b,1,0x63,0xa2,0x55,0x64,5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,0x14, +0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69, +0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61, +0x62,0x69,0x61,0x6e,0xa3,0x85,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68, +0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69, +0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3, +0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f, +0x11,0x79,0x61,0x5f,0x10,0x68,0xa3,0x58,0x68,0xc2,0xb3,0x6b,0xc1,0xdc,0x6b,0xa2, +0xe9,0x6c,0xa4,0x6a,0x6d,8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86, +0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64, +0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14, +0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65, +0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36, +0x65,0xa2,0x4c,0x69,0xa2,0x8f,0x6c,0x11,0x79,0x6d,0x55,4,0x68,0x36,0x6c,0x4c, +0x6e,0x58,0x72,0x82,0x79,0x10,0x61,0xa3,0x55,1,0x61,0x26,0x6a,0xa3,0xa0,0x13, +0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x64, +0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0x79,0xa2,0x54,0x12, +0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,0xa3,0xa9,2, +0x65,0x72,0x6e,0x84,0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69, +0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73, +0xa3,0x56,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d, +0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61, +0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,0x6f,0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70, +0x36,0x74,0x11,0x68,0x69,0xa3,0x78,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3, +0x8a,0x61,0x2e,0x68,0x98,0x6e,0x11,0x64,0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e, +0x48,0x74,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3, +0x78,0x10,0x69,0xa3,0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61, +0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61, +0x8d,3,0x61,0x3c,0x6d,0x4e,0x6f,0x5a,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69, +0xa3,0x91,0x10,0x72,0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,1,0x65,0x24, +0x72,0x4f,0x10,0x72,0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61, +0x5c,0x65,0x90,0x69,0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2, +0x6c,0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2, +0x6e,0x42,0x6f,0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53, +0x10,0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52, +0x11,0x68,0x61,0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10, +0x62,0x80,0x10,0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,0x61,0x72,1, +0x61,0xa3,0x53,0x62,0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x6e,0x69,0xa2,0x83,0x6a, +2,0x61,0x30,0x70,0x52,0x75,0x11,0x72,0x63,0xa3,0x94,1,0x6d,0x38,0x76,0x10, +0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,0xa3,0x4e,0x10,0x6f,0xa3,0xad,0x11,0x61, +0x6e,0xa3,0x69,6,0x6c,0x1a,0x6c,0x34,0x6d,0x3a,0x72,0x40,0x75,0x11,0x6e,0x67, +0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x11,0x6e,0x67,0xa3,0x4b,0x11,0x6b,0x74,0x8d, +0x61,0x3a,0x65,0x8c,0x69,0x11,0x72,0x61,0x48,0x13,0x67,0x61,0x6e,0x61,0x49,1, +0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3,0xa2,0x42,6,0x6f,0xe, +0x6f,0x77,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f,0x77,0x62,0xa3, +0xac,0x67,0x24,0x69,0x43,0x44,0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46,0x11,0x65, +0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70,0x65,0x72, +0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64,0x66,0x68, +0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1, +0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61,0x76,0x69, +0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23,0x64,0xc0, +0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f,0x8e,0x72, +0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69, +0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f,1,0x6b, +0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,0x6f, +0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x61, +0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74, +0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,0x75,0x11,0x70,0x6c,0xa2,0x87,0x13, +0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61, +0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,0x11,0x72,0x74,0x33,2, +0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10, +0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e, +0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,0x11,0x62,0x61, +0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa4,7,0x63,6, +0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a, +0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74, +0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e, +0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61, +0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72, +0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61, +0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61, +0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68, +0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65, +0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,6,0x68,0x4a, +0x68,0x48,0x6e,0x4e,0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13, +0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f, +0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3, +0x9c,1,0x61,0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69, +0x61,0x6e,0x27,0x10,0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11, +0x68,0x62,0xa3,0x9f,0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7, +0x11,0x61,0x6b,0xa3,0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1, +0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65, +0x73,0x65,0x8f,0x11,0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f, +0x2b,0x10,0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11, +0x6d,0x69,0xa3,0x41,0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3, +0xa8,0x15,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73, +0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65, +0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13, +0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3, +0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61, +0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73, +0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65, +0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f, +0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72, +0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22, +0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73, +0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23, +0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a, +0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f, +0x21,0xb,0x72,0x39,0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10, +0x78,0x21,0x72,0x28,0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69, +0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d, +0x35,0x70,0x18,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c, +0x3c,0x6f,0x4a,0x70,1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28, +1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c, +0x65,0x64,0x67,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a, +0x77,0x6a,0x41,0x10,0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74, +0x72,0x6f,0x6c,0x23,2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64, +0x27,0x3a,1,0x61,0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d, +0x3e,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f, +0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72, +0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74, +0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d, +0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10, +0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c, +2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12, +0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10, +0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74, +0x27,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,0x73,0x5a,0x78,0x76,0x7a,0x11,0x77,0x6a, +0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64, +0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c, +0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76, +0x6f,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69, +0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12, +0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39, +0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39, +0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b, +0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a, +0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49, +1,0x65,0x24,0x6c,0x3d,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72, +0x3d,0x61,0x86,0x63,0x92,0x64,0x94,0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13, +0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61, +0x24,0x67,0x45,0x11,0x73,0x65,0x42,0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64, +0x69,0x66,0x69,0x65,0x72,0x47,0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72, +0x31,1,0x6f,0x24,0x71,0x41,0x18,0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65, +0x41,2,0x63,0x32,0x6e,0x3c,0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c, +0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,0x6e,0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8, +0x73,0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20, +0,0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c, +0x6f,0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c, +0xff,0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d, +0x61,0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3, +0,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0, +0,0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0, +0x16,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65, +0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c, +0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61, +0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe, +0x30,0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80, +0,0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8, +0,0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69, +0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0, +0,0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0, +0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f, +0x72,0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75, +0x13,0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69, +0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6, +0x80,1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c, +0xff,8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62, +0x65,0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd, +0x80,0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79, +0x6d,0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15, +0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c, +0xff,4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74, +0x16,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5, +0xc0,1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61, +0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0, +0,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61, +0x74,0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f, +0x28,0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65, +0x74,0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74, +0x65,0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73, +0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96, +0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80, +0xe6,0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b, +0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0, +0,0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e, +1,0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f, +0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0, +0x19,0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63, +0xd9,0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63, +0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c, +0x65,0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74, +0xa7,0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, +0xe9,0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7, +0 }; -const char PropNameData::nameGroups[17897]={ +const char PropNameData::nameGroups[18440]={ 2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0, 4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0, 2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0, @@ -954,8 +984,9 @@ const char PropNameData::nameGroups[17897]={ 2,'X','I','D','C',0,'X','I','D','_','C','o','n','t','i','n','u','e',0, 2,'X','I','D','S',0,'X','I','D','_','S','t','a','r','t',0, 2,'S','e','n','s','i','t','i','v','e',0,'C','a','s','e','_','S','e','n','s','i','t','i','v','e',0, -2,'S','T','e','r','m',0,'S','T','e','r','m',0,2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e','c', -'t','o','r',0,2,'n','f','d','i','n','e','r','t',0,'N','F','D','_','I','n','e','r','t',0, +2,'S','T','e','r','m',0,'S','e','n','t','e','n','c','e','_','T','e','r','m','i','n','a','l',0, +2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e','c','t','o','r',0, +2,'n','f','d','i','n','e','r','t',0,'N','F','D','_','I','n','e','r','t',0, 2,'n','f','k','d','i','n','e','r','t',0,'N','F','K','D','_','I','n','e','r','t',0, 2,'n','f','c','i','n','e','r','t',0,'N','F','C','_','I','n','e','r','t',0, 2,'n','f','k','c','i','n','e','r','t',0,'N','F','K','C','_','I','n','e','r','t',0, @@ -1297,6 +1328,17 @@ const char PropNameData::nameGroups[17897]={ 's',0,'S','u','p','p','l','e','m','e','n','t','a','l','_','S','y','m','b','o','l','s','_','A','n','d','_','P','i','c','t','o', 'g','r','a','p','h','s',0,2,'S','u','t','t','o','n','_','S','i','g','n','W','r','i','t','i','n','g',0, 'S','u','t','t','o','n','_','S','i','g','n','W','r','i','t','i','n','g',0, +2,'A','d','l','a','m',0,'A','d','l','a','m',0,2,'B','h','a','i','k','s','u','k','i',0, +'B','h','a','i','k','s','u','k','i',0,2,'C','y','r','i','l','l','i','c','_','E','x','t','_','C',0, +'C','y','r','i','l','l','i','c','_','E','x','t','e','n','d','e','d','_','C',0, +2,'G','l','a','g','o','l','i','t','i','c','_','S','u','p',0,'G','l','a','g','o','l','i','t','i','c','_','S','u','p','p','l', +'e','m','e','n','t',0,2,'I','d','e','o','g','r','a','p','h','i','c','_','S','y','m','b','o','l','s',0, +'I','d','e','o','g','r','a','p','h','i','c','_','S','y','m','b','o','l','s','_','A','n','d','_','P','u','n','c','t','u','a','t', +'i','o','n',0,2,'M','a','r','c','h','e','n',0,'M','a','r','c','h','e','n',0, +2,'M','o','n','g','o','l','i','a','n','_','S','u','p',0,'M','o','n','g','o','l','i','a','n','_','S','u','p','p','l','e','m', +'e','n','t',0,2,'N','e','w','a',0,'N','e','w','a',0,2,'O','s','a','g','e',0,'O','s','a','g','e',0, +2,'T','a','n','g','u','t',0,'T','a','n','g','u','t',0,2,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t', +'s',0,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t','s',0, 2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n','g','_','C','l','a','s','s',0, 2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0, 3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0, @@ -1415,6 +1457,9 @@ const char PropNameData::nameGroups[17897]={ 2,'M','a','n','i','c','h','a','e','a','n','_','Y','o','d','h',0,'M','a','n','i','c','h','a','e','a','n','_','Y','o','d','h', 0,2,'M','a','n','i','c','h','a','e','a','n','_','Z','a','y','i','n',0,'M','a','n','i','c','h','a','e','a','n','_','Z','a', 'y','i','n',0,2,'S','t','r','a','i','g','h','t','_','W','a','w',0,'S','t','r','a','i','g','h','t','_','W','a','w',0, +2,'A','f','r','i','c','a','n','_','F','e','h',0,'A','f','r','i','c','a','n','_','F','e','h',0, +2,'A','f','r','i','c','a','n','_','N','o','o','n',0,'A','f','r','i','c','a','n','_','N','o','o','n',0, +2,'A','f','r','i','c','a','n','_','Q','a','f',0,'A','f','r','i','c','a','n','_','Q','a','f',0, 2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0, 2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0, 2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0, @@ -1449,7 +1494,8 @@ const char PropNameData::nameGroups[17897]={ 's','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a', 'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0, 2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0, -2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0, +2,'E','B',0,'E','_','B','a','s','e',0,2,'E','M',0,'E','_','M','o','d','i','f','i','e','r',0, +2,'Z','W','J',0,'Z','W','J',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0, 2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0, 2,'D','i',0,'D','i','g','i','t',0,2,'N','u',0,'N','u','m','e','r','i','c',0, 2,'s','c',0,'S','c','r','i','p','t',0,2,'Z','y','y','y',0,'C','o','m','m','o','n',0, @@ -1543,15 +1589,19 @@ const char PropNameData::nameGroups[17897]={ 2,'A','f','a','k',0,'A','f','a','k',0,2,'J','u','r','c',0,'J','u','r','c',0, 2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','s','h','u',0, 2,'S','h','r','d',0,'S','h','a','r','a','d','a',0,2,'S','o','r','a',0,'S','o','r','a','_','S','o','m','p','e','n','g', -0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g',0, +0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g','u','t',0, 2,'W','o','l','e',0,'W','o','l','e',0,2,'H','l','u','w',0,'A','n','a','t','o','l','i','a','n','_','H','i','e','r','o', 'g','l','y','p','h','s',0,2,'K','h','o','j',0,'K','h','o','j','k','i',0, 2,'T','i','r','h',0,'T','i','r','h','u','t','a',0,2,'A','g','h','b',0,'C','a','u','c','a','s','i','a','n','_','A','l', 'b','a','n','i','a','n',0,2,'M','a','h','j',0,'M','a','h','a','j','a','n','i',0, 2,'H','a','t','r',0,'H','a','t','r','a','n',0,2,'M','u','l','t',0,'M','u','l','t','a','n','i',0, 2,'P','a','u','c',0,'P','a','u','_','C','i','n','_','H','a','u',0, -2,'S','i','d','d',0,'S','i','d','d','h','a','m',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b', -'l','e','_','T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0, +2,'S','i','d','d',0,'S','i','d','d','h','a','m',0,2,'A','d','l','m',0,'A','d','l','a','m',0, +2,'B','h','k','s',0,'B','h','a','i','k','s','u','k','i',0, +2,'M','a','r','c',0,'M','a','r','c','h','e','n',0,2,'O','s','g','e',0,'O','s','a','g','e',0, +2,'H','a','n','b',0,'H','a','n','b',0,2,'J','a','m','o',0,'J','a','m','o',0, +2,'Z','s','y','e',0,'Z','s','y','e',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_', +'T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0, 2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0, 2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0, 2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0, @@ -1568,7 +1618,9 @@ const char PropNameData::nameGroups[17897]={ 2,'E','X',0,'E','x','t','e','n','d',0,2,'L',0,'L',0, 2,'L','F',0,'L','F',0,2,'L','V',0,'L','V',0,2,'L','V','T',0,'L','V','T',0, 2,'T',0,'T',0,2,'V',0,'V',0,2,'S','M',0,'S','p','a','c','i','n','g','M','a','r','k',0, -2,'P','P',0,'P','r','e','p','e','n','d',0,2,'S','B',0,'S','e','n','t','e','n','c','e','_','B','r','e','a','k',0, +2,'P','P',0,'P','r','e','p','e','n','d',0,2,'E','B','G',0,'E','_','B','a','s','e','_','G','A','Z',0, +2,'G','A','Z',0,'G','l','u','e','_','A','f','t','e','r','_','Z','w','j',0, +2,'S','B',0,'S','e','n','t','e','n','c','e','_','B','r','e','a','k',0, 2,'A','T',0,'A','T','e','r','m',0,2,'C','L',0,'C','l','o','s','e',0, 2,'F','O',0,'F','o','r','m','a','t',0,2,'L','O',0,'L','o','w','e','r',0, 2,'L','E',0,'O','L','e','t','t','e','r',0,2,'S','E',0,'S','e','p',0, diff --git a/deps/icu-small/source/common/propsvec.c b/deps/icu-small/source/common/propsvec.c index f91a155cf8da0d..ed4d89954b872f 100644 --- a/deps/icu-small/source/common/propsvec.c +++ b/deps/icu-small/source/common/propsvec.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -218,7 +220,7 @@ upvec_setValue(UPropsVectors *pv, *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return; } - uprv_memcpy(newVectors, pv->v, rows*columns*4); + uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4); firstRow=newVectors+(firstRow-pv->v); lastRow=newVectors+(lastRow-pv->v); uprv_free(pv->v); @@ -240,7 +242,7 @@ upvec_setValue(UPropsVectors *pv, if(splitFirstRow) { /* copy all affected rows up one and move the lastRow pointer */ count = (int32_t)((lastRow-firstRow)+columns); - uprv_memmove(firstRow+columns, firstRow, count*4); + uprv_memmove(firstRow+columns, firstRow, (size_t)count*4); lastRow+=columns; /* split the range and move the firstRow pointer */ @@ -251,7 +253,7 @@ upvec_setValue(UPropsVectors *pv, /* split the last row */ if(splitLastRow) { /* copy the last row data */ - uprv_memcpy(lastRow+columns, lastRow, columns*4); + uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4); /* split the range and move the firstRow pointer */ lastRow[1]=lastRow[columns]=(uint32_t)limit; @@ -415,7 +417,7 @@ upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UE /* add a new values vector if it is different from the current one */ if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) { count+=valueColumns; - uprv_memmove(pv->v+count, row+2, valueColumns*4); + uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4); } if(startd_name; if (uprv_strcmp(dirName, SKIP1) != 0 && uprv_strcmp(dirName, SKIP2) != 0) { /* Create a newpath with the new entry to test each entry in the directory. */ - char newpath[MAX_PATH_SIZE]; - uprv_strcpy(newpath, curpath); - uprv_strcat(newpath, dirName); + CharString newpath(curpath, status); + newpath.append(dirName, -1, status); + if (U_FAILURE(status)) { + return NULL; + } - if ((subDirp = opendir(newpath)) != NULL) { + if ((subDirp = opendir(newpath.data())) != NULL) { /* If this new path is a directory, make a recursive call with the newpath. */ closedir(subDirp); - uprv_strcat(newpath, "/"); - result = searchForTZFile(newpath, tzInfo); + newpath.append('/', status); + if (U_FAILURE(status)) { + return NULL; + } + result = searchForTZFile(newpath.data(), tzInfo); /* Have to get out here. Otherwise, we'd keep looking and return the first match in the top-level directory @@ -955,11 +976,19 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { if (result != NULL) break; } else if (uprv_strcmp(TZFILE_SKIP, dirName) != 0 && uprv_strcmp(TZFILE_SKIP2, dirName) != 0) { - if(compareBinaryFiles(TZDEFAULT, newpath, tzInfo)) { - const char* zoneid = newpath + (sizeof(TZZONEINFO)) - 1; + if(compareBinaryFiles(TZDEFAULT, newpath.data(), tzInfo)) { + int32_t amountToSkip = sizeof(TZZONEINFO) - 1; + if (amountToSkip > newpath.length()) { + amountToSkip = newpath.length(); + } + const char* zoneid = newpath.data() + amountToSkip; skipZoneIDPrefix(&zoneid); - uprv_strcpy(SEARCH_TZFILE_RESULT, zoneid); - result = SEARCH_TZFILE_RESULT; + gSearchTZFileResult->clear(); + gSearchTZFileResult->append(zoneid, -1, status); + if (U_FAILURE(status)) { + return NULL; + } + result = gSearchTZFileResult->data(); /* Get out after the first one found. */ break; } @@ -970,6 +999,15 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { return result; } #endif + +U_CAPI void U_EXPORT2 +uprv_tzname_clear_cache() +{ +#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK) + gTimeZoneBufferPtr = NULL; +#endif +} + U_CAPI const char* U_EXPORT2 uprv_tzname(int n) { @@ -1000,10 +1038,10 @@ uprv_tzname(int n) && uprv_strcmp(tzid, TZ_ENV_CHECK) != 0 #endif ) { - /* The colon forces tzset() to treat the remainder as zoneinfo path */ - if (tzid[0] == ':') { - tzid++; - } + /* The colon forces tzset() to treat the remainder as zoneinfo path */ + if (tzid[0] == ':') { + tzid++; + } /* This might be a good Olson ID. */ skipZoneIDPrefix(&tzid); return tzid; @@ -1019,7 +1057,7 @@ uprv_tzname(int n) because the tzfile contents is underspecified. This isn't guaranteed to work because it may not be a symlink. */ - int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)); + int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1); if (0 < ret) { int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO); gTimeZoneBuffer[ret] = 0; @@ -1139,6 +1177,11 @@ static UBool U_CALLCONV putil_cleanup(void) gTimeZoneFilesDirectory = NULL; gTimeZoneFilesInitOnce.reset(); +#ifdef SEARCH_TZFILE + delete gSearchTZFileResult; + gSearchTZFileResult = NULL; +#endif + #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API if (gCorrectedPOSIXLocale) { uprv_free(gCorrectedPOSIXLocale); @@ -1312,7 +1355,7 @@ static void setTimeZoneFilesDir(const char *path, UErrorCode &status) { #endif } -#define TO_STRING(x) TO_STRING_2(x) +#define TO_STRING(x) TO_STRING_2(x) #define TO_STRING_2(x) #x static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) { @@ -1387,7 +1430,7 @@ static const char *uprv_getPOSIXIDForCategory(int category) { /* Maybe we got some garbage. Try something more reasonable */ posixID = getenv("LC_ALL"); - /* Solaris speaks POSIX - See IEEE Std 1003.1-2008 + /* Solaris speaks POSIX - See IEEE Std 1003.1-2008 * This is needed to properly handle empty env. variables */ #if U_PLATFORM == U_PF_SOLARIS @@ -1398,7 +1441,7 @@ static const char *uprv_getPOSIXIDForCategory(int category) if (posixID == 0) { posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE"); if (posixID == 0) { -#endif +#endif posixID = getenv("LANG"); } } @@ -2062,11 +2105,11 @@ u_getVersion(UVersionInfo versionArray) { } /** - * icucfg.h dependent code + * icucfg.h dependent code */ #if U_ENABLE_DYLOAD - + #if HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API #if HAVE_DLFCN_H @@ -2153,15 +2196,15 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { HMODULE lib = NULL; - + if(U_FAILURE(*status)) return NULL; - + lib = LoadLibraryA(libName); - + if(lib==NULL) { *status = U_MISSING_RESOURCE_ERROR; } - + return (void*)lib; } @@ -2169,9 +2212,9 @@ U_INTERNAL void U_EXPORT2 uprv_dl_close(void *lib, UErrorCode *status) { HMODULE handle = (HMODULE)lib; if(U_FAILURE(*status)) return; - + FreeLibrary(handle); - + return; } @@ -2180,11 +2223,11 @@ U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { HMODULE handle = (HMODULE)lib; UVoidFunction* addr = NULL; - + if(U_FAILURE(*status) || lib==NULL) return NULL; - + addr = (UVoidFunction*)GetProcAddress(handle, sym); - + if(addr==NULL) { DWORD lastError = GetLastError(); if(lastError == ERROR_PROC_NOT_FOUND) { @@ -2193,7 +2236,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { *status = U_UNSUPPORTED_ERROR; /* other unknown error. */ } } - + return addr; } diff --git a/deps/icu-small/source/common/putilimp.h b/deps/icu-small/source/common/putilimp.h index b52a91c7ac0262..05f739103d904a 100644 --- a/deps/icu-small/source/common/putilimp.h +++ b/deps/icu-small/source/common/putilimp.h @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1997-2015, International Business Machines +* Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -148,7 +150,7 @@ typedef size_t uintptr_t; #ifdef U_HAVE_MMAP /* Use the predefined value. */ -#elif U_PLATFORM_HAS_WIN32_API +#elif U_PLATFORM_USES_ONLY_WIN32_API # define U_HAVE_MMAP 0 #else # define U_HAVE_MMAP 1 @@ -171,7 +173,7 @@ typedef size_t uintptr_t; */ #ifdef U_HAVE_DIRENT_H /* Use the predefined value. */ -#elif U_PLATFORM_HAS_WIN32_API +#elif U_PLATFORM_USES_ONLY_WIN32_API # define U_HAVE_DIRENT_H 0 #else # define U_HAVE_DIRENT_H 1 @@ -218,10 +220,10 @@ typedef size_t uintptr_t; #elif __clang__ && __clang_major__==3 && __clang_minor__<=1 /* Clang 3.1, has atomic variable initializer bug. */ # define U_HAVE_STD_ATOMICS 0 -#else +#else /* U_HAVE_ATOMIC is typically set by an autoconf test of #include */ /* Can be set manually, or left undefined, on platforms without autoconf. */ -# if defined(U_HAVE_ATOMIC) && U_HAVE_ATOMIC +# if defined(U_HAVE_ATOMIC) && U_HAVE_ATOMIC # define U_HAVE_STD_ATOMICS 1 # else # define U_HAVE_STD_ATOMICS 0 @@ -409,7 +411,7 @@ U_INTERNAL double U_EXPORT2 uprv_round(double x); * Return the default codepage for this platform and locale. * This function can call setlocale() on Unix platforms. Please read the * platform documentation on setlocale() before calling this function. - * @return the default codepage for this platform + * @return the default codepage for this platform * @internal */ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); @@ -418,7 +420,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); /** * Please use uloc_getDefault() instead. * Return the default locale ID string by querying ths system, or - * zero if one cannot be found. + * zero if one cannot be found. * This function can call setlocale() on Unix platforms. Please read the * platform documentation on setlocale() before calling this function. * @return the default locale ID string @@ -478,6 +480,12 @@ U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void); */ U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n); +/** + * Reset the global tzname cache. + * @internal + */ +U_INTERNAL void uprv_tzname_clear_cache(); + /** * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions. diff --git a/deps/icu-small/source/common/rbbi.cpp b/deps/icu-small/source/common/rbbi.cpp index 8b6f7c0cc6a9eb..2680bf216c789e 100644 --- a/deps/icu-small/source/common/rbbi.cpp +++ b/deps/icu-small/source/common/rbbi.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2016 International Business Machines Corporation @@ -72,21 +74,6 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode } } -/** - * Same as above but does not adopt memory - */ -RuleBasedBreakIterator::RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) -{ - init(); - fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); // status checked in constructor - if (U_FAILURE(status)) {return;} - if(fData == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } -} - - // // Construct from precompiled binary rules (tables). This constructor is public API, // taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules(). @@ -107,13 +94,13 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules, status = U_ILLEGAL_ARGUMENT_ERROR; return; } - fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); + fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); if (U_FAILURE(status)) {return;} if(fData == 0) { status = U_MEMORY_ALLOCATION_ERROR; return; } -} +} //------------------------------------------------------------------------------- @@ -197,7 +184,7 @@ RuleBasedBreakIterator::~RuleBasedBreakIterator() { fCharIter = NULL; delete fDCharIter; fDCharIter = NULL; - + utext_close(fText); if (fData != NULL) { @@ -390,7 +377,7 @@ void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) { UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const { - UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status); + UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status); return result; } @@ -421,7 +408,7 @@ RuleBasedBreakIterator::getRules() const { //======================================================================= /** - * Return a CharacterIterator over the text being analyzed. + * Return a CharacterIterator over the text being analyzed. */ CharacterIterator& RuleBasedBreakIterator::getText() const { @@ -435,7 +422,7 @@ RuleBasedBreakIterator::getText() const { */ void RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { - // If we are holding a CharacterIterator adopted from a + // If we are holding a CharacterIterator adopted from a // previous call to this function, delete it now. if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { delete fCharIter; @@ -444,7 +431,7 @@ RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { fCharIter = newText; UErrorCode status = U_ZERO_ERROR; reset(); - if (newText==NULL || newText->startIndex() != 0) { + if (newText==NULL || newText->startIndex() != 0) { // startIndex !=0 wants to be an error, but there's no way to report it. // Make the iterator text be an empty string. fText = utext_openUChars(fText, NULL, 0, &status); @@ -465,7 +452,7 @@ RuleBasedBreakIterator::setText(const UnicodeString& newText) { reset(); fText = utext_openConstUnicodeString(fText, &newText, &status); - // Set up a character iterator on the string. + // Set up a character iterator on the string. // Needed in case someone calls getText(). // Can not, unfortunately, do this lazily on the (probably never) // call to getText(), because getText is const. @@ -793,7 +780,7 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { // old rule syntax utext_setNativeIndex(fText, offset); - if (offset==0 || + if (offset==0 || (offset==1 && utext_getNativeIndex(fText)==0)) { return next(); } @@ -892,7 +879,7 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { // to anyone how to work with just one safe table. utext_setNativeIndex(fText, offset); (void)UTEXT_NEXT32(fText); - + // handle previous will give result <= offset handlePrevious(fData->fSafeRevTable); @@ -966,7 +953,7 @@ int32_t RuleBasedBreakIterator::current(void) const { int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); return pos; } - + //======================================================================= // implementation //======================================================================= @@ -1034,7 +1021,7 @@ struct LookAheadResults { //----------------------------------------------------------------------------------- // // handleNext(stateTable) -// This method is the actual implementation of the rbbi next() method. +// This method is the actual implementation of the rbbi next() method. // This method initializes the state machine to state 1 // and advances through the text character by character until we reach the end // of the text or the state machine transitions to state 0. We update our return @@ -1045,7 +1032,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { int32_t state; uint16_t category = 0; RBBIRunMode mode; - + RBBIStateTableRow *row; UChar32 c; LookAheadResults lookAheadMatches; @@ -1065,7 +1052,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { fLastRuleStatusIndex = 0; // if we're already at the end of the text, return DONE. - initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); result = initialPosition; c = UTEXT_NEXT32(fText); if (fData == NULL || c==U_SENTINEL) { @@ -1077,8 +1064,8 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { row = (RBBIStateTableRow *) //(statetable->fTableData + (statetable->fRowLen * state)); (tableData + tableRowLen * state); - - + + mode = RBBI_RUN; if (statetable->fFlags & RBBI_BOF_REQUIRED) { category = 2; @@ -1092,7 +1079,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { if (c == U_SENTINEL) { // Reached end of input string. if (mode == RBBI_END) { - // We have already run the loop one last time with the + // We have already run the loop one last time with the // character set to the psueudo {eof} value. Now it is time // to unconditionally bail out. break; @@ -1162,7 +1149,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { int16_t completedRule = row->fAccepting; if (completedRule > 0) { - // Lookahead match is completed. + // Lookahead match is completed. int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); if (lookaheadResult >= 0) { fLastRuleStatusIndex = row->fTagIdx; @@ -1183,8 +1170,8 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { // longer match is possible, no matter what characters follow. break; } - - // Advance to the next character. + + // Advance to the next character. // If this is a beginning-of-input loop iteration, don't advance // the input position. The next iteration will be processing the // first real input character. @@ -1283,7 +1270,7 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) if (c == U_SENTINEL) { // Reached end of input string. if (mode == RBBI_END) { - // We have already run the loop one last time with the + // We have already run the loop one last time with the // character set to the psueudo {eof} value. Now it is time // to unconditionally bail out. if (result == initialPosition) { @@ -1354,7 +1341,7 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) int16_t completedRule = row->fAccepting; if (completedRule > 0) { - // Lookahead match is completed. + // Lookahead match is completed. int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); if (lookaheadResult >= 0) { UTEXT_SETNATIVEINDEX(fText, lookaheadResult); @@ -1375,13 +1362,13 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) break; } - // Move (backwards) to the next character to process. + // Move (backwards) to the next character to process. // If this is a beginning-of-input loop iteration, don't advance // the input position. The next iteration will be processing the // first real input character. if (mode == RBBI_RUN) { c = UTEXT_PREVIOUS32(fText); - } else { + } else { if (mode == RBBI_START) { mode = RBBI_RUN; } @@ -1579,13 +1566,13 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, // Reset the old break cache first. reset(); - // note: code segment below assumes that dictionary chars are in the + // note: code segment below assumes that dictionary chars are in the // startPos-endPos range // value returned should be next character in sequence if ((endPos - startPos) <= 1) { return (reverse ? startPos : endPos); } - + // Starting from the starting point, scan towards the proposed result, // looking for the first dictionary character (which may be the one // we're on, if we're starting in the middle of a range). @@ -1593,7 +1580,7 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, if (reverse) { UTEXT_PREVIOUS32(fText); } - + int32_t rangeStart = startPos; int32_t rangeEnd = endPos; @@ -1605,7 +1592,7 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, UChar32 c = utext_current32(fText); UTRIE_GET16(&fData->fTrie, c, category); - + // Is the character we're starting on a dictionary character? If so, we // need to back up to include the entire run; otherwise the results of // the break algorithm will differ depending on where we start. Since @@ -1648,7 +1635,7 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, } UTRIE_GET16(&fData->fTrie, c, category); } - + // Loop through the text, looking for ranges of dictionary characters. // For each span, find the appropriate break engine, and ask it to find // any breaks within the span. @@ -1668,22 +1655,22 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, if (current >= rangeEnd) { break; } - + // We now have a dictionary character. Get the appropriate language object // to deal with it. const LanguageBreakEngine *lbe = getLanguageBreakEngine(c); - + // Ask the language object if there are any breaks. It will leave the text // pointer on the other side of its range, ready to search for the next one. if (lbe != NULL) { foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks); } - + // Reload the loop variables for the next go-round c = utext_current32(fText); UTRIE_GET16(&fData->fTrie, c, category); } - + // If we found breaks, build a new break cache. The first and last entries must // be the original starting and ending position. if (foundBreakCount > 0) { @@ -1734,7 +1721,7 @@ static icu::UStack *gLanguageBreakFactories = NULL; static icu::UInitOnce gLanguageBreakFactoriesInitOnce = U_INITONCE_INITIALIZER; /** - * Release all static memory held by breakiterator. + * Release all static memory held by breakiterator. */ U_CDECL_BEGIN static UBool U_CALLCONV breakiterator_cleanup_dict(void) { @@ -1779,7 +1766,7 @@ getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType) if (gLanguageBreakFactories == NULL) { return NULL; } - + int32_t i = gLanguageBreakFactories->size(); const LanguageBreakEngine *lbe = NULL; while (--i >= 0) { @@ -1803,7 +1790,7 @@ const LanguageBreakEngine * RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { const LanguageBreakEngine *lbe = NULL; UErrorCode status = U_ZERO_ERROR; - + if (fLanguageBreakEngines == NULL) { fLanguageBreakEngines = new UStack(status); if (fLanguageBreakEngines == NULL || U_FAILURE(status)) { @@ -1812,7 +1799,7 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { return NULL; } } - + int32_t i = fLanguageBreakEngines->size(); while (--i >= 0) { lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i)); @@ -1820,11 +1807,11 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { return lbe; } } - + // No existing dictionary took the character. See if a factory wants to // give us a new LanguageBreakEngine for this character. lbe = getLanguageBreakEngineFromFactory(c, fBreakType); - + // If we got one, use it and push it on our stack. if (lbe != NULL) { fLanguageBreakEngines->push((void *)lbe, status); @@ -1832,7 +1819,7 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { // return it even if the push fails. return lbe; } - + // No engine is forthcoming for this character. Add it to the // reject set. Create the reject break engine if needed. if (fUnhandledBreakEngine == NULL) { @@ -1850,11 +1837,11 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { return NULL; } } - + // Tell the reject engine about the character; at its discretion, it may // add more than just the one character. fUnhandledBreakEngine->handleCharacter(c, fBreakType); - + return fUnhandledBreakEngine; } diff --git a/deps/icu-small/source/common/rbbicst.pl b/deps/icu-small/source/common/rbbicst.pl old mode 100644 new mode 100755 index 82f770615372b8..32dd2ffff10742 --- a/deps/icu-small/source/common/rbbicst.pl +++ b/deps/icu-small/source/common/rbbicst.pl @@ -1,4 +1,8 @@ #************************************************************************** +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html#License +#************************************************************************** +#************************************************************************** # Copyright (C) 2002-2016 International Business Machines Corporation # and others. All rights reserved. #************************************************************************** @@ -260,7 +264,7 @@ $n++; } print " \n"; - + # # Emit constants for char class names # @@ -268,8 +272,8 @@ print " static final short kRuleSet_$setName = $charClasses{$setName};\n"; } print "\n\n"; - - + + print " static class RBBIRuleTableElement { \n"; print " short fAction; \n"; print " short fCharClass; \n"; @@ -287,20 +291,20 @@ print " } \n"; print " }; \n"; print " \n"; - - + + print " static RBBIRuleTableElement[] gRuleParseStateTable = { \n "; - print " new RBBIRuleTableElement(doNOP, 0, 0,0, true, null ) // 0 \n"; #output the unused state 0. + print " new RBBIRuleTableElement(doNOP, 0, 0,0, true, null ) // 0 \n"; #output the unused state 0. for ($state=1; $state < $num_states; $state++) { print " , new RBBIRuleTableElement($state_func_name[$state],"; if ($state_literal_chars[$state] ne "") { $c = $state_literal_chars[$state]; - print("'$c', "); + print("'$c', "); }else { print " $charClasses{$state_char_class[$state]},"; } print " $states{$state_dest_state[$state]},"; - + # The push-state field is optional. If omitted, fill field with a zero, which flags # the state machine that there is no push state. if ($state_push_state[$state] eq "") { @@ -309,14 +313,14 @@ print " $states{$state_push_state[$state]},"; } print " $state_flag[$state], "; - + # if this is the first row of the table for this state, put out the state name. if ($stateNames[$state] ne "") { print " \"$stateNames[$state]\") "; } else { print " null ) "; } - + # Put out a comment showing the number (index) of this state row, print " // $state "; print "\n"; @@ -324,7 +328,7 @@ print " };\n"; print "}; \n"; - + } else { @@ -450,3 +454,6 @@ print "U_NAMESPACE_END\n"; print "#endif\n"; } + + + diff --git a/deps/icu-small/source/common/rbbidata.cpp b/deps/icu-small/source/common/rbbidata.cpp index 3f151b42bbf496..26e11ac2eb69e2 100644 --- a/deps/icu-small/source/common/rbbidata.cpp +++ b/deps/icu-small/source/common/rbbidata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2014 International Business Machines Corporation * @@ -106,7 +108,7 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { return; } fHeader = data; - if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) + if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) { status = U_INVALID_FORMAT_ERROR; return; @@ -342,16 +344,16 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // // Get the RRBI Data Header, and check that it appears to be OK. // - // Note: ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually + // Note: ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually // an int32_t with a value of 1. Starting with ICU 3.4, // RBBI's fDataFormat matches the dataFormat field from the // UDataInfo header, four int8_t bytes. The value is {3,1,0,0} // const uint8_t *inBytes =(const uint8_t *)inData+headerSize; RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes; - if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || + if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || rbbiDH->fFormatVersion[0] != 3 || - ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) + ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) { udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n"); *status=U_UNSUPPORTED_ERROR; @@ -404,23 +406,23 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // int32_t topSize = offsetof(RBBIStateTable, fTableData); - // Forward state table. + // Forward state table. tableStartOffset = ds->readUInt32(rbbiDH->fFTable); tableLength = ds->readUInt32(rbbiDH->fFTableLen); if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, outBytes+tableStartOffset+topSize, status); } - + // Reverse state table. Same layout as forward table, above. tableStartOffset = ds->readUInt32(rbbiDH->fRTable); tableLength = ds->readUInt32(rbbiDH->fRTableLen); if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, outBytes+tableStartOffset+topSize, status); @@ -431,7 +433,7 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD tableLength = ds->readUInt32(rbbiDH->fSFTableLen); if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, outBytes+tableStartOffset+topSize, status); @@ -442,7 +444,7 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD tableLength = ds->readUInt32(rbbiDH->fSRTableLen); if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, outBytes+tableStartOffset+topSize, status); diff --git a/deps/icu-small/source/common/rbbidata.h b/deps/icu-small/source/common/rbbidata.h index 3e53c44ad5b7ae..1d6f37d4b4fe54 100644 --- a/deps/icu-small/source/common/rbbidata.h +++ b/deps/icu-small/source/common/rbbidata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -54,8 +56,8 @@ ubrk_swap(const UDataSwapper *ds, U_NAMESPACE_BEGIN -/* - * The following structs map exactly onto the raw data from ICU common data file. +/* + * The following structs map exactly onto the raw data from ICU common data file. */ struct RBBIDataHeader { uint32_t fMagic; /* == 0xbla0 */ @@ -174,7 +176,7 @@ class RBBIDataWrapper : public UMemory { const RBBIStateTable *fSafeFwdTable; const RBBIStateTable *fSafeRevTable; const UChar *fRuleSource; - const int32_t *fRuleStatusTable; + const int32_t *fRuleStatusTable; /* number of int32_t values in the rule status table. Used to sanity check indexing */ int32_t fStatusMaxIdx; diff --git a/deps/icu-small/source/common/rbbinode.cpp b/deps/icu-small/source/common/rbbinode.cpp index 221f8f2661a72e..123c21e44cf3dd 100644 --- a/deps/icu-small/source/common/rbbinode.cpp +++ b/deps/icu-small/source/common/rbbinode.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2002-2016 International Business Machines Corporation * @@ -23,6 +25,8 @@ #include "unicode/uniset.h" #include "unicode/uchar.h" #include "unicode/parsepos.h" + +#include "cstr.h" #include "uvector.h" #include "rbbirb.h" @@ -165,8 +169,6 @@ RBBINode *RBBINode::cloneTree() { } } } - n->fRuleRoot = this->fRuleRoot; - n->fChainIn = this->fChainIn; return n; } @@ -192,8 +194,12 @@ RBBINode *RBBINode::cloneTree() { //------------------------------------------------------------------------- RBBINode *RBBINode::flattenVariables() { if (fType == varRef) { - RBBINode *retNode = fLeftChild->cloneTree(); - delete this; + RBBINode *retNode = fLeftChild->cloneTree(); + if (retNode != NULL) { + retNode->fRuleRoot = this->fRuleRoot; + retNode->fChainIn = this->fChainIn; + } + delete this; // TODO: undefined behavior. Fix. return retNode; } @@ -284,7 +290,7 @@ static int32_t serial(const RBBINode *node) { } -void RBBINode::printNode() { +void RBBINode::printNode(const RBBINode *node) { static const char * const nodeTypeNames[] = { "setRef", "uset", @@ -304,15 +310,16 @@ void RBBINode::printNode() { "opLParen" }; - if (this==NULL) { - RBBIDebugPrintf("%10p", (void *)this); + if (node==NULL) { + RBBIDebugPrintf("%10p", (void *)node); } else { RBBIDebugPrintf("%10p %5d %12s %c%c %5d %5d %5d %6d %d ", - (void *)this, fSerialNum, nodeTypeNames[fType], fRuleRoot?'R':' ', fChainIn?'C':' ', - serial(fLeftChild), serial(fRightChild), serial(fParent), - fFirstPos, fVal); - if (fType == varRef) { - RBBI_DEBUG_printUnicodeString(fText); + (void *)node, node->fSerialNum, nodeTypeNames[node->fType], + node->fRuleRoot?'R':' ', node->fChainIn?'C':' ', + serial(node->fLeftChild), serial(node->fRightChild), serial(node->fParent), + node->fFirstPos, node->fVal); + if (node->fType == varRef) { + RBBI_DEBUG_printUnicodeString(node->fText); } } RBBIDebugPrintf("\n"); @@ -321,16 +328,8 @@ void RBBINode::printNode() { #ifdef RBBI_DEBUG -U_CFUNC void RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth) -{ - int i; - for (i=0; iprintNode(); - if (this != NULL) { + printNode(node); + if (node != NULL) { // Only dump the definition under a variable reference if asked to. // Unconditinally dump children of all other node types. - if (fType != varRef) { - if (fLeftChild != NULL) { - fLeftChild->printTree(FALSE); + if (node->fType != varRef) { + if (node->fLeftChild != NULL) { + printTree(node->fLeftChild, FALSE); } - - if (fRightChild != NULL) { - fRightChild->printTree(FALSE); + + if (node->fRightChild != NULL) { + printTree(node->fRightChild, FALSE); } } } diff --git a/deps/icu-small/source/common/rbbinode.h b/deps/icu-small/source/common/rbbinode.h index 4960e38f69cf41..74096cc814182e 100644 --- a/deps/icu-small/source/common/rbbinode.h +++ b/deps/icu-small/source/common/rbbinode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2001-2016, International Business Machines Corporation and @@ -44,21 +46,21 @@ class RBBINode : public UMemory { opLParen }; - enum OpPrecedence { + enum OpPrecedence { precZero, precStart, precLParen, precOpOr, precOpCat }; - + NodeType fType; RBBINode *fParent; RBBINode *fLeftChild; RBBINode *fRightChild; UnicodeSet *fInputSet; // For uset nodes only. OpPrecedence fPrecedence; // For binary ops only. - + UnicodeString fText; // Text corresponding to this node. // May be lazily evaluated when (if) needed // for some node types. @@ -92,7 +94,7 @@ class RBBINode : public UMemory { RBBINode(NodeType t); RBBINode(const RBBINode &other); ~RBBINode(); - + RBBINode *cloneTree(); RBBINode *flattenVariables(); void flattenSets(); @@ -100,8 +102,8 @@ class RBBINode : public UMemory { #ifdef RBBI_DEBUG static void printNodeHeader(); - void printNode(); - void printTree(UBool withHeading); + static void printNode(const RBBINode *n); + static void printTree(const RBBINode *n, UBool withHeading); #endif private: @@ -115,10 +117,11 @@ class RBBINode : public UMemory { }; #ifdef RBBI_DEBUG -U_CFUNC void +U_CFUNC void RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth=0); #endif U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/common/rbbirb.cpp b/deps/icu-small/source/common/rbbirb.cpp index c2dce683172e52..3d9fe6fd340787 100644 --- a/deps/icu-small/source/common/rbbirb.cpp +++ b/deps/icu-small/source/common/rbbirb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbirb.cpp // @@ -163,7 +165,7 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { int32_t rulesSize = align8((strippedRules.length()+1) * sizeof(UChar)); int32_t totalSize = headerSize + forwardTableSize + reverseTableSize - + safeFwdTableSize + safeRevTableSize + + safeFwdTableSize + safeRevTableSize + statusTableSize + trieSize + rulesSize; RBBIDataHeader *data = (RBBIDataHeader *)uprv_malloc(totalSize); @@ -306,7 +308,7 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules, if (U_FAILURE(status)) { delete This; This = NULL; - } + } else if(This == NULL) { // test for NULL status = U_MEMORY_ALLOCATION_ERROR; } diff --git a/deps/icu-small/source/common/rbbirb.h b/deps/icu-small/source/common/rbbirb.h index b454b609fd993d..e4f736c8f39f42 100644 --- a/deps/icu-small/source/common/rbbirb.h +++ b/deps/icu-small/source/common/rbbirb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbirb.h // @@ -85,7 +87,7 @@ class RBBISymbolTable : public UMemory, public SymbolTable { // A do-nothing inline function for non-debug builds. Member funcs can't be empty // or the call sites won't compile. int32_t fFakeField; - #define rbbiSymtablePrint() fFakeField=0; + #define rbbiSymtablePrint() fFakeField=0; #endif private: @@ -200,9 +202,12 @@ struct RBBISetTableEl { #define RBBIDebugPrintf printf #define RBBIDebugPuts puts #else -#undef RBBIDebugPrintf +#undef RBBIDebugPrintf #define RBBIDebugPuts(arg) #endif U_NAMESPACE_END #endif + + + diff --git a/deps/icu-small/source/common/rbbirpt.h b/deps/icu-small/source/common/rbbirpt.h index f628c938154022..b5bc8f7bf31baa 100644 --- a/deps/icu-small/source/common/rbbirpt.h +++ b/deps/icu-small/source/common/rbbirpt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------------------------------- // // Generated Header File. Do not edit by hand. @@ -6,8 +8,8 @@ // It is generated by the Perl script "rbbicst.pl" from // the rule parser state definitions file "rbbirpt.txt". // -// Copyright (C) 2002-2016 International Business Machines Corporation -// and others. All rights reserved. +// Copyright (C) 2002-2016 International Business Machines Corporation +// and others. All rights reserved. // //--------------------------------------------------------------------------------- #ifndef RBBIRPT_H @@ -79,107 +81,107 @@ struct RBBIRuleTableEl { static const struct RBBIRuleTableEl gRuleParseStateTable[] = { {doNOP, 0, 0, 0, TRUE} , {doExprStart, 254, 29, 9, FALSE} // 1 start - , {doNOP, 132, 1,0, TRUE} // 2 - , {doNoChain, 94 /* ^ */, 12, 9, TRUE} // 3 - , {doExprStart, 36 /* $ */, 88, 98, FALSE} // 4 - , {doNOP, 33 /* ! */, 19,0, TRUE} // 5 - , {doNOP, 59 /* ; */, 1,0, TRUE} // 6 - , {doNOP, 252, 0,0, FALSE} // 7 - , {doExprStart, 255, 29, 9, FALSE} // 8 + , {doNOP, 132, 1,0, TRUE} // 2 + , {doNoChain, 94 /* ^ */, 12, 9, TRUE} // 3 + , {doExprStart, 36 /* $ */, 88, 98, FALSE} // 4 + , {doNOP, 33 /* ! */, 19,0, TRUE} // 5 + , {doNOP, 59 /* ; */, 1,0, TRUE} // 6 + , {doNOP, 252, 0,0, FALSE} // 7 + , {doExprStart, 255, 29, 9, FALSE} // 8 , {doEndOfRule, 59 /* ; */, 1,0, TRUE} // 9 break-rule-end - , {doNOP, 132, 9,0, TRUE} // 10 - , {doRuleError, 255, 103,0, FALSE} // 11 + , {doNOP, 132, 9,0, TRUE} // 10 + , {doRuleError, 255, 103,0, FALSE} // 11 , {doExprStart, 254, 29,0, FALSE} // 12 start-after-caret - , {doNOP, 132, 12,0, TRUE} // 13 - , {doRuleError, 94 /* ^ */, 103,0, FALSE} // 14 - , {doExprStart, 36 /* $ */, 88, 37, FALSE} // 15 - , {doRuleError, 59 /* ; */, 103,0, FALSE} // 16 - , {doRuleError, 252, 103,0, FALSE} // 17 - , {doExprStart, 255, 29,0, FALSE} // 18 + , {doNOP, 132, 12,0, TRUE} // 13 + , {doRuleError, 94 /* ^ */, 103,0, FALSE} // 14 + , {doExprStart, 36 /* $ */, 88, 37, FALSE} // 15 + , {doRuleError, 59 /* ; */, 103,0, FALSE} // 16 + , {doRuleError, 252, 103,0, FALSE} // 17 + , {doExprStart, 255, 29,0, FALSE} // 18 , {doNOP, 33 /* ! */, 21,0, TRUE} // 19 rev-option - , {doReverseDir, 255, 28, 9, FALSE} // 20 + , {doReverseDir, 255, 28, 9, FALSE} // 20 , {doOptionStart, 130, 23,0, TRUE} // 21 option-scan1 - , {doRuleError, 255, 103,0, FALSE} // 22 + , {doRuleError, 255, 103,0, FALSE} // 22 , {doNOP, 129, 23,0, TRUE} // 23 option-scan2 - , {doOptionEnd, 255, 25,0, FALSE} // 24 + , {doOptionEnd, 255, 25,0, FALSE} // 24 , {doNOP, 59 /* ; */, 1,0, TRUE} // 25 option-scan3 - , {doNOP, 132, 25,0, TRUE} // 26 - , {doRuleError, 255, 103,0, FALSE} // 27 + , {doNOP, 132, 25,0, TRUE} // 26 + , {doRuleError, 255, 103,0, FALSE} // 27 , {doExprStart, 255, 29, 9, FALSE} // 28 reverse-rule , {doRuleChar, 254, 38,0, TRUE} // 29 term - , {doNOP, 132, 29,0, TRUE} // 30 - , {doRuleChar, 131, 38,0, TRUE} // 31 - , {doNOP, 91 /* [ */, 94, 38, FALSE} // 32 - , {doLParen, 40 /* ( */, 29, 38, TRUE} // 33 - , {doNOP, 36 /* $ */, 88, 37, FALSE} // 34 - , {doDotAny, 46 /* . */, 38,0, TRUE} // 35 - , {doRuleError, 255, 103,0, FALSE} // 36 + , {doNOP, 132, 29,0, TRUE} // 30 + , {doRuleChar, 131, 38,0, TRUE} // 31 + , {doNOP, 91 /* [ */, 94, 38, FALSE} // 32 + , {doLParen, 40 /* ( */, 29, 38, TRUE} // 33 + , {doNOP, 36 /* $ */, 88, 37, FALSE} // 34 + , {doDotAny, 46 /* . */, 38,0, TRUE} // 35 + , {doRuleError, 255, 103,0, FALSE} // 36 , {doCheckVarDef, 255, 38,0, FALSE} // 37 term-var-ref , {doNOP, 132, 38,0, TRUE} // 38 expr-mod - , {doUnaryOpStar, 42 /* * */, 43,0, TRUE} // 39 - , {doUnaryOpPlus, 43 /* + */, 43,0, TRUE} // 40 - , {doUnaryOpQuestion, 63 /* ? */, 43,0, TRUE} // 41 - , {doNOP, 255, 43,0, FALSE} // 42 + , {doUnaryOpStar, 42 /* * */, 43,0, TRUE} // 39 + , {doUnaryOpPlus, 43 /* + */, 43,0, TRUE} // 40 + , {doUnaryOpQuestion, 63 /* ? */, 43,0, TRUE} // 41 + , {doNOP, 255, 43,0, FALSE} // 42 , {doExprCatOperator, 254, 29,0, FALSE} // 43 expr-cont - , {doNOP, 132, 43,0, TRUE} // 44 - , {doExprCatOperator, 131, 29,0, FALSE} // 45 - , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 46 - , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 47 - , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 48 - , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 49 - , {doExprCatOperator, 47 /* / */, 55,0, FALSE} // 50 - , {doExprCatOperator, 123 /* { */, 67,0, TRUE} // 51 - , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 52 - , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 53 - , {doExprFinished, 255, 255,0, FALSE} // 54 + , {doNOP, 132, 43,0, TRUE} // 44 + , {doExprCatOperator, 131, 29,0, FALSE} // 45 + , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 46 + , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 47 + , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 48 + , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 49 + , {doExprCatOperator, 47 /* / */, 55,0, FALSE} // 50 + , {doExprCatOperator, 123 /* { */, 67,0, TRUE} // 51 + , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 52 + , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 53 + , {doExprFinished, 255, 255,0, FALSE} // 54 , {doSlash, 47 /* / */, 57,0, TRUE} // 55 look-ahead - , {doNOP, 255, 103,0, FALSE} // 56 + , {doNOP, 255, 103,0, FALSE} // 56 , {doExprCatOperator, 254, 29,0, FALSE} // 57 expr-cont-no-slash - , {doNOP, 132, 43,0, TRUE} // 58 - , {doExprCatOperator, 131, 29,0, FALSE} // 59 - , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 60 - , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 61 - , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 62 - , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 63 - , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 64 - , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 65 - , {doExprFinished, 255, 255,0, FALSE} // 66 + , {doNOP, 132, 43,0, TRUE} // 58 + , {doExprCatOperator, 131, 29,0, FALSE} // 59 + , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 60 + , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 61 + , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 62 + , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 63 + , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 64 + , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 65 + , {doExprFinished, 255, 255,0, FALSE} // 66 , {doNOP, 132, 67,0, TRUE} // 67 tag-open - , {doStartTagValue, 128, 70,0, FALSE} // 68 - , {doTagExpectedError, 255, 103,0, FALSE} // 69 + , {doStartTagValue, 128, 70,0, FALSE} // 68 + , {doTagExpectedError, 255, 103,0, FALSE} // 69 , {doNOP, 132, 74,0, TRUE} // 70 tag-value - , {doNOP, 125 /* } */, 74,0, FALSE} // 71 - , {doTagDigit, 128, 70,0, TRUE} // 72 - , {doTagExpectedError, 255, 103,0, FALSE} // 73 + , {doNOP, 125 /* } */, 74,0, FALSE} // 71 + , {doTagDigit, 128, 70,0, TRUE} // 72 + , {doTagExpectedError, 255, 103,0, FALSE} // 73 , {doNOP, 132, 74,0, TRUE} // 74 tag-close - , {doTagValue, 125 /* } */, 77,0, TRUE} // 75 - , {doTagExpectedError, 255, 103,0, FALSE} // 76 + , {doTagValue, 125 /* } */, 77,0, TRUE} // 75 + , {doTagExpectedError, 255, 103,0, FALSE} // 76 , {doExprCatOperator, 254, 29,0, FALSE} // 77 expr-cont-no-tag - , {doNOP, 132, 77,0, TRUE} // 78 - , {doExprCatOperator, 131, 29,0, FALSE} // 79 - , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 80 - , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 81 - , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 82 - , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 83 - , {doExprCatOperator, 47 /* / */, 55,0, FALSE} // 84 - , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 85 - , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 86 - , {doExprFinished, 255, 255,0, FALSE} // 87 + , {doNOP, 132, 77,0, TRUE} // 78 + , {doExprCatOperator, 131, 29,0, FALSE} // 79 + , {doExprCatOperator, 91 /* [ */, 29,0, FALSE} // 80 + , {doExprCatOperator, 40 /* ( */, 29,0, FALSE} // 81 + , {doExprCatOperator, 36 /* $ */, 29,0, FALSE} // 82 + , {doExprCatOperator, 46 /* . */, 29,0, FALSE} // 83 + , {doExprCatOperator, 47 /* / */, 55,0, FALSE} // 84 + , {doExprOrOperator, 124 /* | */, 29,0, TRUE} // 85 + , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 86 + , {doExprFinished, 255, 255,0, FALSE} // 87 , {doStartVariableName, 36 /* $ */, 90,0, TRUE} // 88 scan-var-name - , {doNOP, 255, 103,0, FALSE} // 89 + , {doNOP, 255, 103,0, FALSE} // 89 , {doNOP, 130, 92,0, TRUE} // 90 scan-var-start - , {doVariableNameExpectedErr, 255, 103,0, FALSE} // 91 + , {doVariableNameExpectedErr, 255, 103,0, FALSE} // 91 , {doNOP, 129, 92,0, TRUE} // 92 scan-var-body - , {doEndVariableName, 255, 255,0, FALSE} // 93 + , {doEndVariableName, 255, 255,0, FALSE} // 93 , {doScanUnicodeSet, 91 /* [ */, 255,0, TRUE} // 94 scan-unicode-set - , {doScanUnicodeSet, 112 /* p */, 255,0, TRUE} // 95 - , {doScanUnicodeSet, 80 /* P */, 255,0, TRUE} // 96 - , {doNOP, 255, 103,0, FALSE} // 97 + , {doScanUnicodeSet, 112 /* p */, 255,0, TRUE} // 95 + , {doScanUnicodeSet, 80 /* P */, 255,0, TRUE} // 96 + , {doNOP, 255, 103,0, FALSE} // 97 , {doNOP, 132, 98,0, TRUE} // 98 assign-or-rule - , {doStartAssign, 61 /* = */, 29, 101, TRUE} // 99 - , {doNOP, 255, 37, 9, FALSE} // 100 + , {doStartAssign, 61 /* = */, 29, 101, TRUE} // 99 + , {doNOP, 255, 37, 9, FALSE} // 100 , {doEndAssign, 59 /* ; */, 1,0, TRUE} // 101 assign-end - , {doRuleErrorAssignExpr, 255, 103,0, FALSE} // 102 + , {doRuleErrorAssignExpr, 255, 103,0, FALSE} // 102 , {doExit, 255, 103,0, TRUE} // 103 errorDeath }; #ifdef RBBI_DEBUG diff --git a/deps/icu-small/source/common/rbbiscan.cpp b/deps/icu-small/source/common/rbbiscan.cpp index e19a6479c31748..df30f2c204acfb 100644 --- a/deps/icu-small/source/common/rbbiscan.cpp +++ b/deps/icu-small/source/common/rbbiscan.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbiscan.cpp // @@ -93,7 +95,7 @@ RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb) fLineNum = 1; fCharNum = 0; fLastChar = 0; - + fStateTable = NULL; fStack[0] = 0; fStackPtr = 0; @@ -354,7 +356,7 @@ UBool RBBIRuleScanner::doParseActions(int32_t action) thisRule->fRuleRoot = TRUE; // Flag if chaining into this rule is wanted. - // + // if (fRB->fChainRules && // If rule chaining is enabled globally via !!chain !fNoChainInRule) { // and no '^' chain-in inhibit was on this rule thisRule->fChainIn = TRUE; @@ -1103,6 +1105,17 @@ void RBBIRuleScanner::parse() { } + if (U_FAILURE(*fRB->fStatus)) { + return; + } + + // If there are no forward rules set an error. + // + if (fRB->fForwardTree == NULL) { + error(U_BRK_RULE_SYNTAX); + return; + } + // // If there were NO user specified reverse rules, set up the equivalent of ".*;" // @@ -1126,16 +1139,15 @@ void RBBIRuleScanner::parse() { // #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "symbols")) {fSymbolTable->rbbiSymtablePrint();} - if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree")) - { + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree")) { RBBIDebugPrintf("Completed Forward Rules Parse Tree...\n"); - fRB->fForwardTree->printTree(TRUE); + RBBINode::printTree(fRB->fForwardTree, TRUE); RBBIDebugPrintf("\nCompleted Reverse Rules Parse Tree...\n"); - fRB->fReverseTree->printTree(TRUE); + RBBINode::printTree(fRB->fReverseTree, TRUE); RBBIDebugPrintf("\nCompleted Safe Point Forward Rules Parse Tree...\n"); - fRB->fSafeFwdTree->printTree(TRUE); + RBBINode::printTree(fRB->fSafeFwdTree, TRUE); RBBIDebugPrintf("\nCompleted Safe Point Reverse Rules Parse Tree...\n"); - fRB->fSafeRevTree->printTree(TRUE); + RBBINode::printTree(fRB->fSafeRevTree, TRUE); } #endif } @@ -1150,7 +1162,7 @@ void RBBIRuleScanner::parse() { void RBBIRuleScanner::printNodeStack(const char *title) { int i; RBBIDebugPrintf("%s. Dumping node stack...\n", title); - for (i=fNodeStackPtr; i>0; i--) {fNodeStack[i]->printTree(TRUE);} + for (i=fNodeStackPtr; i>0; i--) {RBBINode::printTree(fNodeStack[i], TRUE);} } #endif diff --git a/deps/icu-small/source/common/rbbiscan.h b/deps/icu-small/source/common/rbbiscan.h index ede5aaa35e4049..6f3267e21ac68c 100644 --- a/deps/icu-small/source/common/rbbiscan.h +++ b/deps/icu-small/source/common/rbbiscan.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbiscan.h // @@ -32,7 +34,7 @@ class RBBISymbolTable; //-------------------------------------------------------------------------------- // // class RBBIRuleScanner does the lowest level, character-at-a-time -// scanning of break iterator rules. +// scanning of break iterator rules. // // The output of the scanner is parse trees for // the rule expressions and a list of all Unicode Sets diff --git a/deps/icu-small/source/common/rbbisetb.cpp b/deps/icu-small/source/common/rbbisetb.cpp index a419289bc752ea..ebdf8b7fb90409 100644 --- a/deps/icu-small/source/common/rbbisetb.cpp +++ b/deps/icu-small/source/common/rbbisetb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.cpp // @@ -242,7 +244,7 @@ void RBBISetBuilder::build() { } if (rlRange->fNum == 0) { fGroupCount ++; - rlRange->fNum = fGroupCount+2; + rlRange->fNum = fGroupCount+2; rlRange->setDictionaryFlag(); addValToSets(rlRange->fIncludesSets, fGroupCount+2); } @@ -408,7 +410,7 @@ UBool RBBISetBuilder::sawBOF() const { //------------------------------------------------------------------------ // // getFirstChar Given a runtime RBBI character category, find -// the first UChar32 that is in the set of chars +// the first UChar32 that is in the set of chars // in the category. //------------------------------------------------------------------------ UChar32 RBBISetBuilder::getFirstChar(int32_t category) const { @@ -546,7 +548,7 @@ void RBBISetBuilder::printSets() { RBBI_DEBUG_printUnicodeString(usetNode->fText); RBBIDebugPrintf("\n"); if (usetNode->fLeftChild != NULL) { - usetNode->fLeftChild->printTree(TRUE); + RBBINode::printTree(usetNode->fLeftChild, TRUE); } } RBBIDebugPrintf("\n"); diff --git a/deps/icu-small/source/common/rbbisetb.h b/deps/icu-small/source/common/rbbisetb.h index c8bc1df7786c49..89bfb9865cda15 100644 --- a/deps/icu-small/source/common/rbbisetb.h +++ b/deps/icu-small/source/common/rbbisetb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.h /* diff --git a/deps/icu-small/source/common/rbbistbl.cpp b/deps/icu-small/source/common/rbbistbl.cpp index c35efc7eb90ce0..d937edbd7c33c2 100644 --- a/deps/icu-small/source/common/rbbistbl.cpp +++ b/deps/icu-small/source/common/rbbistbl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbistbl.cpp Implementation of the ICU RBBISymbolTable class // @@ -17,10 +19,10 @@ #include "unicode/uchar.h" #include "unicode/parsepos.h" -#include "umutex.h" - -#include "rbbirb.h" +#include "cstr.h" #include "rbbinode.h" +#include "rbbirb.h" +#include "umutex.h" // @@ -43,7 +45,7 @@ RBBISymbolTable::RBBISymbolTable(RBBIRuleScanner *rs, const UnicodeString &rules { fHashTable = NULL; fCachedSetLookup = NULL; - + fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status); // uhash_open checks status if (U_FAILURE(status)) { @@ -226,9 +228,9 @@ RBBISymbolTableEntry::~RBBISymbolTableEntry() { // #ifdef RBBI_DEBUG void RBBISymbolTable::rbbiSymtablePrint() const { - RBBIDebugPrintf("Variable Definitions\n" - "Name Node Val String Val\n" - "----------------------------------------------------------------------\n"); + RBBIDebugPrintf("Variable Definitions Symbol Table\n" + "Name Node serial String Val\n" + "-------------------------------------------------------------------\n"); int32_t pos = UHASH_FIRST; const UHashElement *e = NULL; @@ -239,10 +241,8 @@ void RBBISymbolTable::rbbiSymtablePrint() const { } RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; - RBBI_DEBUG_printUnicodeString(s->key, 15); - RBBIDebugPrintf(" %8p ", (void *)s->val); - RBBI_DEBUG_printUnicodeString(s->val->fLeftChild->fText); - RBBIDebugPrintf("\n"); + RBBIDebugPrintf("%-19s %8p %7d ", CStr(s->key)(), (void *)s->val, s->val->fSerialNum); + RBBIDebugPrintf(" %s\n", CStr(s->val->fLeftChild->fText)()); } RBBIDebugPrintf("\nParsed Variable Definitions\n"); @@ -253,8 +253,9 @@ void RBBISymbolTable::rbbiSymtablePrint() const { break; } RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; - RBBI_DEBUG_printUnicodeString(s->key); - s->val->fLeftChild->printTree(TRUE); + RBBIDebugPrintf("%s\n", CStr(s->key)()); + RBBINode::printTree(s->val, TRUE); + RBBINode::printTree(s->val->fLeftChild, FALSE); RBBIDebugPrintf("\n"); } } diff --git a/deps/icu-small/source/common/rbbitblb.cpp b/deps/icu-small/source/common/rbbitblb.cpp index c2057e167a3d28..2738c7500882aa 100644 --- a/deps/icu-small/source/common/rbbitblb.cpp +++ b/deps/icu-small/source/common/rbbitblb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -79,16 +81,16 @@ void RBBITableBuilder::build() { #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ftree")) { RBBIDebugPuts("\nParse tree after flattening variable references."); - fTree->printTree(TRUE); + RBBINode::printTree(fTree, TRUE); } #endif // - // If the rules contained any references to {bof} + // If the rules contained any references to {bof} // add a {bof} to the - // tree. Means that all matches must start out with the + // tree. Means that all matches must start out with the // {bof} fake character. - // + // if (fRB->fSetBuilder->sawBOF()) { RBBINode *bofTop = new RBBINode(RBBINode::opCat); RBBINode *bofLeaf = new RBBINode(RBBINode::leafChar); @@ -137,7 +139,7 @@ void RBBITableBuilder::build() { #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "stree")) { RBBIDebugPuts("\nParse tree after flattening Unicode Set references."); - fTree->printTree(TRUE); + RBBINode::printTree(fTree, TRUE); } #endif @@ -421,9 +423,9 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) { } // Collect all leaf nodes that can start matches for rules - // with inbound chaining enabled, which is the union of the + // with inbound chaining enabled, which is the union of the // firstPosition sets from each of the rule root nodes. - + UVector ruleRootNodes(*fStatus); addRuleRootNodes(&ruleRootNodes, tree); @@ -534,7 +536,7 @@ void RBBITableBuilder::bofFixup() { // (excluding the fake bofNode) // We want the nodes that can start a match in the // part labeled "rest of tree" - // + // UVector *matchStartNodes = fTree->fLeftChild->fRightChild->fFirstPosSet; RBBINode *startNode; @@ -550,7 +552,7 @@ void RBBITableBuilder::bofFixup() { // explicitly written into a rule. // Add everything from the followPos set of this node to the // followPos set of the fake bofNode at the start of the tree. - // + // setAdd(bofNode->fFollowPos, startNode->fFollowPos); } } @@ -571,7 +573,7 @@ void RBBITableBuilder::buildStateTable() { } RBBIStateDescriptor *failState; // Set it to NULL to avoid uninitialized warning - RBBIStateDescriptor *initialState = NULL; + RBBIStateDescriptor *initialState = NULL; // // Add a dummy state 0 - the stop state. Not from Aho. int lastInputSymbol = fRB->fSetBuilder->getNumCharCategories() - 1; @@ -648,8 +650,8 @@ void RBBITableBuilder::buildStateTable() { if (U == NULL) { U = new UVector(*fStatus); if (U == NULL) { - *fStatus = U_MEMORY_ALLOCATION_ERROR; - goto ExitBuildSTdeleteall; + *fStatus = U_MEMORY_ALLOCATION_ERROR; + goto ExitBuildSTdeleteall; } } setAdd(U, p->fFollowPos); @@ -679,7 +681,7 @@ void RBBITableBuilder::buildStateTable() { { RBBIStateDescriptor *newState = new RBBIStateDescriptor(lastInputSymbol, fStatus); if (newState == NULL) { - *fStatus = U_MEMORY_ALLOCATION_ERROR; + *fStatus = U_MEMORY_ALLOCATION_ERROR; } if (U_FAILURE(*fStatus)) { goto ExitBuildSTdeleteall; @@ -1058,7 +1060,7 @@ void RBBITableBuilder::printPosSets(RBBINode *n) { } printf("\n"); RBBINode::printNodeHeader(); - n->printNode(); + RBBINode::printNode(n); RBBIDebugPrintf(" Nullable: %s\n", n->fNullable?"TRUE":"FALSE"); RBBIDebugPrintf(" firstpos: "); diff --git a/deps/icu-small/source/common/rbbitblb.h b/deps/icu-small/source/common/rbbitblb.h index 9e65bd93d01a22..d71a0245874b5d 100644 --- a/deps/icu-small/source/common/rbbitblb.h +++ b/deps/icu-small/source/common/rbbitblb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbitblb.h // diff --git a/deps/icu-small/source/common/resbund.cpp b/deps/icu-small/source/common/resbund.cpp index 8d91184da53066..7bd6b32b0812e4 100644 --- a/deps/icu-small/source/common/resbund.cpp +++ b/deps/icu-small/source/common/resbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2013, International Business Machines @@ -203,7 +205,7 @@ ResourceBundle::ResourceBundle(UResourceBundle *res, UErrorCode& err) } } -ResourceBundle::ResourceBundle(const char* path, const Locale& locale, UErrorCode& err) +ResourceBundle::ResourceBundle(const char* path, const Locale& locale, UErrorCode& err) :UObject(), fLocale(NULL) { fResource = ures_open(path, locale.getName(), &err); diff --git a/deps/icu-small/source/common/resbund_cnv.cpp b/deps/icu-small/source/common/resbund_cnv.cpp index ecb2e8ab5f07f0..65c32b5207104f 100644 --- a/deps/icu-small/source/common/resbund_cnv.cpp +++ b/deps/icu-small/source/common/resbund_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -37,7 +39,7 @@ ResourceBundle::ResourceBundle( const UnicodeString& path, constructForLocale(path, Locale::getDefault(), error); } -void +void ResourceBundle::constructForLocale(const UnicodeString& path, const Locale& locale, UErrorCode& error) diff --git a/deps/icu-small/source/common/resource.cpp b/deps/icu-small/source/common/resource.cpp index 7a4c4181bf834c..62b3aa46a5c083 100644 --- a/deps/icu-small/source/common/resource.cpp +++ b/deps/icu-small/source/common/resource.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2015, International Business Machines +* Copyright (C) 2015-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * resource.cpp @@ -11,50 +13,10 @@ #include "resource.h" -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/ures.h" - U_NAMESPACE_BEGIN ResourceValue::~ResourceValue() {} - -ResourceArraySink::~ResourceArraySink() {} - -void ResourceArraySink::put( - int32_t /*index*/, const ResourceValue & /*value*/, UErrorCode & /*errorCode*/) {} - -ResourceArraySink *ResourceArraySink::getOrCreateArraySink( - int32_t /*index*/, int32_t /*size*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -ResourceTableSink *ResourceArraySink::getOrCreateTableSink( - int32_t /*index*/, int32_t /*initialSize*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -void ResourceArraySink::leave(UErrorCode & /*errorCode*/) {} - - -ResourceTableSink::~ResourceTableSink() {} - -void ResourceTableSink::put( - const char * /*key*/, const ResourceValue & /*value*/, UErrorCode & /*errorCode*/) {} - -void ResourceTableSink::putNoFallback(const char * /*key*/, UErrorCode & /*errorCode*/) {} - -ResourceArraySink *ResourceTableSink::getOrCreateArraySink( - const char * /*key*/, int32_t /*size*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -ResourceTableSink *ResourceTableSink::getOrCreateTableSink( - const char * /*key*/, int32_t /*initialSize*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -void ResourceTableSink::leave(UErrorCode & /*errorCode*/) {} +ResourceSink::~ResourceSink() {} U_NAMESPACE_END diff --git a/deps/icu-small/source/common/resource.h b/deps/icu-small/source/common/resource.h index 042e298b798242..43c3309b5e9917 100644 --- a/deps/icu-small/source/common/resource.h +++ b/deps/icu-small/source/common/resource.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2015, International Business Machines +* Copyright (C) 2015-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * resource.h @@ -27,13 +29,80 @@ #include "unicode/unistr.h" #include "unicode/ures.h" +struct ResourceData; + U_NAMESPACE_BEGIN -class ResourceTableSink; +class ResourceValue; // Note: In C++, we use const char * pointers for keys, // rather than an abstraction like Java UResource.Key. +/** + * Interface for iterating over a resource bundle array resource. + */ +class U_COMMON_API ResourceArray { +public: + /** Constructs an empty array object. */ + ResourceArray() : items16(NULL), items32(NULL), length(0) {} + + /** Only for implementation use. @internal */ + ResourceArray(const uint16_t *i16, const uint32_t *i32, int32_t len) : + items16(i16), items32(i32), length(len) {} + + /** + * @return The number of items in the array resource. + */ + int32_t getSize() const { return length; } + /** + * @param i Array item index. + * @param value Output-only, receives the value of the i'th item. + * @return TRUE if i is non-negative and less than getSize(). + */ + UBool getValue(int32_t i, ResourceValue &value) const; + + /** Only for implementation use. @internal */ + uint32_t internalGetResource(const ResourceData *pResData, int32_t i) const; + +private: + const uint16_t *items16; + const uint32_t *items32; + int32_t length; +}; + +/** + * Interface for iterating over a resource bundle table resource. + */ +class U_COMMON_API ResourceTable { +public: + /** Constructs an empty table object. */ + ResourceTable() : keys16(NULL), keys32(NULL), items16(NULL), items32(NULL), length(0) {} + + /** Only for implementation use. @internal */ + ResourceTable(const uint16_t *k16, const int32_t *k32, + const uint16_t *i16, const uint32_t *i32, int32_t len) : + keys16(k16), keys32(k32), items16(i16), items32(i32), length(len) {} + + /** + * @return The number of items in the array resource. + */ + int32_t getSize() const { return length; } + /** + * @param i Array item index. + * @param key Output-only, receives the key of the i'th item. + * @param value Output-only, receives the value of the i'th item. + * @return TRUE if i is non-negative and less than getSize(). + */ + UBool getKeyAndValue(int32_t i, const char *&key, ResourceValue &value) const; + +private: + const uint16_t *keys16; + const int32_t *keys32; + const uint16_t *items16; + const uint32_t *items32; + int32_t length; +}; + /** * Represents a resource bundle item's value. * Avoids object creations as much as possible. @@ -100,147 +169,109 @@ class U_COMMON_API ResourceValue : public UObject { */ virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const = 0; -protected: - ResourceValue() {} - -private: - ResourceValue(const ResourceValue &); // no copy constructor - ResourceValue &operator=(const ResourceValue &); // no assignment operator -}; + /** + * Sets U_RESOURCE_TYPE_MISMATCH if this is not an array resource + */ + virtual ResourceArray getArray(UErrorCode &errorCode) const = 0; -/** - * Sink for ICU resource array contents. - * The base class does nothing. - * - * Nested arrays and tables are stored as nested sinks, - * never put() as ResourceValue items. - */ -class U_COMMON_API ResourceArraySink : public UObject { -public: - ResourceArraySink() {} - virtual ~ResourceArraySink(); + /** + * Sets U_RESOURCE_TYPE_MISMATCH if this is not a table resource + */ + virtual ResourceTable getTable(UErrorCode &errorCode) const = 0; /** - * Adds a value from a resource array. + * Is this a no-fallback/no-inheritance marker string? + * Such a marker is used for + * CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205} + * when enumerating tables with fallback from the specific resource bundle to root. * - * @param index of the resource array item - * @param value resource value + * @return TRUE if this is a no-inheritance marker string */ - virtual void put(int32_t index, const ResourceValue &value, UErrorCode &errorCode); + virtual UBool isNoInheritanceMarker() const = 0; /** - * Returns a nested resource array at the array index as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested arrays are not supported. - * The default implementation always returns NULL. + * Sets the dest strings from the string values in this array resource. * - * This sink (not the caller) owns the nested sink. + * @return the number of strings in this array resource. + * If greater than capacity, then an overflow error is set. * - * @param index of the resource array item - * @param size number of array items - * @return nested-array sink, or NULL + * Sets U_RESOURCE_TYPE_MISMATCH if this is not an array resource + * or if any of the array items is not a string */ - virtual ResourceArraySink *getOrCreateArraySink( - int32_t index, int32_t size, UErrorCode &errorCode); + virtual int32_t getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const = 0; /** - * Returns a nested resource table at the array index as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested tables are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. + * Same as + *
+     * if (getType() == URES_STRING) {
+     *     return new String[] { getString(); }
+     * } else {
+     *     return getStringArray();
+     * }
+     * 
* - * @param index of the resource array item - * @param initialSize size hint for creating the sink if necessary - * @return nested-table sink, or NULL + * Sets U_RESOURCE_TYPE_MISMATCH if this is + * neither a string resource nor an array resource containing strings + * @see getString() + * @see getStringArray() */ - virtual ResourceTableSink *getOrCreateTableSink( - int32_t index, int32_t initialSize, UErrorCode &errorCode); + virtual int32_t getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const = 0; /** - * "Leaves" the array. - * Indicates that all of the resources and sub-resources of the current array - * have been enumerated. + * Same as + *
+     * if (getType() == URES_STRING) {
+     *     return getString();
+     * } else {
+     *     return getStringArray()[0];
+     * }
+     * 
+ * + * Sets U_RESOURCE_TYPE_MISMATCH if this is + * neither a string resource nor an array resource containing strings + * @see getString() + * @see getStringArray() */ - virtual void leave(UErrorCode &errorCode); + virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const = 0; + +protected: + ResourceValue() {} private: - ResourceArraySink(const ResourceArraySink &); // no copy constructor - ResourceArraySink &operator=(const ResourceArraySink &); // no assignment operator + ResourceValue(const ResourceValue &); // no copy constructor + ResourceValue &operator=(const ResourceValue &); // no assignment operator }; /** - * Sink for ICU resource table contents. - * The base class does nothing. - * - * Nested arrays and tables are stored as nested sinks, - * never put() as ResourceValue items. + * Sink for ICU resource bundle contents. */ -class U_COMMON_API ResourceTableSink : public UObject { +class U_COMMON_API ResourceSink : public UObject { public: - ResourceTableSink() {} - virtual ~ResourceTableSink(); - - /** - * Adds a key-value pair from a resource table. - * - * @param key resource key string - * @param value resource value - */ - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode); + ResourceSink() {} + virtual ~ResourceSink(); /** - * Adds a no-fallback/no-inheritance marker for this key. - * Used for CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205} - * when enumerating tables with fallback from the specific resource bundle to root. - * - * The default implementation does nothing. - * - * @param key to be removed - */ - virtual void putNoFallback(const char *key, UErrorCode &errorCode); - - /** - * Returns a nested resource array for the key as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested arrays are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. + * Called once for each bundle (child-parent-...-root). + * The value is normally an array or table resource, + * and implementations of this method normally iterate over the + * tree of resource items stored there. * - * @param key resource key string - * @param size number of array items - * @return nested-array sink, or NULL - */ - virtual ResourceArraySink *getOrCreateArraySink( - const char *key, int32_t size, UErrorCode &errorCode); - - /** - * Returns a nested resource table for the key as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested tables are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. - * - * @param key resource key string - * @param initialSize size hint for creating the sink if necessary - * @return nested-table sink, or NULL - */ - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t initialSize, UErrorCode &errorCode); - - /** - * "Leaves" the table. - * Indicates that all of the resources and sub-resources of the current table - * have been enumerated. + * @param key The key string of the enumeration-start resource. + * Empty if the enumeration starts at the top level of the bundle. + * @param value Call getArray() or getTable() as appropriate. + * Then reuse for output values from Array and Table getters. + * @param noFallback true if the bundle has no parent; + * that is, its top-level table has the nofallback attribute, + * or it is the root bundle of a locale tree. */ - virtual void leave(UErrorCode &errorCode); + virtual void put(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &errorCode) = 0; private: - ResourceTableSink(const ResourceTableSink &); // no copy constructor - ResourceTableSink &operator=(const ResourceTableSink &); // no assignment operator + ResourceSink(const ResourceSink &); // no copy constructor + ResourceSink &operator=(const ResourceSink &); // no assignment operator }; U_NAMESPACE_END diff --git a/deps/icu-small/source/common/ruleiter.cpp b/deps/icu-small/source/common/ruleiter.cpp index 667795efabcf39..6e27b4dd8c609e 100644 --- a/deps/icu-small/source/common/ruleiter.cpp +++ b/deps/icu-small/source/common/ruleiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2011, International Business Machines diff --git a/deps/icu-small/source/common/ruleiter.h b/deps/icu-small/source/common/ruleiter.h index 2fad54f01c9b8d..1221396fe4812d 100644 --- a/deps/icu-small/source/common/ruleiter.h +++ b/deps/icu-small/source/common/ruleiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2011, International Business Machines @@ -37,7 +39,7 @@ class RuleCharacterIterator : public UMemory { private: /** * Text being iterated. - */ + */ const UnicodeString& text; /** @@ -49,7 +51,7 @@ class RuleCharacterIterator : public UMemory { * Symbol table used to parse and dereference variables. May be 0. */ const SymbolTable* sym; - + /** * Current variable expansion, or 0 if none. */ @@ -100,7 +102,7 @@ class RuleCharacterIterator : public UMemory { */ RuleCharacterIterator(const UnicodeString& text, const SymbolTable* sym, ParsePosition& pos); - + /** * Returns true if this iterator has no more characters to return. */ @@ -205,7 +207,7 @@ class RuleCharacterIterator : public UMemory { * representation of this object */ // UnicodeString& toString(UnicodeString& result) const; - + private: /** * Returns the current 32-bit code point without parsing escapes, parsing @@ -213,7 +215,7 @@ class RuleCharacterIterator : public UMemory { * @return the current 32-bit code point */ UChar32 _current() const; - + /** * Advances the position by the given amount. * @param count the number of 16-bit code units to advance past diff --git a/deps/icu-small/source/common/schriter.cpp b/deps/icu-small/source/common/schriter.cpp index 17ce400186969a..cc413666f1a838 100644 --- a/deps/icu-small/source/common/schriter.cpp +++ b/deps/icu-small/source/common/schriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1998-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/serv.cpp b/deps/icu-small/source/common/serv.cpp index b0add499832407..c650ef3a4e0c31 100644 --- a/deps/icu-small/source/common/serv.cpp +++ b/deps/icu-small/source/common/serv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation. @@ -24,60 +26,60 @@ U_NAMESPACE_BEGIN const UChar ICUServiceKey::PREFIX_DELIMITER = 0x002F; /* '/' */ -ICUServiceKey::ICUServiceKey(const UnicodeString& id) +ICUServiceKey::ICUServiceKey(const UnicodeString& id) : _id(id) { } -ICUServiceKey::~ICUServiceKey() +ICUServiceKey::~ICUServiceKey() { } -const UnicodeString& -ICUServiceKey::getID() const +const UnicodeString& +ICUServiceKey::getID() const { return _id; } -UnicodeString& -ICUServiceKey::canonicalID(UnicodeString& result) const +UnicodeString& +ICUServiceKey::canonicalID(UnicodeString& result) const { return result.append(_id); } -UnicodeString& -ICUServiceKey::currentID(UnicodeString& result) const +UnicodeString& +ICUServiceKey::currentID(UnicodeString& result) const { return canonicalID(result); } -UnicodeString& -ICUServiceKey::currentDescriptor(UnicodeString& result) const +UnicodeString& +ICUServiceKey::currentDescriptor(UnicodeString& result) const { prefix(result); result.append(PREFIX_DELIMITER); return currentID(result); } -UBool -ICUServiceKey::fallback() +UBool +ICUServiceKey::fallback() { return FALSE; } -UBool -ICUServiceKey::isFallbackOf(const UnicodeString& id) const +UBool +ICUServiceKey::isFallbackOf(const UnicodeString& id) const { return id == _id; } -UnicodeString& -ICUServiceKey::prefix(UnicodeString& result) const +UnicodeString& +ICUServiceKey::prefix(UnicodeString& result) const { return result; } -UnicodeString& -ICUServiceKey::parsePrefix(UnicodeString& result) +UnicodeString& +ICUServiceKey::parsePrefix(UnicodeString& result) { int32_t n = result.indexOf(PREFIX_DELIMITER); if (n < 0) { @@ -87,8 +89,8 @@ ICUServiceKey::parsePrefix(UnicodeString& result) return result; } -UnicodeString& -ICUServiceKey::parseSuffix(UnicodeString& result) +UnicodeString& +ICUServiceKey::parseSuffix(UnicodeString& result) { int32_t n = result.indexOf(PREFIX_DELIMITER); if (n >= 0) { @@ -98,8 +100,8 @@ ICUServiceKey::parseSuffix(UnicodeString& result) } #ifdef SERVICE_DEBUG -UnicodeString& -ICUServiceKey::debug(UnicodeString& result) const +UnicodeString& +ICUServiceKey::debug(UnicodeString& result) const { debugClass(result); result.append((UnicodeString)" id: "); @@ -107,8 +109,8 @@ ICUServiceKey::debug(UnicodeString& result) const return result; } -UnicodeString& -ICUServiceKey::debugClass(UnicodeString& result) const +UnicodeString& +ICUServiceKey::debugClass(UnicodeString& result) const { return result.append((UnicodeString)"ICUServiceKey"); } @@ -122,30 +124,30 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUServiceKey) ICUServiceFactory::~ICUServiceFactory() {} -SimpleFactory::SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible) +SimpleFactory::SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible) : _instance(instanceToAdopt), _id(id), _visible(visible) { } -SimpleFactory::~SimpleFactory() +SimpleFactory::~SimpleFactory() { delete _instance; } -UObject* -SimpleFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const +UObject* +SimpleFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const { if (U_SUCCESS(status)) { UnicodeString temp; if (_id == key.currentID(temp)) { - return service->cloneInstance(_instance); + return service->cloneInstance(_instance); } } return NULL; } -void -SimpleFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const +void +SimpleFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const { if (_visible) { result.put(_id, (void*)this, status); // cast away const @@ -154,8 +156,8 @@ SimpleFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const } } -UnicodeString& -SimpleFactory::getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const +UnicodeString& +SimpleFactory::getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const { if (_visible && _id == id) { result = _id; @@ -166,8 +168,8 @@ SimpleFactory::getDisplayName(const UnicodeString& id, const Locale& /* locale * } #ifdef SERVICE_DEBUG -UnicodeString& -SimpleFactory::debug(UnicodeString& toAppendTo) const +UnicodeString& +SimpleFactory::debug(UnicodeString& toAppendTo) const { debugClass(toAppendTo); toAppendTo.append((UnicodeString)" id: "); @@ -177,8 +179,8 @@ SimpleFactory::debug(UnicodeString& toAppendTo) const return toAppendTo; } -UnicodeString& -SimpleFactory::debugClass(UnicodeString& toAppendTo) const +UnicodeString& +SimpleFactory::debugClass(UnicodeString& toAppendTo) const { return toAppendTo.append((UnicodeString)"SimpleFactory"); } @@ -215,14 +217,14 @@ class CacheEntry : public UMemory { delete service; } - CacheEntry(const UnicodeString& _actualDescriptor, UObject* _service) + CacheEntry(const UnicodeString& _actualDescriptor, UObject* _service) : refcount(1), actualDescriptor(_actualDescriptor), service(_service) { } /** * Instantiation creates an initial reference, so don't call this * unless you're creating a new pointer to this. Management of - * that pointer will have to know how to deal with refcounts. + * that pointer will have to know how to deal with refcounts. * Return true if the resource has not already been released. */ CacheEntry* ref() { @@ -279,8 +281,8 @@ class DNCache : public UMemory { Hashtable cache; const Locale locale; - DNCache(const Locale& _locale) - : cache(), locale(_locale) + DNCache(const Locale& _locale) + : cache(), locale(_locale) { // cache.setKeyDeleter(uprv_deleteUObject); } @@ -291,8 +293,8 @@ class DNCache : public UMemory { ****************************************************************** */ -StringPair* -StringPair::create(const UnicodeString& displayName, +StringPair* +StringPair::create(const UnicodeString& displayName, const UnicodeString& id, UErrorCode& status) { @@ -308,12 +310,12 @@ StringPair::create(const UnicodeString& displayName, return NULL; } -UBool +UBool StringPair::isBogus() const { return displayName.isBogus() || id.isBogus(); } -StringPair::StringPair(const UnicodeString& _displayName, +StringPair::StringPair(const UnicodeString& _displayName, const UnicodeString& _id) : displayName(_displayName) , id(_id) @@ -343,7 +345,7 @@ ICUService::ICUService() { } -ICUService::ICUService(const UnicodeString& newName) +ICUService::ICUService(const UnicodeString& newName) : name(newName) , timestamp(0) , factories(NULL) @@ -363,14 +365,14 @@ ICUService::~ICUService() } } -UObject* -ICUService::get(const UnicodeString& descriptor, UErrorCode& status) const +UObject* +ICUService::get(const UnicodeString& descriptor, UErrorCode& status) const { return get(descriptor, NULL, status); } -UObject* -ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const +UObject* +ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const { UObject* result = NULL; ICUServiceKey* key = createKey(&descriptor, status); @@ -381,8 +383,8 @@ ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UE return result; } -UObject* -ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const +UObject* +ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const { return getKey(key, NULL, status); } @@ -390,8 +392,8 @@ ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const // this is a vector that subclasses of ICUService can override to further customize the result object // before returning it. All other public get functions should call this one. -UObject* -ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const +UObject* +ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const { return getKey(key, actualReturn, NULL, status); } @@ -401,9 +403,9 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& // reentrantly even without knowing the thread. class XMutex : public UMemory { public: - inline XMutex(UMutex *mutex, UBool reentering) + inline XMutex(UMutex *mutex, UBool reentering) : fMutex(mutex) - , fActive(!reentering) + , fActive(!reentering) { if (fActive) umtx_lock(fMutex); } @@ -423,8 +425,8 @@ struct UVectorDeleter { }; // called only by factories, treat as private -UObject* -ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const +UObject* +ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const { if (U_FAILURE(status)) { return NULL; @@ -438,10 +440,10 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer CacheEntry* result = NULL; { - // The factory list can't be modified until we're done, + // The factory list can't be modified until we're done, // otherwise we might update the cache with an invalid result. // The cache has to stay in synch with the factory list. - // ICU doesn't have monitors so we can't use rw locks, so + // ICU doesn't have monitors so we can't use rw locks, so // we single-thread everything using this service, for now. // if factory is not null, we're calling from within the mutex, @@ -493,7 +495,7 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer } // first test of cache failed, so we'll have to update - // the cache if we eventually succeed-- that is, if we're + // the cache if we eventually succeed-- that is, if we're // going to update the cache at all. putInCache = TRUE; @@ -517,7 +519,7 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer } } - // prepare to load the cache with all additional ids that + // prepare to load the cache with all additional ids that // will resolve to result, assuming we'll succeed. We // don't want to keep querying on an id that's going to // fallback to the one that succeeded, we want to hit the @@ -568,8 +570,8 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer // strip null prefix if (result->actualDescriptor.indexOf((UChar)0x2f) == 0) { // U+002f=slash (/) actualReturn->remove(); - actualReturn->append(result->actualDescriptor, - 1, + actualReturn->append(result->actualDescriptor, + 1, result->actualDescriptor.length() - 1); } else { *actualReturn = result->actualDescriptor; @@ -593,19 +595,19 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer return handleDefault(key, actualReturn, status); } -UObject* -ICUService::handleDefault(const ICUServiceKey& /* key */, UnicodeString* /* actualIDReturn */, UErrorCode& /* status */) const +UObject* +ICUService::handleDefault(const ICUServiceKey& /* key */, UnicodeString* /* actualIDReturn */, UErrorCode& /* status */) const { return NULL; } -UVector& +UVector& ICUService::getVisibleIDs(UVector& result, UErrorCode& status) const { return getVisibleIDs(result, NULL, status); } -UVector& -ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorCode& status) const +UVector& +ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorCode& status) const { result.removeAllElements(); @@ -653,7 +655,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC return result; } -const Hashtable* +const Hashtable* ICUService::getVisibleIDMap(UErrorCode& status) const { if (U_FAILURE(status)) return NULL; @@ -680,14 +682,14 @@ ICUService::getVisibleIDMap(UErrorCode& status) const { } -UnicodeString& -ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result) const +UnicodeString& +ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result) const { return getDisplayName(id, result, Locale::getDefault()); } -UnicodeString& -ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const +UnicodeString& +ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const { { UErrorCode status = U_ZERO_ERROR; @@ -720,24 +722,24 @@ ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const return result; } -UVector& -ICUService::getDisplayNames(UVector& result, UErrorCode& status) const +UVector& +ICUService::getDisplayNames(UVector& result, UErrorCode& status) const { return getDisplayNames(result, Locale::getDefault(), NULL, status); } -UVector& -ICUService::getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const +UVector& +ICUService::getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const { return getDisplayNames(result, locale, NULL, status); } -UVector& -ICUService::getDisplayNames(UVector& result, - const Locale& locale, - const UnicodeString* matchID, - UErrorCode& status) const +UVector& +ICUService::getDisplayNames(UVector& result, + const Locale& locale, + const UnicodeString* matchID, + UErrorCode& status) const { result.removeAllElements(); result.setDeleter(userv_deleteStringPair); @@ -755,7 +757,7 @@ ICUService::getDisplayNames(UVector& result, if (U_FAILURE(status)) { return result; } - ncthis->dnCache = new DNCache(locale); + ncthis->dnCache = new DNCache(locale); if (dnCache == NULL) { status = U_MEMORY_ALLOCATION_ERROR; return result; @@ -788,7 +790,7 @@ ICUService::getDisplayNames(UVector& result, * nextElement(pos) will skip the position at pos and begin the iteration * at the next position, which in this case will be 0. */ - int32_t pos = UHASH_FIRST; + int32_t pos = UHASH_FIRST; const UHashElement *entry = NULL; while ((entry = dnCache->cache.nextElement(pos)) != NULL) { const UnicodeString* id = (const UnicodeString*)entry->value.pointer; @@ -809,13 +811,13 @@ ICUService::getDisplayNames(UVector& result, } URegistryKey -ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status) +ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status) { return registerInstance(objToAdopt, id, TRUE, status); } URegistryKey -ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status) +ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status) { ICUServiceKey* key = createKey(&id, status); if (key != NULL) { @@ -832,7 +834,7 @@ ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool return NULL; } -ICUServiceFactory* +ICUServiceFactory* ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status) { if (U_SUCCESS(status)) { @@ -845,7 +847,7 @@ ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UB } URegistryKey -ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status) +ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status) { if (U_SUCCESS(status) && factoryToAdopt != NULL) { Mutex mutex(&lock); @@ -873,8 +875,8 @@ ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& statu return (URegistryKey)factoryToAdopt; } -UBool -ICUService::unregister(URegistryKey rkey, UErrorCode& status) +UBool +ICUService::unregister(URegistryKey rkey, UErrorCode& status) { ICUServiceFactory *factory = (ICUServiceFactory*)rkey; UBool result = FALSE; @@ -895,8 +897,8 @@ ICUService::unregister(URegistryKey rkey, UErrorCode& status) return result; } -void -ICUService::reset() +void +ICUService::reset() { { Mutex mutex(&lock); @@ -906,28 +908,28 @@ ICUService::reset() notifyChanged(); } -void -ICUService::reInitializeFactories() +void +ICUService::reInitializeFactories() { if (factories != NULL) { factories->removeAllElements(); } } -UBool -ICUService::isDefault() const +UBool +ICUService::isDefault() const { return countFactories() == 0; } -ICUServiceKey* -ICUService::createKey(const UnicodeString* id, UErrorCode& status) const +ICUServiceKey* +ICUService::createKey(const UnicodeString* id, UErrorCode& status) const { return (U_FAILURE(status) || id == NULL) ? NULL : new ICUServiceKey(*id); } -void -ICUService::clearCaches() +void +ICUService::clearCaches() { // callers synchronize before use ++timestamp; @@ -938,33 +940,33 @@ ICUService::clearCaches() delete serviceCache; serviceCache = NULL; } -void -ICUService::clearServiceCache() +void +ICUService::clearServiceCache() { // callers synchronize before use delete serviceCache; serviceCache = NULL; } -UBool -ICUService::acceptsListener(const EventListener& l) const +UBool +ICUService::acceptsListener(const EventListener& l) const { return dynamic_cast(&l) != NULL; } -void -ICUService::notifyListener(EventListener& l) const +void +ICUService::notifyListener(EventListener& l) const { ((ServiceListener&)l).serviceChanged(*this); } UnicodeString& -ICUService::getName(UnicodeString& result) const +ICUService::getName(UnicodeString& result) const { return result.append(name); } -int32_t -ICUService::countFactories() const +int32_t +ICUService::countFactories() const { return factories == NULL ? 0 : factories->size(); } diff --git a/deps/icu-small/source/common/serv.h b/deps/icu-small/source/common/serv.h index 602c3d3b1342f1..679c4435a1e7db 100644 --- a/deps/icu-small/source/common/serv.h +++ b/deps/icu-small/source/common/serv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2011, International Business Machines Corporation. * @@ -59,16 +61,16 @@ class DNCache; * The descriptor contains an optional prefix, followed by '/' * and the currentID. Factories that handle complex keys, * for example number format factories that generate multiple - * kinds of formatters for the same locale, use the descriptor - * to provide a fully unique identifier for the service object, + * kinds of formatters for the same locale, use the descriptor + * to provide a fully unique identifier for the service object, * while using the currentID (in this case, the locale string), * as the visible IDs that can be localized.

* *

The default implementation of ICUServiceKey has no fallbacks and - * has no custom descriptors.

+ * has no custom descriptors.

*/ class U_COMMON_API ICUServiceKey : public UObject { - private: + private: const UnicodeString _id; protected: @@ -109,7 +111,7 @@ class U_COMMON_API ICUServiceKey : public UObject { * the canonical ID to result. Result is returned as a convenience.

* * @param result the output parameter to which the current id will be appended. - * @return the modified result. + * @return the modified result. */ virtual UnicodeString& currentID(UnicodeString& result) const; @@ -125,7 +127,7 @@ class U_COMMON_API ICUServiceKey : public UObject { * instantiate the service.

* * @param result the output parameter to which the current id will be appended. - * @return the modified result. + * @return the modified result. */ virtual UnicodeString& currentDescriptor(UnicodeString& result) const; @@ -160,10 +162,10 @@ class U_COMMON_API ICUServiceKey : public UObject { /** *

A utility to parse the prefix out of a descriptor string. Only - * the (undelimited) prefix, if any, remains in result. Result is returned as a + * the (undelimited) prefix, if any, remains in result. Result is returned as a * convenience.

* - * @param result an input/output parameter that on entry is a descriptor, and + * @param result an input/output parameter that on entry is a descriptor, and * on exit is the prefix of that descriptor. * @return the modified result. */ @@ -171,10 +173,10 @@ class U_COMMON_API ICUServiceKey : public UObject { /** *

A utility to parse the suffix out of a descriptor string. Only - * the (undelimited) suffix, if any, remains in result. Result is returned as a + * the (undelimited) suffix, if any, remains in result. Result is returned as a * convenience.

* - * @param result an input/output parameter that on entry is a descriptor, and + * @param result an input/output parameter that on entry is a descriptor, and * on exit is the suffix of that descriptor. * @return the modified result. */ @@ -252,7 +254,7 @@ class U_COMMON_API ICUServiceFactory : public UObject { /** *

Return, in result, the display name of the id in the provided locale. - * This is an id, not a descriptor. If the id is + * This is an id, not a descriptor. If the id is * not visible, sets result to bogus. If the * incoming result is bogus, it remains bogus. Result is returned as a * convenience. Results are not defined if id is not one supported by this @@ -288,7 +290,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { public: /** - *

Construct a SimpleFactory that maps a single ID to a single + *

Construct a SimpleFactory that maps a single ID to a single * service instance. If visible is TRUE, the ID will be visible. * The instance must not be NULL. The SimpleFactory will adopt * the instance, which must not be changed subsequent to this call.

@@ -316,7 +318,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; /** - *

This implementation adds a mapping from ID -> this to result if visible is TRUE, + *

This implementation adds a mapping from ID -> this to result if visible is TRUE, * otherwise it removes ID from result.

* * @param result the mapping table to update. @@ -374,22 +376,22 @@ class U_COMMON_API ServiceListener : public EventListener { *

This method is called when the service changes. At the time of the * call this listener is registered with the service. It must * not modify the notifier in the context of this call.

- * + * * @param service the service that changed. */ virtual void serviceChanged(const ICUService& service) const = 0; - + public: /** * UObject RTTI boilerplate. */ static UClassID U_EXPORT2 getStaticClassID(); - + /** * UObject RTTI boilerplate. */ virtual UClassID getDynamicClassID() const; - + }; /* @@ -420,7 +422,7 @@ class U_COMMON_API StringPair : public UMemory { * @param status the error code status. * @return a StringPair if the creation was successful, otherwise NULL. */ - static StringPair* create(const UnicodeString& displayName, + static StringPair* create(const UnicodeString& displayName, const UnicodeString& id, UErrorCode& status); @@ -519,10 +521,10 @@ class U_COMMON_API StringPair : public UMemory { * subclass of ICUService that uses Locale names as IDs and uses * ICUServiceKeys that implement the standard resource bundle fallback * strategy. Most clients will wish to subclass it instead of - * ICUService.

+ * ICUService.

*/ class U_COMMON_API ICUService : public ICUNotifier { - protected: + protected: /** * Name useful for debugging. */ @@ -629,7 +631,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * has no fallback. If no object is found, the result of handleDefault * is returned.

* - *

Subclasses can override this method to further customize the + *

Subclasses can override this method to further customize the * result before returning it. * * @param key the key. @@ -644,7 +646,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * of a previous getKey call, to determine what previously-registered factories would * have returned. For details, see getKey(ICUServiceKey&, UErrorCode&). Subclasses * should not call it directly, but call through one of the other get functions.

- * + * * @param key the key. * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL. * @param factory the factory making the recursive call. @@ -708,7 +710,7 @@ class U_COMMON_API ICUService : public ICUNotifier { UnicodeString& getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const; /** - *

Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that + *

Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that * uses the current default Locale as the locale and NULL for * the matchID.

* @@ -719,7 +721,7 @@ class U_COMMON_API ICUService : public ICUNotifier { UVector& getDisplayNames(UVector& result, UErrorCode& status) const; /** - *

Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that + *

Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that * uses NULL for the matchID.

* * @param result a vector to hold the returned displayName/id StringPairs. @@ -753,8 +755,8 @@ class U_COMMON_API ICUService : public ICUNotifier { * @param status the error code status. * @return the result vector. */ UVector& getDisplayNames(UVector& result, - const Locale& locale, - const UnicodeString* matchID, + const Locale& locale, + const UnicodeString* matchID, UErrorCode& status) const; /** @@ -770,7 +772,7 @@ class U_COMMON_API ICUService : public ICUNotifier { URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status); /** - *

Register a service instance with the provided ID. The ID will be + *

Register a service instance with the provided ID. The ID will be * canonicalized. The canonicalized ID will be returned by * getVisibleIDs if visible is TRUE. The service instance will be adopted and * must not be modified subsequent to this call.

@@ -817,7 +819,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * listeners.

* * @param rkey the registry key. - * @param status the error code status. + * @param status the error code status. * @return TRUE if the call successfully unregistered the factory. */ virtual UBool unregister(URegistryKey rkey, UErrorCode& status); @@ -833,7 +835,7 @@ class U_COMMON_API ICUService : public ICUNotifier { /** *

Return TRUE if the service is in its default state.

* - *

The default implementation returns TRUE if there are no + *

The default implementation returns TRUE if there are no * factories registered.

*/ virtual UBool isDefault(void) const; @@ -991,3 +993,4 @@ U_NAMESPACE_END /* ICUSERV_H */ #endif + diff --git a/deps/icu-small/source/common/servlk.cpp b/deps/icu-small/source/common/servlk.cpp index 5636091fd962dc..319d7b87fac819 100644 --- a/deps/icu-small/source/common/servlk.cpp +++ b/deps/icu-small/source/common/servlk.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -182,3 +184,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/servlkf.cpp b/deps/icu-small/source/common/servlkf.cpp index b03d29befbae41..114d64389bf823 100644 --- a/deps/icu-small/source/common/servlkf.cpp +++ b/deps/icu-small/source/common/servlkf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -103,9 +105,9 @@ LocaleKeyFactory::getDisplayName(const UnicodeString& id, const Locale& locale, } UObject* -LocaleKeyFactory::handleCreate(const Locale& /* loc */, - int32_t /* kind */, - const ICUService* /* service */, +LocaleKeyFactory::handleCreate(const Locale& /* loc */, + int32_t /* kind */, + const ICUService* /* service */, UErrorCode& /* status */) const { return NULL; } @@ -146,3 +148,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/servloc.h b/deps/icu-small/source/common/servloc.h index ade941cc34a906..7faec510790b2b 100644 --- a/deps/icu-small/source/common/servloc.h +++ b/deps/icu-small/source/common/servloc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2011, International Business Machines Corporation and * @@ -58,11 +60,11 @@ class ServiceListener; * *

Canonicalization adjusts the locale string so that the * section before the first understore is in lower case, and the rest - * is in upper case, with no trailing underscores.

+ * is in upper case, with no trailing underscores.

*/ class U_COMMON_API LocaleKey : public ICUServiceKey { - private: + private: int32_t _kind; UnicodeString _primaryID; UnicodeString _fallbackID; @@ -76,15 +78,15 @@ class U_COMMON_API LocaleKey : public ICUServiceKey { /** * Create a LocaleKey with canonical primary and fallback IDs. */ - static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, + static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, const UnicodeString* canonicalFallbackID, UErrorCode& status); /** * Create a LocaleKey with canonical primary and fallback IDs. */ - static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, - const UnicodeString* canonicalFallbackID, + static LocaleKey* createWithCanonicalFallback(const UnicodeString* primaryID, + const UnicodeString* canonicalFallbackID, int32_t kind, UErrorCode& status); @@ -95,9 +97,9 @@ class U_COMMON_API LocaleKey : public ICUServiceKey { * fallbackID is the current default locale's string in * canonical form. */ - LocaleKey(const UnicodeString& primaryID, - const UnicodeString& canonicalPrimaryID, - const UnicodeString* canonicalFallbackID, + LocaleKey(const UnicodeString& primaryID, + const UnicodeString& canonicalPrimaryID, + const UnicodeString* canonicalFallbackID, int32_t kind); public: @@ -143,16 +145,16 @@ class U_COMMON_API LocaleKey : public ICUServiceKey { *

First falls back through the primary ID, then through * the fallbackID. The final fallback is the empty string, * unless the primary id was the empty string, in which case - * there is no fallback. + * there is no fallback. */ virtual UBool fallback(); /** * Return true if a key created from id matches, or would eventually - * fallback to match, the canonical ID of this key. + * fallback to match, the canonical ID of this key. */ virtual UBool isFallbackOf(const UnicodeString& id) const; - + public: /** * UObject boilerplate. @@ -181,7 +183,7 @@ class U_COMMON_API LocaleKey : public ICUServiceKey { /** * A subclass of ICUServiceFactory that uses LocaleKeys, and is able to * 'cover' more specific locales with more general locales that it - * supports. + * supports. * *

Coverage may be either of the values VISIBLE or INVISIBLE. * @@ -201,7 +203,7 @@ class U_COMMON_API LocaleKeyFactory : public ICUServiceFactory { enum { /** * Coverage value indicating that the factory makes - * its locales visible, and does not cover more specific + * its locales visible, and does not cover more specific * locales. */ VISIBLE = 0, @@ -261,13 +263,13 @@ class U_COMMON_API LocaleKeyFactory : public ICUServiceFactory { virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const; /** - * Return true if this id is one the factory supports (visible or + * Return true if this id is one the factory supports (visible or * otherwise). */ // virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const; /** - * Return the set of ids that this factory supports (visible or + * Return the set of ids that this factory supports (visible or * otherwise). This can be called often and might need to be * cached if it is expensive to create. */ @@ -304,14 +306,14 @@ class U_COMMON_API SimpleLocaleKeyFactory : public LocaleKeyFactory { const int32_t _kind; public: - SimpleLocaleKeyFactory(UObject* objToAdopt, - const UnicodeString& locale, - int32_t kind, + SimpleLocaleKeyFactory(UObject* objToAdopt, + const UnicodeString& locale, + int32_t kind, int32_t coverage); - SimpleLocaleKeyFactory(UObject* objToAdopt, - const Locale& locale, - int32_t kind, + SimpleLocaleKeyFactory(UObject* objToAdopt, + const Locale& locale, + int32_t kind, int32_t coverage); /** @@ -364,7 +366,7 @@ class U_COMMON_API SimpleLocaleKeyFactory : public LocaleKeyFactory { * IDs. Subclasses then override handleCreate to create the actual service * object. The default implementation returns a resource bundle. */ -class U_COMMON_API ICUResourceBundleFactory : public LocaleKeyFactory +class U_COMMON_API ICUResourceBundleFactory : public LocaleKeyFactory { protected: UnicodeString _bundleName; @@ -420,7 +422,7 @@ class U_COMMON_API ICUResourceBundleFactory : public LocaleKeyFactory ****************************************************************** */ -class U_COMMON_API ICULocaleService : public ICUService +class U_COMMON_API ICULocaleService : public ICUService { private: Locale fallbackLocale; @@ -445,7 +447,7 @@ class U_COMMON_API ICULocaleService : public ICUService #if 0 // redeclare because of overload resolution rules? // no, causes ambiguities since both UnicodeString and Locale have constructors that take a const char* - // need some compiler flag to remove warnings + // need some compiler flag to remove warnings UObject* get(const UnicodeString& descriptor, UErrorCode& status) const { return ICUService::get(descriptor, status); } @@ -473,12 +475,12 @@ class U_COMMON_API ICULocaleService : public ICUService * get(Locale, String, Locale[]) with a null kind. */ UObject* get(const Locale& locale, Locale* actualReturn, UErrorCode& status) const; - + /** * Convenience override for callers using locales. This uses * createKey(Locale.toString(), kind) to create a key, calls getKey, and then * if actualReturn is not null, returns the actualResult from - * getKey (stripping any prefix) into a Locale. + * getKey (stripping any prefix) into a Locale. */ UObject* get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const; @@ -546,3 +548,4 @@ U_NAMESPACE_END /* ICULSERV_H */ #endif + diff --git a/deps/icu-small/source/common/servls.cpp b/deps/icu-small/source/common/servls.cpp index cc53ab5e92d8ae..71c6c44a8f092d 100644 --- a/deps/icu-small/source/common/servls.cpp +++ b/deps/icu-small/source/common/servls.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -91,12 +93,12 @@ ICULocaleService::get(const Locale& locale, int32_t kind, Locale* actualReturn, URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, +ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status) { Locale loc; LocaleUtility::initLocaleFromName(locale, loc); - return registerInstance(objToAdopt, loc, LocaleKey::KIND_ANY, + return registerInstance(objToAdopt, loc, LocaleKey::KIND_ANY, visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, status); } @@ -289,3 +291,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/servnotf.cpp b/deps/icu-small/source/common/servnotf.cpp index 33e7f177be871b..69a81da252574e 100644 --- a/deps/icu-small/source/common/servnotf.cpp +++ b/deps/icu-small/source/common/servnotf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2012, International Business Machines Corporation and * @@ -21,8 +23,8 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EventListener) static UMutex notifyLock = U_MUTEX_INITIALIZER; -ICUNotifier::ICUNotifier(void) -: listeners(NULL) +ICUNotifier::ICUNotifier(void) +: listeners(NULL) { } @@ -35,8 +37,8 @@ ICUNotifier::~ICUNotifier(void) { } -void -ICUNotifier::addListener(const EventListener* l, UErrorCode& status) +void +ICUNotifier::addListener(const EventListener* l, UErrorCode& status) { if (U_SUCCESS(status)) { if (l == NULL) { @@ -68,8 +70,8 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status) } } -void -ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) +void +ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) { if (U_SUCCESS(status)) { if (l == NULL) { @@ -97,8 +99,8 @@ ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) } } -void -ICUNotifier::notifyChanged(void) +void +ICUNotifier::notifyChanged(void) { if (listeners != NULL) { Mutex lmx(¬ifyLock); @@ -115,3 +117,4 @@ U_NAMESPACE_END /* UCONFIG_NO_SERVICE */ #endif + diff --git a/deps/icu-small/source/common/servnotf.h b/deps/icu-small/source/common/servnotf.h index c8959f0c16d724..05606ff6b32f75 100644 --- a/deps/icu-small/source/common/servnotf.h +++ b/deps/icu-small/source/common/servnotf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -32,7 +34,7 @@ U_NAMESPACE_END U_NAMESPACE_BEGIN class U_COMMON_API EventListener : public UObject { -public: +public: virtual ~EventListener(); public: @@ -60,54 +62,54 @@ class U_COMMON_API EventListener : public UObject { * eventually dequeues the list and calls notifyListener on each * listener in the list.

* - *

Subclasses override acceptsListener and notifyListener + *

Subclasses override acceptsListener and notifyListener * to add type-safe notification. AcceptsListener should return * true if the listener is of the appropriate type; ICUNotifier * itself will ensure the listener is non-null and that the * identical listener is not already registered with the Notifier. - * NotifyListener should cast the listener to the appropriate + * NotifyListener should cast the listener to the appropriate * type and call the appropriate method on the listener. */ class U_COMMON_API ICUNotifier : public UMemory { private: UVector* listeners; - -public: + +public: ICUNotifier(void); - + virtual ~ICUNotifier(void); - + /** * Add a listener to be notified when notifyChanged is called. * The listener must not be null. AcceptsListener must return * true for the listener. Attempts to concurrently * register the identical listener more than once will be - * silently ignored. + * silently ignored. */ virtual void addListener(const EventListener* l, UErrorCode& status); - + /** * Stop notifying this listener. The listener must * not be null. Attemps to remove a listener that is * not registered will be silently ignored. */ virtual void removeListener(const EventListener* l, UErrorCode& status); - + /** * ICU doesn't spawn its own threads. All listeners are notified in * the thread of the caller. Misbehaved listeners can therefore * indefinitely block the calling thread. Callers should beware of - * deadlock situations. + * deadlock situations. */ virtual void notifyChanged(void); - -protected: + +protected: /** * Subclasses implement this to return TRUE if the listener is * of the appropriate type. */ virtual UBool acceptsListener(const EventListener& l) const = 0; - + /** * Subclasses implement this to notify the listener. */ diff --git a/deps/icu-small/source/common/servrbf.cpp b/deps/icu-small/source/common/servrbf.cpp index 274016e94172c6..299695e2af81d0 100644 --- a/deps/icu-small/source/common/servrbf.cpp +++ b/deps/icu-small/source/common/servrbf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -90,3 +92,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/servslkf.cpp b/deps/icu-small/source/common/servslkf.cpp index 0ee66b4cfe3c76..4cf66b9d20d062 100644 --- a/deps/icu-small/source/common/servslkf.cpp +++ b/deps/icu-small/source/common/servslkf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * @@ -117,3 +119,5 @@ U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif + + diff --git a/deps/icu-small/source/common/sharedobject.cpp b/deps/icu-small/source/common/sharedobject.cpp index bffd8a3fc8801f..8e5095e129255a 100644 --- a/deps/icu-small/source/common/sharedobject.cpp +++ b/deps/icu-small/source/common/sharedobject.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/common/sharedobject.h b/deps/icu-small/source/common/sharedobject.h index 7d3433b6b61059..0e53cfb7abc09f 100644 --- a/deps/icu-small/source/common/sharedobject.h +++ b/deps/icu-small/source/common/sharedobject.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015-2016, International Business Machines @@ -160,16 +162,16 @@ class U_COMMON_API SharedObject : public UObject { /** * @internal For UnifedCache use only to register this object with itself. * Must be called before this object is exposed to multiple threads. - */ + */ void registerWithCache(const UnifiedCacheBase *ptr) const { cachePtr = ptr; } - + /** * Returns a writable version of ptr. * If there is exactly one owner, then ptr itself is returned as a * non-const pointer. - * If there are multiple owners, then ptr is replaced with a + * If there are multiple owners, then ptr is replaced with a * copy-constructed clone, * and that is returned. * Returns NULL if cloning failed. @@ -192,7 +194,7 @@ class U_COMMON_API SharedObject : public UObject { * Makes dest an owner of the object pointed to by src while adjusting * reference counts and deleting the previous object dest pointed to * if necessary. Before this call is made, dest must either be NULL or - * be included in the reference count of the object it points to. + * be included in the reference count of the object it points to. * * T must be a subclass of SharedObject. */ diff --git a/deps/icu-small/source/common/simpleformatter.cpp b/deps/icu-small/source/common/simpleformatter.cpp index 6dfa5b94ab4c80..eaeb60de143367 100644 --- a/deps/icu-small/source/common/simpleformatter.cpp +++ b/deps/icu-small/source/common/simpleformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/common/sprpimpl.h b/deps/icu-small/source/common/sprpimpl.h index 62973d39aeda6e..6e0bad0ae6ced1 100644 --- a/deps/icu-small/source/common/sprpimpl.h +++ b/deps/icu-small/source/common/sprpimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -34,20 +36,20 @@ enum UStringPrepType{ USPREP_UNASSIGNED = 0x0000 , USPREP_MAP = 0x0001 , - USPREP_PROHIBITED = 0x0002 , + USPREP_PROHIBITED = 0x0002 , USPREP_DELETE = 0x0003 , - USPREP_TYPE_LIMIT = 0x0004 + USPREP_TYPE_LIMIT = 0x0004 }; typedef enum UStringPrepType UStringPrepType; #ifdef USPREP_TYPE_NAMES_ARRAY static const char* usprepTypeNames[] ={ - "UNASSIGNED" , - "MAP" , - "PROHIBITED" , + "UNASSIGNED" , + "MAP" , + "PROHIBITED" , "DELETE", - "TYPE_LIMIT" + "TYPE_LIMIT" }; #endif @@ -58,7 +60,7 @@ enum{ enum{ _SPREP_TYPE_THRESHOLD = 0xFFF0, - _SPREP_MAX_INDEX_VALUE = 0x3FBF, /*16139*/ + _SPREP_MAX_INDEX_VALUE = 0x3FBF, /*16139*/ _SPREP_MAX_INDEX_TOP_LENGTH = 0x0003 }; @@ -66,7 +68,7 @@ enum{ enum { _SPREP_INDEX_TRIE_SIZE = 0, /* number of bytes in StringPrep trie */ _SPREP_INDEX_MAPPING_DATA_SIZE = 1, /* The array that contains the mapping */ - _SPREP_NORM_CORRECTNS_LAST_UNI_VERSION = 2, /* The index of Unicode version of last entry in NormalizationCorrections.txt */ + _SPREP_NORM_CORRECTNS_LAST_UNI_VERSION = 2, /* The index of Unicode version of last entry in NormalizationCorrections.txt */ _SPREP_ONE_UCHAR_MAPPING_INDEX_START = 3, /* The starting index of 1 UChar mapping index in the mapping data array */ _SPREP_TWO_UCHARS_MAPPING_INDEX_START = 4, /* The starting index of 2 UChars mapping index in the mapping data array */ _SPREP_THREE_UCHARS_MAPPING_INDEX_START = 5, /* The starting index of 3 UChars mapping index in the mapping data array */ @@ -100,7 +102,7 @@ struct UStringPrepProfile{ * @internal */ U_CAPI void U_EXPORT2 -uprv_syntaxError(const UChar* rules, +uprv_syntaxError(const UChar* rules, int32_t pos, int32_t rulesLen, UParseError* parseError); diff --git a/deps/icu-small/source/common/stringpiece.cpp b/deps/icu-small/source/common/stringpiece.cpp index 0fb2b3e54cbff9..b032b474f65616 100644 --- a/deps/icu-small/source/common/stringpiece.cpp +++ b/deps/icu-small/source/common/stringpiece.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/stringtriebuilder.cpp b/deps/icu-small/source/common/stringtriebuilder.cpp index 109fcdc5f8a255..075d7c4324b0e5 100644 --- a/deps/icu-small/source/common/stringtriebuilder.cpp +++ b/deps/icu-small/source/common/stringtriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/common/uarrsort.c b/deps/icu-small/source/common/uarrsort.c index 22c769729e0036..bb1b5bdd785feb 100644 --- a/deps/icu-small/source/common/uarrsort.c +++ b/deps/icu-small/source/common/uarrsort.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -120,7 +122,7 @@ doInsertionSort(char *array, int32_t length, int32_t itemSize, if(insertionPointlength*sizeof(UBiDiLevel)); + uprv_memcpy(saveLevels, levels, (size_t)pBiDi->length*sizeof(UBiDiLevel)); saveTrailingWSStart=pBiDi->trailingWSStart; saveLength=pBiDi->length; saveDirection=pBiDi->direction; @@ -2512,7 +2514,7 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, if(saveLength>pBiDi->levelsSize) { saveLength=pBiDi->levelsSize; } - uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel)); + uprv_memcpy(pBiDi->levels, saveLevels, (size_t)saveLength*sizeof(UBiDiLevel)); pBiDi->trailingWSStart=saveTrailingWSStart; if(pBiDi->runCount>1) { pBiDi->direction=UBIDI_MIXED; diff --git a/deps/icu-small/source/common/ubidi_props.c b/deps/icu-small/source/common/ubidi_props.c index 5c08885556095d..7c7a6ce25efef0 100644 --- a/deps/icu-small/source/common/ubidi_props.c +++ b/deps/icu-small/source/common/ubidi_props.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -243,7 +245,7 @@ ubidi_getPairedBracket(const UBiDiProps *bdp, UChar32 c) { /* public API (see uchar.h) ------------------------------------------------- */ U_CFUNC UCharDirection -u_charDirection(UChar32 c) { +u_charDirection(UChar32 c) { return ubidi_getClass(&ubidi_props_singleton, c); } diff --git a/deps/icu-small/source/common/ubidi_props.h b/deps/icu-small/source/common/ubidi_props.h index 0533ed3b94ba63..4312230bc09b63 100644 --- a/deps/icu-small/source/common/ubidi_props.h +++ b/deps/icu-small/source/common/ubidi_props.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ubidi_props_data.h b/deps/icu-small/source/common/ubidi_props_data.h index 2650a6651b23b0..685d2b1e844c61 100644 --- a/deps/icu-small/source/common/ubidi_props_data.h +++ b/deps/icu-small/source/common/ubidi_props_data.h @@ -1,484 +1,495 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: ubidi_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: ubidi_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp + #ifdef INCLUDED_FROM_UBIDI_PROPS_C -static const UVersionInfo ubidi_props_dataVersion={8,0,0,0}; +static const UVersionInfo ubidi_props_dataVersion={9,0,0,0}; -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5ae8,0x5778,0x1a,0x620,0x8b8,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5502b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5df0,0x5a78,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5802b6}; -static const uint16_t ubidi_props_trieIndex[11188]={ -0x34f,0x357,0x35f,0x367,0x37f,0x387,0x38f,0x397,0x36f,0x377,0x36f,0x377,0x36f,0x377,0x36f,0x377, -0x36f,0x377,0x36f,0x377,0x39d,0x3a5,0x3ad,0x3b5,0x3bd,0x3c5,0x3c1,0x3c9,0x3d1,0x3d9,0x3d4,0x3dc, -0x36f,0x377,0x36f,0x377,0x3e4,0x3ec,0x36f,0x377,0x36f,0x377,0x36f,0x377,0x3f2,0x3fa,0x402,0x40a, -0x412,0x41a,0x422,0x42a,0x430,0x438,0x440,0x448,0x450,0x458,0x45e,0x466,0x46e,0x476,0x47e,0x486, -0x492,0x48e,0x49a,0x404,0x404,0x4aa,0x46e,0x4a2,0x4b2,0x4b4,0x4bc,0x4c4,0x4cc,0x4cd,0x4d5,0x4dd, -0x4e5,0x4cd,0x4ed,0x4f2,0x4e5,0x4cd,0x4fa,0x502,0x4cc,0x507,0x50f,0x4c4,0x514,0x36f,0x51c,0x520, -0x528,0x529,0x531,0x539,0x4cc,0x541,0x549,0x4c4,0x4cc,0x36f,0x4d5,0x4c4,0x36f,0x36f,0x54f,0x36f, -0x36f,0x555,0x55d,0x36f,0x36f,0x561,0x569,0x36f,0x56d,0x574,0x36f,0x57c,0x584,0x58b,0x513,0x36f, -0x36f,0x593,0x59b,0x5a3,0x5ab,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x5b3,0x36f,0x5bb,0x36f,0x36f,0x36f, -0x5c3,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x5cb,0x36f,0x36f,0x36f,0x5d3,0x5d3,0x4d9,0x4d9,0x36f,0x5d9,0x5e1,0x5bb, -0x5f7,0x5e9,0x5e9,0x5ff,0x606,0x5ef,0x36f,0x36f,0x36f,0x60e,0x616,0x36f,0x36f,0x36f,0x618,0x620, -0x628,0x36f,0x62f,0x637,0x36f,0x63f,0x36f,0x36f,0x647,0x64a,0x514,0x652,0x3e6,0x65a,0x36f,0x661, -0x36f,0x666,0x36f,0x36f,0x36f,0x36f,0x66c,0x674,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x3bd,0x67c, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x684,0x68c,0x690, -0x6a8,0x6ae,0x698,0x6a0,0x6b6,0x6be,0x6c2,0x58e,0x6ca,0x6d2,0x6da,0x36f,0x6e2,0x620,0x620,0x620, -0x6f2,0x6fa,0x702,0x70a,0x70f,0x717,0x71f,0x6ea,0x727,0x72f,0x36f,0x735,0x73c,0x620,0x620,0x742, -0x620,0x53f,0x746,0x620,0x74e,0x36f,0x36f,0x61d,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0x620,0x620,0x620,0x756,0x620,0x620,0x620,0x620,0x620,0x75c,0x620,0x620,0x764,0x76c, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x620,0x620,0x77c,0x783,0x78b,0x774, -0x79b,0x7a3,0x7ab,0x7b2,0x7ba,0x7c2,0x7c9,0x793,0x620,0x620,0x620,0x7d1,0x7d7,0x7dd,0x7e5,0x7ea, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x7f1,0x36f,0x36f,0x36f,0x7f9,0x36f,0x36f,0x36f,0x3bd, -0x801,0x809,0x540,0x36f,0x80c,0x620,0x620,0x623,0x620,0x620,0x620,0x620,0x620,0x620,0x813,0x819, -0x829,0x821,0x36f,0x36f,0x831,0x5c3,0x36f,0x396,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x7f8, -0x3a4,0x36f,0x839,0x841,0x36f,0x849,0x7ea,0x36f,0x36f,0x36f,0x36f,0x851,0x36f,0x36f,0x618,0x395, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x620, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x839,0x620,0x53f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x858,0x36f,0x36f,0x85d,0x529,0x36f,0x36f,0x56f,0x620,0x617,0x36f,0x36f,0x865,0x36f,0x36f,0x36f, -0x86d,0x874,0x5e9,0x87c,0x36f,0x36f,0x527,0x884,0x36f,0x88b,0x892,0x36f,0x4b2,0x897,0x36f,0x4cb, -0x36f,0x89f,0x8a7,0x4cd,0x36f,0x8ab,0x4cc,0x8b3,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x8ba, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x8ce,0x8c2,0x8c6,0x46e,0x46e,0x46e,0x46e,0x46e, -0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8d6,0x46e,0x46e,0x46e,0x46e,0x8de,0x8e2, -0x8ea,0x8f2,0x8f6,0x8fe,0x46e,0x46e,0x46e,0x902,0x90a,0x35f,0x912,0x91a,0x36f,0x36f,0x36f,0x922, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0xdbc,0xdbc,0xdfc,0xe3c,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xe74,0xeb4,0xef4,0xf04,0xf44,0xf50, -0xdbc,0xdbc,0xf90,0xdbc,0xdbc,0xdbc,0xfc8,0x1008,0x1048,0x1088,0x10c0,0x1100,0x1140,0x1178,0x11b8,0x11f8, -0xa40,0xa80,0xac0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xafa,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb37,0x1a0,0x1a0,0xb6c,0xbac,0x1a0,0xbec,0xc2c,0xc6c, +static const uint16_t ubidi_props_trieIndex[11572]={ +0x36a,0x372,0x37a,0x382,0x39a,0x3a2,0x3aa,0x3b2,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x38a,0x392, +0x38a,0x392,0x38a,0x392,0x3b8,0x3c0,0x3c8,0x3d0,0x3d8,0x3e0,0x3dc,0x3e4,0x3ec,0x3f4,0x3ef,0x3f7, +0x38a,0x392,0x38a,0x392,0x3ff,0x407,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x40d,0x415,0x41d,0x425, +0x42d,0x435,0x43d,0x445,0x44b,0x453,0x45b,0x463,0x46b,0x473,0x479,0x481,0x489,0x491,0x499,0x4a1, +0x4ad,0x4a9,0x4b5,0x41f,0x41f,0x4c5,0x4cd,0x4bd,0x4d5,0x4d7,0x4df,0x4e7,0x4ef,0x4f0,0x4f8,0x500, +0x508,0x4f0,0x510,0x515,0x508,0x4f0,0x51d,0x525,0x4ef,0x52a,0x532,0x4e7,0x537,0x38a,0x53f,0x543, +0x54b,0x54c,0x554,0x55c,0x4ef,0x564,0x56c,0x4e7,0x4ef,0x38a,0x4f8,0x4e7,0x38a,0x38a,0x572,0x38a, +0x38a,0x578,0x580,0x38a,0x38a,0x584,0x58c,0x38a,0x590,0x597,0x38a,0x59f,0x5a7,0x5ae,0x536,0x38a, +0x38a,0x5b6,0x5be,0x5c6,0x5ce,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x5d6,0x38a,0x5de,0x38a,0x38a,0x38a, +0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x5ee,0x38a,0x38a,0x38a,0x5f6,0x5f6,0x4fc,0x4fc,0x38a,0x5fc,0x604,0x5de, +0x61a,0x60c,0x60c,0x622,0x629,0x612,0x38a,0x38a,0x38a,0x631,0x639,0x38a,0x38a,0x38a,0x63b,0x643, +0x64b,0x38a,0x652,0x65a,0x38a,0x662,0x38a,0x38a,0x66a,0x66d,0x537,0x675,0x401,0x67d,0x38a,0x684, +0x38a,0x689,0x38a,0x38a,0x38a,0x38a,0x68f,0x697,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0x69f, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x6a7,0x6af,0x6b3, +0x6cb,0x6d1,0x6bb,0x6c3,0x6d9,0x6e1,0x6e5,0x5b1,0x6ed,0x6f5,0x6fd,0x38a,0x705,0x643,0x643,0x643, +0x715,0x71d,0x725,0x72d,0x732,0x73a,0x742,0x70d,0x74a,0x752,0x38a,0x758,0x75f,0x643,0x643,0x765, +0x643,0x562,0x76a,0x643,0x772,0x38a,0x38a,0x640,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x77a,0x643,0x643,0x643,0x643,0x643,0x780,0x643,0x643,0x788,0x790, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643,0x643,0x7a0,0x7a7,0x7af,0x798, +0x7bf,0x7c7,0x7cf,0x7d6,0x7de,0x7e6,0x7ed,0x7b7,0x643,0x643,0x643,0x7f5,0x7fb,0x801,0x809,0x80e, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x815,0x38a,0x38a,0x38a,0x81d,0x38a,0x38a,0x38a,0x3d8, +0x825,0x82d,0x834,0x38a,0x83c,0x643,0x643,0x646,0x643,0x643,0x643,0x643,0x643,0x643,0x843,0x849, +0x859,0x851,0x38a,0x38a,0x861,0x5e6,0x38a,0x3b1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x81c, +0x3bf,0x38a,0x838,0x869,0x38a,0x871,0x80e,0x38a,0x38a,0x38a,0x38a,0x879,0x38a,0x38a,0x63b,0x3b0, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x838,0x643,0x562,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x880,0x38a,0x38a,0x885,0x54c,0x38a,0x38a,0x592,0x643,0x63a,0x38a,0x38a,0x88d,0x38a,0x38a,0x38a, +0x895,0x89c,0x60c,0x8a4,0x38a,0x38a,0x8ab,0x8b3,0x38a,0x8ba,0x8c1,0x38a,0x4d5,0x8c6,0x38a,0x4ee, +0x38a,0x8ce,0x8d6,0x4f0,0x38a,0x8da,0x4ef,0x8e2,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8e9, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8fd,0x8f1,0x8f5,0x489,0x489,0x489,0x489,0x489, +0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x905,0x489,0x489,0x489,0x489,0x90d,0x911, +0x919,0x921,0x925,0x92d,0x489,0x489,0x489,0x931,0x939,0x37a,0x941,0x949,0x38a,0x38a,0x38a,0x951, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xe28,0xe28,0xe68,0xea8,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xee0,0xf20,0xf60,0xf70,0xfb0,0xfbc, +0xe28,0xe28,0xffc,0xe28,0xe28,0xe28,0x1034,0x1074,0x10b4,0x10f4,0x112c,0x116c,0x11ac,0x11e4,0x1224,0x1264, +0xa40,0xa80,0xac0,0xafa,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb23,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb60,0x1a0,0x1a0,0xb95,0xbd5,0xc15,0xc55,0xc95,0xcd5, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, -0xcec,0xcfc,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0xd55,0xd65,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x92a,0x36f,0x620,0x620,0x932,0x5c3,0x36f,0x4c5, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x93a,0x36f,0x36f,0x36f,0x941,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x949,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x951,0x955,0x404,0x404,0x404,0x404,0x965,0x95d,0x404,0x96d,0x404,0x404,0x975,0x97b,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x983,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x4cc,0x98b,0x992,0x999,0x3e6,0x99c,0x36f,0x36f,0x4b2,0x9a4,0x36f,0x9aa,0x3e6,0x9af,0x5d5,0x36f, -0x36f,0x9b7,0x36f,0x36f,0x36f,0x36f,0x7f9,0x9bf,0x3e6,0x4cd,0x528,0x9c6,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x9cc,0x9d4,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x9d8,0x9e0,0x36f, -0x36f,0x9e8,0x528,0x36f,0x36f,0x9f0,0x36f,0x36f,0x5b3,0x9f8,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x9fc,0x36f,0xa02,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xa08,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x4e6,0xa10,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xa17,0xa1f,0xa25,0x36f,0x36f,0x620,0x620,0xa2d,0x36f, -0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x743,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0xa2f,0x36f,0xa36,0x36f,0xa32,0x36f,0xa39,0x36f,0xa41,0xa45,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x3bd,0xa4d,0x3bd,0xa54, -0xa5b,0xa63,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x404,0x404,0x404,0x404, -0x404,0x404,0xa6b,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x46e,0x46e,0x46e,0x46e, -0x46e,0x46e,0x46e,0xa73,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x620,0xa7b,0x620,0x620, -0x623,0xa80,0xa84,0x813,0xa8c,0x36f,0x36f,0xa92,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x80c,0x620,0xa9a,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0xa9e,0xaa6,0x620,0x620,0x620,0x623,0x620,0x620,0xa9d,0x36f,0xa7b,0x620,0xaae,0x620, -0xab6,0x815,0x36f,0x36f,0xac6,0x36f,0x36f,0x36f,0xacb,0x36f,0x5c3,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xabe,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xabe,0xadb,0xad3,0xad3,0xad3, -0xadc,0xadc,0xadc,0xadc,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0xae4,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4, -4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2, -2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12, -0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4, -4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2, -0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, -0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x959,0x38a,0x643,0x643,0x961,0x5e6,0x38a,0x4e8, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x969,0x38a,0x38a,0x38a,0x970,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x978,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x980,0x984,0x41f,0x41f,0x41f,0x41f,0x994,0x98c,0x41f,0x99c,0x41f,0x41f,0x9a4,0x9aa,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x9b2,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x4ef,0x8ad,0x9ba,0x9c1,0x401,0x9c4,0x38a,0x38a,0x4d5,0x9cc,0x38a,0x9d2,0x401,0x9d7,0x5f8,0x38a, +0x38a,0x9df,0x38a,0x38a,0x38a,0x38a,0x81d,0x9e7,0x401,0x4f0,0x54b,0x9ee,0x38a,0x38a,0x38a,0x38a, +0x38a,0x8ad,0x9f6,0x38a,0x38a,0x9fa,0xa02,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa06,0xa0e,0x38a, +0x38a,0xa16,0x54b,0x832,0x38a,0xa1e,0x38a,0x38a,0x5d6,0xa26,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa2a,0x38a,0x38a,0xa32,0xa38, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa3e,0x38a,0xa44,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa4a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x509,0xa52,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xa59,0xa61,0xa67,0x38a,0x38a,0x643,0x643,0xa6f,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x767, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa71,0x38a,0xa78,0x38a,0xa74, +0x38a,0xa7b,0x38a,0xa83,0xa87,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xa8f,0x3d8,0xa96,0xa9d,0xaa5,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0xaad,0xab5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xabd,0x41f,0xac5,0xac5,0xacc, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xad4,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x643,0xadc,0x643,0x643,0x646,0xae1,0xae5,0x843,0xaed,0x38a,0x38a, +0xaf3,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x768,0xafb,0x643,0x643,0x643, +0x646,0x643,0x643,0x830,0x38a,0xadc,0x643,0xb03,0x643,0xb0b,0x845,0x38a,0x38a,0xb1b,0xb23,0xb2b, +0x38a,0x844,0x38a,0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0xb13,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0xb13,0xb3b,0xb33,0xb33,0xb33,0xb3c,0xb3c,0xb3c,0xb3c,0x3d8,0x3d8,0x3d8, +0x3d8,0x3d8,0x3d8,0x3d8,0xb44,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0x369,0x369,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4,4,4,0xa,0xa, +0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, +2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12,0x12,7,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4,4,4,0xa,0xa, +0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2,0xa,0,0xa,0xa, +0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,0,0,0,0, -0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0, +0,0,0,0,0xa,0xa,0,0xa,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0,0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0, +0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1, +0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,5,5,5,5,5,5,0xa,0xa, -0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xd,0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d, -0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5, -5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d, -0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d, -2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad, -0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d, +1,1,1,1,5,5,5,5,5,5,0xa,0xa,0xd,4,4,0xd, +6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, +0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d, -0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5,5,5,4,5, +5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d, +0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,2,2,2,2, +2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad,0x8d,0xb1,0x4d,0x4d, +0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, +0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d, +0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1, -1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,1,1,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa, -0xa,0xa,0x21,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, -1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1, -0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81, -0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1, -1,0xb1,0xb1,0xb1,1,1,1,1,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa,0xa,0xa,0x21,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, +0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1, +0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1,1,0xb1,0xb1,0xb1, +1,1,1,1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d, +0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d, +0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,0,0,0,0,0,0,0,4,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4, -0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1, -0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0, +0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,0,0,0,0, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0, +0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, -0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0,0,0, +0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4, -0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0x40, +0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a, +0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,0xa,0xa,0,0, +0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1, +0,0,0,0,0xa,0,0,0,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0, -0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0, -0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0, -0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0, +0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, -0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9, -0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, -2,0,0,0,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0, -9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa, -0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2, -2,2,3,3,0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4, +0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa, +6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2, +0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0, +2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9, +9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae, +0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,3,3, +0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa, -0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa, -0,0xa,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0, -0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a, -0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa, -0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa, -0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa, -0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa, -0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa, -0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a, -0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa, -0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, +0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, +0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a, +0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a, +0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a, +0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a, +0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, @@ -530,6 +541,9 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -541,8 +555,6 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa, 0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, @@ -559,74 +571,74 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0, -0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1, -0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, -0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, -0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1, +0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0, +0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1, +0xb1,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,1,1,1,1,1,1,1,1,3,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa, -0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0, -0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a, +0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa, +0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa, -0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, -2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0, +0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3, +6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa, +0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x510a, +0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,0xa,0xa,0xa,4,4,0, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0, +0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa, +0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0xb1,2,2,2,2,2,2,2, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0xb1,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xa, +1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1, +0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81, +0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1, -0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1, -1,1,1,0xb1,0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41, -0x41,0x41,0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1, -1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41, -0x41,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41, -0x81,0x41,0x81,0x81,0x41,0x81,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5, +1,1,1,1,1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81, +0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +5,5,5,5,5,5,5,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -637,76 +649,90 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0xb1, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb2,0xb2,0xb2,0xb2,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2, -0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1, +0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, -0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, +0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -2,2,2,2,2,2,2,2,2,2,2,0xa,0xa,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x12,0x12,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,0xa, 0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2, +0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x12,0x12,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, @@ -721,7 +747,7 @@ static const uint32_t ubidi_props_mirrors[26]={ 0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5 }; -static const uint8_t ubidi_props_jgArray[664]={ +static const uint8_t ubidi_props_jgArray[672]={ 0x2d,0,3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6, 6,0x1f,0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x37,0x37,0x37, 0,9,0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0, @@ -763,7 +789,7 @@ static const uint8_t ubidi_props_jgArray[664]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4,4,0xd,0x28,9,0x1d,0x16,0x18,0x2d,0x2d,0x1f,0x2c,0x39,0,6,0x21, -0xb,0x55,0x1f,1,0x13,0,0,0 +0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,0,0 }; static const uint8_t ubidi_props_jgArray2[48]={ @@ -780,16 +806,16 @@ static const UBiDiProps ubidi_props_singleton={ ubidi_props_jgArray2, { ubidi_props_trieIndex, - ubidi_props_trieIndex+3388, + ubidi_props_trieIndex+3496, NULL, - 3388, - 7800, + 3496, + 8076, 0x1a0, - 0xdbc, + 0xe28, 0x0, 0x0, 0x110000, - 0x2bb0, + 0x2d30, NULL, 0, FALSE, FALSE, 0, NULL }, { 2,2,0,0 } diff --git a/deps/icu-small/source/common/ubidiimp.h b/deps/icu-small/source/common/ubidiimp.h index 9a23dc03a81275..a62d8b259ece03 100644 --- a/deps/icu-small/source/common/ubidiimp.h +++ b/deps/icu-small/source/common/ubidiimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubidiln.c b/deps/icu-small/source/common/ubidiln.c index f03defe625b2e0..688ca4c31ed3a3 100644 --- a/deps/icu-small/source/common/ubidiln.c +++ b/deps/icu-small/source/common/ubidiln.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubiditransform.c b/deps/icu-small/source/common/ubiditransform.c new file mode 100644 index 00000000000000..5f83a2b5a62e77 --- /dev/null +++ b/deps/icu-small/source/common/ubiditransform.c @@ -0,0 +1,528 @@ +/* +****************************************************************************** +* +* Copyright (C) 2016 and later: Unicode, Inc. and others. +* License & terms of use: http://www.unicode.org/copyright.html +* +****************************************************************************** +* file name: ubiditransform.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2016jul24 +* created by: Lina Kemmel +* +*/ + +#include "cmemory.h" +#include "unicode/ubidi.h" +#include "unicode/ustring.h" +#include "unicode/ushape.h" +#include "unicode/utf16.h" +#include "ustr_imp.h" +#include "unicode/ubiditransform.h" + +/* Some convenience defines */ +#define LTR UBIDI_LTR +#define RTL UBIDI_RTL +#define LOGICAL UBIDI_LOGICAL +#define VISUAL UBIDI_VISUAL +#define SHAPE_LOGICAL U_SHAPE_TEXT_DIRECTION_LOGICAL +#define SHAPE_VISUAL U_SHAPE_TEXT_DIRECTION_VISUAL_LTR + +#define CHECK_LEN(STR, LEN, ERROR) { \ + if (LEN == 0) return 0; \ + if (LEN < -1) { *(ERROR) = U_ILLEGAL_ARGUMENT_ERROR; return 0; } \ + if (LEN == -1) LEN = u_strlen(STR); \ + } + +#define MAX_ACTIONS 7 + +/** + * Typedef for a pointer to a function, which performs some operation (such as + * reordering, setting "inverse" mode, character mirroring, etc.). Return value + * indicates whether the text was changed in the course of this operation or + * not. + */ +typedef UBool (*UBiDiAction)(UBiDiTransform *, UErrorCode *); + +/** + * Structure that holds a predefined reordering scheme, including the following + * information: + *

    + *
  • an input base direction,
  • + *
  • an input order,
  • + *
  • an output base direction,
  • + *
  • an output order,
  • + *
  • a digit shaping direction,
  • + *
  • a letter shaping direction,
  • + *
  • a base direction that should be applied when the reordering engine is + * invoked (which can not always be derived from the caller-defined + * options),
  • + *
  • an array of pointers to functions that accomplish the bidi layout + * transformation.
  • + *
+ */ +typedef struct { + UBiDiLevel inLevel; /* input level */ + UBiDiOrder inOrder; /* input order */ + UBiDiLevel outLevel; /* output level */ + UBiDiOrder outOrder; /* output order */ + uint32_t digitsDir; /* digit shaping direction */ + uint32_t lettersDir; /* letter shaping direction */ + UBiDiLevel baseLevel; /* paragraph level to be used with setPara */ + const UBiDiAction actions[MAX_ACTIONS]; /* array of pointers to functions carrying out the transformation */ +} ReorderingScheme; + +struct UBiDiTransform { + UBiDi *pBidi; /* pointer to a UBiDi object */ + const ReorderingScheme *pActiveScheme; /* effective reordering scheme */ + UChar *src; /* input text */ + UChar *dest; /* output text */ + uint32_t srcLength; /* input text length - not really needed as we are zero-terminated and can u_strlen */ + uint32_t srcSize; /* input text capacity excluding the trailing zero */ + uint32_t destSize; /* output text capacity */ + uint32_t *pDestLength; /* number of UChars written to dest */ + uint32_t reorderingOptions; /* reordering options - currently only suppot DO_MIRRORING */ + uint32_t digits; /* digit option for ArabicShaping */ + uint32_t letters; /* letter option for ArabicShaping */ +}; + +U_DRAFT UBiDiTransform* U_EXPORT2 +ubiditransform_open(UErrorCode *pErrorCode) +{ + UBiDiTransform *pBiDiTransform = NULL; + if (U_SUCCESS(*pErrorCode)) { + pBiDiTransform = (UBiDiTransform*) uprv_calloc(1, sizeof(UBiDiTransform)); + if (pBiDiTransform == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + } + } + return pBiDiTransform; +} + +U_DRAFT void U_EXPORT2 +ubiditransform_close(UBiDiTransform *pBiDiTransform) +{ + if (pBiDiTransform != NULL) { + if (pBiDiTransform->pBidi != NULL) { + ubidi_close(pBiDiTransform->pBidi); + } + if (pBiDiTransform->src != NULL) { + uprv_free(pBiDiTransform->src); + } + uprv_free(pBiDiTransform); + } +} + +/** + * Performs Bidi resolution of text. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_resolve(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setPara(pTransform->pBidi, pTransform->src, pTransform->srcLength, + pTransform->pActiveScheme->baseLevel, NULL, pErrorCode); + return FALSE; +} + +/** + * Performs basic reordering of text (Logical -> Visual LTR). + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_reorder(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_writeReordered(pTransform->pBidi, pTransform->dest, pTransform->destSize, + pTransform->reorderingOptions, pErrorCode); + + *pTransform->pDestLength = pTransform->srcLength; + pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; + return TRUE; +} + +/** + * Sets "inverse" mode on the UBiDi object. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_setInverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setInverse(pTransform->pBidi, TRUE); + ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_INVERSE_LIKE_DIRECT); + return FALSE; +} + +/** + * Sets "runs only" reordering mode indicating a Logical LTR <-> Logical RTL + * transformation. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_setRunsOnly(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_RUNS_ONLY); + return FALSE; +} + +/** + * Performs string reverse. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_reverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_writeReverse(pTransform->src, pTransform->srcLength, + pTransform->dest, pTransform->destSize, + UBIDI_REORDER_DEFAULT, pErrorCode); + *pTransform->pDestLength = pTransform->srcLength; + return TRUE; +} + +/** + * Applies a new value to the text that serves as input at the current + * processing step. This value is identical to the original one when we begin + * the processing, but usually changes as the transformation progresses. + * + * @param pTransform A pointer to the UBiDiTransform structure. + * @param newSrc A pointer whose value is to be used as input text. + * @param newLength A length of the new text in UChars. + * @param newSize A new source capacity in UChars. + * @param pErrorCode Pointer to the error code value. + */ +static void +updateSrc(UBiDiTransform *pTransform, const UChar *newSrc, uint32_t newLength, + uint32_t newSize, UErrorCode *pErrorCode) +{ + if (newSize < newLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return; + } + if (newSize > pTransform->srcSize) { + newSize += 50; // allocate slightly more than needed right now + if (pTransform->src != NULL) { + uprv_free(pTransform->src); + pTransform->src = NULL; + } + pTransform->src = (UChar *)uprv_malloc(newSize * sizeof(UChar)); + if (pTransform->src == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + //pTransform->srcLength = pTransform->srcSize = 0; + return; + } + pTransform->srcSize = newSize; + } + u_strncpy(pTransform->src, newSrc, newLength); + pTransform->srcLength = u_terminateUChars(pTransform->src, + pTransform->srcSize, newLength, pErrorCode); +} + +/** + * Calls a lower level shaping function. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param options Shaping options. + * @param pErrorCode Pointer to the error code value. + */ +static void +doShape(UBiDiTransform *pTransform, uint32_t options, UErrorCode *pErrorCode) +{ + *pTransform->pDestLength = u_shapeArabic(pTransform->src, + pTransform->srcLength, pTransform->dest, pTransform->destSize, + options, pErrorCode); +} + +/** + * Performs digit and letter shaping. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_shapeArabic(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + if ((pTransform->letters | pTransform->digits) == 0) { + return FALSE; + } + if (pTransform->pActiveScheme->lettersDir == pTransform->pActiveScheme->digitsDir) { + doShape(pTransform, pTransform->letters | pTransform->digits | pTransform->pActiveScheme->lettersDir, + pErrorCode); + } else { + doShape(pTransform, pTransform->digits | pTransform->pActiveScheme->digitsDir, pErrorCode); + if (U_SUCCESS(*pErrorCode)) { + updateSrc(pTransform, pTransform->dest, *pTransform->pDestLength, + *pTransform->pDestLength, pErrorCode); + doShape(pTransform, pTransform->letters | pTransform->pActiveScheme->lettersDir, + pErrorCode); + } + } + return TRUE; +} + +/** + * Performs character mirroring. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_mirror(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + UChar32 c; + uint32_t i = 0, j = 0; + if (0 == (pTransform->reorderingOptions & UBIDI_DO_MIRRORING)) { + return FALSE; + } + if (pTransform->destSize < pTransform->srcLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return FALSE; + } + do { + UBool isOdd = ubidi_getLevelAt(pTransform->pBidi, i) & 1; + U16_NEXT(pTransform->src, i, pTransform->srcLength, c); + U16_APPEND_UNSAFE(pTransform->dest, j, isOdd ? u_charMirror(c) : c); + } while (i < pTransform->srcLength); + + *pTransform->pDestLength = pTransform->srcLength; + pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; + return TRUE; +} + +/** + * All possible reordering schemes. + * + */ +static const ReorderingScheme Schemes[] = +{ + /* 0: Logical LTR => Visual LTR */ + {LTR, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_reorder, NULL}}, + /* 1: Logical RTL => Visual LTR */ + {RTL, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 2: Logical LTR => Visual RTL */ + {LTR, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_reorder, action_reverse, NULL}}, + /* 3: Logical RTL => Visual RTL */ + {RTL, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_resolve, action_reorder, action_shapeArabic, action_reverse, NULL}}, + /* 4: Visual LTR => Logical RTL */ + {LTR, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, + /* 5: Visual RTL => Logical RTL */ + {RTL, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, + /* 6: Visual LTR => Logical LTR */ + {LTR, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 7: Visual RTL => Logical LTR */ + {RTL, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_reverse, action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 8: Logical LTR => Logical RTL */ + {LTR, LOGICAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, NULL}}, + /* 9: Logical RTL => Logical LTR */ + {RTL, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, RTL, + {action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 10: Visual LTR => Visual RTL */ + {LTR, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_shapeArabic, action_setInverse, action_resolve, action_mirror, action_reverse, NULL}}, + /* 11: Visual RTL => Visual LTR */ + {RTL, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_mirror, NULL}}, + /* 12: Logical LTR => Logical LTR */ + {LTR, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 13: Logical RTL => Logical RTL */ + {RTL, LOGICAL, RTL, LOGICAL, SHAPE_VISUAL, SHAPE_LOGICAL, RTL, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 14: Visual LTR => Visual LTR */ + {LTR, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 15: Visual RTL => Visual RTL */ + {RTL, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_reverse, action_resolve, action_mirror, action_shapeArabic, action_reverse, NULL}} +}; + +static const uint32_t nSchemes = sizeof(Schemes) / sizeof(*Schemes); + +/** + * When the direction option is UBIDI_DEFAULT_LTR or + * UBIDI_DEFAULT_RTL, resolve the base direction according to that + * of the first strong bidi character. + */ +static void +resolveBaseDirection(const UChar *text, uint32_t length, + UBiDiLevel *pInLevel, UBiDiLevel *pOutLevel) +{ + switch (*pInLevel) { + case UBIDI_DEFAULT_LTR: + case UBIDI_DEFAULT_RTL: { + UBiDiLevel level = ubidi_getBaseDirection(text, length); + *pInLevel = level != UBIDI_NEUTRAL ? level + : *pInLevel == UBIDI_DEFAULT_RTL ? RTL : LTR; + break; + } + default: + *pInLevel &= 1; + break; + } + switch (*pOutLevel) { + case UBIDI_DEFAULT_LTR: + case UBIDI_DEFAULT_RTL: + *pOutLevel = *pInLevel; + break; + default: + *pOutLevel &= 1; + break; + } +} + +/** + * Finds a valid ReorderingScheme matching the + * caller-defined scheme. + * + * @return A valid ReorderingScheme object or NULL + */ +static const ReorderingScheme* +findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel, + UBiDiOrder inOrder, UBiDiOrder outOrder) +{ + uint32_t i; + for (i = 0; i < nSchemes; i++) { + const ReorderingScheme *pScheme = Schemes + i; + if (inLevel == pScheme->inLevel && outLevel == pScheme->outLevel + && inOrder == pScheme->inOrder && outOrder == pScheme->outOrder) { + return pScheme; + } + } + return NULL; +} + +U_DRAFT uint32_t U_EXPORT2 +ubiditransform_transform(UBiDiTransform *pBiDiTransform, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destSize, + UBiDiLevel inParaLevel, UBiDiOrder inOrder, + UBiDiLevel outParaLevel, UBiDiOrder outOrder, + UBiDiMirroring doMirroring, uint32_t shapingOptions, + UErrorCode *pErrorCode) +{ + uint32_t destLength = 0; + UBool textChanged = FALSE; + const UBiDiTransform *pOrigTransform = pBiDiTransform; + const UBiDiAction *action = NULL; + + if (U_FAILURE(*pErrorCode)) { + return 0; + } + if (src == NULL || dest == NULL) { + *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + CHECK_LEN(src, srcLength, pErrorCode); + CHECK_LEN(dest, destSize, pErrorCode); + + if (pBiDiTransform == NULL) { + pBiDiTransform = ubiditransform_open(pErrorCode); + if (U_FAILURE(*pErrorCode)) { + return 0; + } + } + /* Current limitation: in multiple paragraphs will be resolved according + to the 1st paragraph */ + resolveBaseDirection(src, srcLength, &inParaLevel, &outParaLevel); + + pBiDiTransform->pActiveScheme = findMatchingScheme(inParaLevel, outParaLevel, + inOrder, outOrder); + if (pBiDiTransform->pActiveScheme == NULL) { + goto cleanup; + } + pBiDiTransform->reorderingOptions = doMirroring ? UBIDI_DO_MIRRORING + : UBIDI_REORDER_DEFAULT; + + /* Ignore TEXT_DIRECTION_* flags, as we apply our own depending on the text + scheme at the time shaping is invoked. */ + shapingOptions &= ~U_SHAPE_TEXT_DIRECTION_MASK; + pBiDiTransform->digits = shapingOptions & ~U_SHAPE_LETTERS_MASK; + pBiDiTransform->letters = shapingOptions & ~U_SHAPE_DIGITS_MASK; + + updateSrc(pBiDiTransform, src, srcLength, destSize > srcLength ? destSize : srcLength, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + goto cleanup; + } + if (pBiDiTransform->pBidi == NULL) { + pBiDiTransform->pBidi = ubidi_openSized(0, 0, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + goto cleanup; + } + } + pBiDiTransform->dest = dest; + pBiDiTransform->destSize = destSize; + pBiDiTransform->pDestLength = &destLength; + + /* Checking for U_SUCCESS() within the loop to bail out on first failure. */ + for (action = pBiDiTransform->pActiveScheme->actions; *action && U_SUCCESS(*pErrorCode); action++) { + if ((*action)(pBiDiTransform, pErrorCode)) { + if (action + 1) { + updateSrc(pBiDiTransform, pBiDiTransform->dest, *pBiDiTransform->pDestLength, + *pBiDiTransform->pDestLength, pErrorCode); + } + textChanged = TRUE; + } + } + ubidi_setInverse(pBiDiTransform->pBidi, FALSE); + + if (!textChanged && U_SUCCESS(*pErrorCode)) { + /* Text was not changed - just copy src to dest */ + if (destSize < srcLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + } else { + u_strncpy(dest, src, srcLength); + destLength = srcLength; + } + } +cleanup: + if (pOrigTransform != pBiDiTransform) { + ubiditransform_close(pBiDiTransform); + } else { + pBiDiTransform->dest = NULL; + pBiDiTransform->pDestLength = NULL; + pBiDiTransform->srcLength = 0; + pBiDiTransform->destSize = 0; + } + return U_FAILURE(*pErrorCode) ? 0 : destLength; +} diff --git a/deps/icu-small/source/common/ubidiwrt.c b/deps/icu-small/source/common/ubidiwrt.c index 2c6495967ca9c2..1d0c36a5d2815b 100644 --- a/deps/icu-small/source/common/ubidiwrt.c +++ b/deps/icu-small/source/common/ubidiwrt.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubrk.cpp b/deps/icu-small/source/common/ubrk.cpp index 161c0ac4d32aad..b02c966b107d7f 100644 --- a/deps/icu-small/source/common/ubrk.cpp +++ b/deps/icu-small/source/common/ubrk.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/common/ubrkimpl.h b/deps/icu-small/source/common/ubrkimpl.h index e4909712566461..36ca6688593b6c 100644 --- a/deps/icu-small/source/common/ubrkimpl.h +++ b/deps/icu-small/source/common/ubrkimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2006, International Business Machines diff --git a/deps/icu-small/source/common/ucase.cpp b/deps/icu-small/source/common/ucase.cpp index 343d79feeccf36..97ded9ee2d15f6 100644 --- a/deps/icu-small/source/common/ucase.cpp +++ b/deps/icu-small/source/common/ucase.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -533,7 +535,7 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) { * - The general category of C is * Nonspacing Mark (Mn), or Enclosing Mark (Me), or Format Control (Cf), or * Letter Modifier (Lm), or Symbol Modifier (Sk) - * - C is one of the following characters + * - C is one of the following characters * U+0027 APOSTROPHE * U+00AD SOFT HYPHEN (SHY) * U+2019 RIGHT SINGLE QUOTATION MARK @@ -619,6 +621,18 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) { result=UCASE_LOC_LITHUANIAN; } } + } else if(is_e(c)) { + /* el or ell? */ + c=*locale++; + if(is_l(c)) { + c=*locale++; + if(is_l(c)) { + c=*locale; + } + if(is_sep(c)) { + result=UCASE_LOC_GREEK; + } + } } else if(is_n(c)) { /* nl or nld? */ c=*locale++; @@ -801,8 +815,9 @@ U_CAPI int32_t U_EXPORT2 ucase_toFullLower(const UCaseProps *csp, UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache) -{ + const char *locale, int32_t *locCache) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { @@ -947,6 +962,8 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, const UChar **pString, const char *locale, int32_t *locCache, UBool upperNotTitle) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { @@ -1155,8 +1172,9 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) { U_CAPI int32_t U_EXPORT2 ucase_toFullFolding(const UCaseProps *csp, UChar32 c, const UChar **pString, - uint32_t options) -{ + uint32_t options) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { @@ -1245,7 +1263,7 @@ U_CAPI UChar32 U_EXPORT2 u_tolower(UChar32 c) { return ucase_tolower(GET_CASE_PROPS(), c); } - + /* Transforms the Unicode character to its upper case equivalent.*/ U_CAPI UChar32 U_EXPORT2 u_toupper(UChar32 c) { diff --git a/deps/icu-small/source/common/ucase.h b/deps/icu-small/source/common/ucase.h index 8f24769de388a8..29ea71a533d8c5 100644 --- a/deps/icu-small/source/common/ucase.h +++ b/deps/icu-small/source/common/ucase.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -62,6 +64,7 @@ enum { UCASE_LOC_ROOT, UCASE_LOC_TURKISH, UCASE_LOC_LITHUANIAN, + UCASE_LOC_GREEK, UCASE_LOC_DUTCH }; @@ -156,7 +159,7 @@ U_NAMESPACE_END U_CAPI int32_t U_EXPORT2 ucase_getType(const UCaseProps *csp, UChar32 c); -/** @return same as ucase_getType(), or <0 if c is case-ignorable */ +/** @return like ucase_getType() but also sets UCASE_IGNORABLE if c is case-ignorable */ U_CAPI int32_t U_EXPORT2 ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c); diff --git a/deps/icu-small/source/common/ucase_props_data.h b/deps/icu-small/source/common/ucase_props_data.h index 5b3a3ff9878a24..aa51bac691c9da 100644 --- a/deps/icu-small/source/common/ucase_props_data.h +++ b/deps/icu-small/source/common/ucase_props_data.h @@ -1,153 +1,155 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: ucase_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: ucase_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp + #ifdef INCLUDED_FROM_UCASE_CPP -static const UVersionInfo ucase_props_dataVersion={8,0,0,0}; +static const UVersionInfo ucase_props_dataVersion={9,0,0,0}; -static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x67ea,0x5658,0x737,0x172,0,0,0,0,0,0,0,0,0,0,3}; +static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x6c6c,0x5a10,0x79c,0x172,0,0,0,0,0,0,0,0,0,0,3}; -static const uint16_t ucase_props_trieIndex[11044]={ -0x316,0x31e,0x326,0x32e,0x33c,0x344,0x34c,0x354,0x35c,0x364,0x36b,0x373,0x37b,0x383,0x38b,0x393, -0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411, -0x419,0x421,0x425,0x42d,0x435,0x43d,0x445,0x44d,0x449,0x451,0x456,0x45e,0x465,0x46d,0x475,0x47d, -0x485,0x48d,0x495,0x49d,0x335,0x33d,0x4a2,0x4aa,0x4af,0x4b7,0x4bf,0x4c7,0x4c6,0x4ce,0x4d3,0x4db, -0x4e2,0x4e9,0x4ed,0x335,0x335,0x316,0x335,0x4f5,0x4fd,0x4ff,0x507,0x50f,0x513,0x514,0x51c,0x524, -0x52c,0x514,0x534,0x539,0x52c,0x514,0x541,0x524,0x513,0x545,0x54d,0x524,0x552,0x335,0x55a,0x335, -0x48c,0x4c8,0x562,0x524,0x513,0x545,0x569,0x524,0x513,0x335,0x51c,0x524,0x335,0x335,0x56f,0x335, -0x335,0x575,0x57c,0x335,0x335,0x580,0x588,0x335,0x58c,0x593,0x335,0x59a,0x5a2,0x5a9,0x5b1,0x335, -0x335,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x47b,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x5e2,0x335,0x335,0x5f2,0x5fa,0x5ea, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x602,0x602,0x520,0x520,0x335,0x608,0x610,0x335, -0x618,0x335,0x620,0x335,0x335,0x626,0x335,0x335,0x335,0x62e,0x335,0x335,0x335,0x335,0x335,0x335, -0x635,0x335,0x63c,0x644,0x335,0x64c,0x335,0x335,0x654,0x657,0x65f,0x665,0x66d,0x675,0x335,0x67c, -0x335,0x681,0x335,0x687,0x335,0x335,0x68f,0x697,0x69f,0x6a4,0x6a7,0x6af,0x6bf,0x6b7,0x6cf,0x6c7, -0x35c,0x6d7,0x35c,0x6df,0x6e2,0x35c,0x6ea,0x35c,0x6f2,0x6fa,0x702,0x70a,0x712,0x71a,0x722,0x72a, -0x732,0x739,0x335,0x741,0x749,0x335,0x751,0x759,0x761,0x769,0x771,0x779,0x781,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x784,0x78a,0x790,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x798,0x79d,0x7a1,0x7a9,0x35c,0x35c,0x35c,0x7b1,0x7b9,0x7c1,0x335,0x7c6,0x335,0x335,0x335,0x7ce, -0x335,0x61d,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x512,0x7d6,0x335,0x335,0x7dd,0x335,0x335,0x7e5,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x7ed,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x687,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x7f3,0x335,0x35c,0x7fb,0x803,0x335,0x335,0x80b,0x813,0x81b,0x35c,0x820,0x828,0x82e,0x335,0x834, -0x83c,0x52b,0x335,0x335,0x335,0x335,0x843,0x84b,0x335,0x852,0x859,0x335,0x4fd,0x85e,0x866,0x52b, -0x335,0x86c,0x874,0x878,0x335,0x880,0x888,0x890,0x335,0x896,0x89a,0x8a2,0x8b2,0x8aa,0x335,0x8ba, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x8c2,0x335,0x335,0x335,0x335,0x8ca,0x66d,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x8cf,0x8d7,0x8db,0x335,0x335,0x335,0x335,0x318,0x31e,0x8e3,0x8eb,0x8f2,0x4c8,0x335,0x335,0x8fa, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0xcd8,0xcd8,0xcf0,0xd30,0xd70,0xdac,0xdec,0xe2c,0xe64,0xea4,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024, -0x1064,0x1094,0x10d4,0x1114,0x1124,0x1158,0x1194,0x11d4,0x1214,0x1254,0xcd4,0x1288,0x12bc,0x12fc,0x1318,0x134c, +static const uint16_t ucase_props_trieIndex[11520]={ +0x327,0x32f,0x337,0x33f,0x34d,0x355,0x35d,0x365,0x36d,0x375,0x37c,0x384,0x38c,0x394,0x39c,0x3a4, +0x3aa,0x3b2,0x3ba,0x3c2,0x3ca,0x3d2,0x3da,0x3e2,0x3ea,0x3f2,0x3fa,0x402,0x40a,0x412,0x41a,0x422, +0x42a,0x432,0x43a,0x442,0x44a,0x452,0x45a,0x462,0x45e,0x466,0x46b,0x473,0x47a,0x482,0x48a,0x492, +0x49a,0x4a2,0x4aa,0x4b2,0x346,0x34e,0x4b7,0x4bf,0x4c4,0x4cc,0x4d4,0x4dc,0x4db,0x4e3,0x4e8,0x4f0, +0x4f7,0x4fe,0x502,0x346,0x346,0x327,0x512,0x50a,0x51a,0x51c,0x524,0x52c,0x530,0x531,0x539,0x541, +0x549,0x531,0x551,0x556,0x549,0x531,0x55e,0x541,0x530,0x562,0x56a,0x541,0x56f,0x346,0x577,0x346, +0x4a1,0x4dd,0x57f,0x541,0x530,0x562,0x586,0x541,0x530,0x346,0x539,0x541,0x346,0x346,0x58c,0x346, +0x346,0x592,0x599,0x346,0x346,0x59d,0x5a5,0x346,0x5a9,0x5b0,0x346,0x5b7,0x5bf,0x5c6,0x5ce,0x346, +0x346,0x5d3,0x5db,0x5e3,0x5eb,0x5f3,0x5fb,0x490,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x5ff,0x346,0x346,0x60f,0x617,0x607, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x61f,0x61f,0x53d,0x53d,0x346,0x625,0x62d,0x346, +0x635,0x346,0x63d,0x346,0x548,0x643,0x346,0x346,0x346,0x64b,0x346,0x346,0x346,0x346,0x346,0x346, +0x652,0x346,0x659,0x661,0x346,0x669,0x346,0x346,0x671,0x674,0x67c,0x682,0x68a,0x692,0x346,0x699, +0x346,0x69e,0x346,0x6a4,0x6ac,0x346,0x6b0,0x6b8,0x6c0,0x6c5,0x6c8,0x6d0,0x6e0,0x6d8,0x6f0,0x6e8, +0x36d,0x6f8,0x36d,0x700,0x703,0x36d,0x70b,0x36d,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743,0x74b, +0x753,0x75a,0x346,0x762,0x76a,0x346,0x772,0x77a,0x782,0x78a,0x792,0x79a,0x7a2,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x7a5,0x7ab,0x7b1,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x7b9,0x7be,0x7c2,0x7ca,0x36d,0x36d,0x36d,0x7d2,0x7da,0x7e2,0x346,0x7e7,0x346,0x346,0x346,0x7ef, +0x346,0x63a,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x52f,0x7f7,0x346,0x346,0x7fe,0x346,0x346,0x806,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x80e,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x6a4,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x814,0x346,0x81c,0x821,0x829,0x346,0x346,0x831,0x839,0x841,0x36d,0x846,0x84e,0x854,0x346,0x85a, +0x862,0x548,0x346,0x346,0x346,0x346,0x869,0x871,0x346,0x878,0x87f,0x346,0x51a,0x884,0x88c,0x548, +0x346,0x892,0x89a,0x89e,0x346,0x8a6,0x8ae,0x8b6,0x346,0x8bc,0x8c0,0x8c8,0x8d8,0x8d0,0x346,0x8e0, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x8e8,0x346,0x346,0x346,0x346,0x8f0,0x68a,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x8f5,0x8fd,0x901,0x346,0x346,0x346,0x346,0x329,0x32f,0x909,0x911,0x918,0x4dd,0x346,0x346,0x920, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0xd1c,0xd1c,0xd34,0xd74,0xdb4,0xdf0,0xe30,0xe70,0xea8,0xee8,0xf28,0xf68,0xfa8,0xfe8,0x1028,0x1068, +0x10a8,0x10e8,0x1128,0x1168,0x1178,0x11ac,0x11e8,0x1228,0x1268,0x12a8,0xd18,0x12dc,0x1310,0x1350,0x136c,0x13a0, 0x9e1,0xa11,0xa51,0xa8c,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xab5,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xaf2,0x188,0x188,0xb27,0xb66,0x188,0xba0,0xbd7,0x188, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xaf5,0x188,0x188,0xb2a,0xb69,0xba9,0xbe3,0xc1a,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, @@ -172,432 +174,445 @@ static const uint16_t ucase_props_trieIndex[11044]={ 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, -0xc17,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x621,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x902,0x335,0x335,0x335,0x905,0x335,0x335,0x335, -0x335,0x90d,0x913,0x917,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x91f,0x923,0x335,0x335,0x335,0x335,0x335,0x92b,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x933,0x937,0x93f,0x943,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x513,0x948,0x94f,0x951,0x66d,0x959,0x335,0x335,0x961,0x968,0x335,0x954,0x66d,0x96e,0x976, -0x335,0x335,0x97b,0x335,0x335,0x335,0x335,0x318,0x983,0x66d,0x514,0x98b,0x992,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x998,0x9a0,0x335,0x335,0x335,0x335,0x335,0x335,0x9a4,0x9ac, -0x335,0x335,0x9b4,0x48c,0x335,0x335,0x9bc,0x335,0x335,0x9c2,0x9ca,0x335,0x335,0x335,0x335,0x335, -0x335,0x41d,0x9d2,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x9da,0x335,0x9e0,0x654, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x9e6,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x9ee,0x654,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x9f6,0x9fe,0xa04,0x335,0x335,0x335,0x335,0xa0c,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0xa14,0xa1c,0xa21,0xa27,0xa2f,0xa37,0xa3f,0xa18,0xa47, -0xa4f,0xa57,0xa5e,0xa19,0xa14,0xa1c,0xa17,0xa27,0xa1a,0xa15,0xa66,0xa18,0xa6e,0xa76,0xa7e,0xa85, -0xa71,0xa79,0xa81,0xa88,0xa74,0xa90,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x813,0xa98,0x813,0xa9f,0xaa6,0xaae,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0xab2,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0xa10,0xaba,0xaba,0xac0,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x963,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x513,0x813,0x813,0x813,0x335,0x335,0x335,0x335,0x813, -0x813,0x813,0x813,0x813,0x813,0x813,0x9ea,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x315,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, -0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,4,0,0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x1a,0xba,0xfa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x17a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0x1f9,0xf029,0x299,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x319,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc5a,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x63e,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x928,0x346,0x346,0x346,0x92b,0x346,0x346,0x346, +0x346,0x933,0x939,0x93d,0x346,0x346,0x941,0x945,0x94b,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x953,0x957,0x346,0x346,0x346,0x346,0x346,0x95f,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x967,0x96b,0x973,0x977,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x530,0x97c,0x983,0x985,0x68a,0x98d,0x346,0x346,0x995,0x99c,0x346,0x988,0x68a,0x9a2,0x9aa, +0x346,0x346,0x9af,0x346,0x346,0x346,0x346,0x329,0x9b7,0x68a,0x531,0x9bf,0x9c6,0x346,0x346,0x346, +0x346,0x346,0x97c,0x9ce,0x346,0x346,0x9d2,0x9da,0x346,0x346,0x346,0x346,0x346,0x346,0x9de,0x9e6, +0x346,0x346,0x9ee,0x4a1,0x346,0x346,0x9f6,0x346,0x346,0x9fc,0xa04,0x346,0x346,0x346,0x346,0x346, +0x346,0xa0c,0xa14,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa1c,0x346,0x346, +0x8f0,0xa24,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa2a,0x346,0xa30,0x671, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0xa36,0x346,0x346,0x4a1,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa3e,0x671,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0xa46,0xa4e,0xa54,0x346,0x346,0x346,0x346,0xa5c,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa64,0xa6c,0xa71,0xa77,0xa7f,0xa87, +0xa8f,0xa68,0xa97,0xa9f,0xaa7,0xaae,0xa69,0xa64,0xa6c,0xa67,0xa77,0xa6a,0xa65,0xab6,0xa68,0xabe, +0xac6,0xace,0xad5,0xac1,0xac9,0xad1,0xad8,0xac4,0xae0,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x839,0xae8,0x839,0xaef,0xaf6,0xafe,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xb06,0xb0e,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xb12,0x346,0xb1a,0xb22,0xb29,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0xa60,0xb31,0xb31,0xb37,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x997,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x530,0x839,0x839,0x839,0x346,0x346, +0x346,0x346,0x839,0x839,0x839,0x839,0x839,0x839,0x839,0xa3a,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x326,0x326,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,4,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,0,0,0,0,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x1a,0xba,0xfa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x17a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0x1f9,0xf029,0x299,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x319, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,1,0,0,4,0,4, -0,0,0,0,4,0x399,0,4,4,0,1,0,0,0,0,0, -0x100a,0x100a,0x100a,0x100a,0x100a,0x3fa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x47a,0x4ba,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x4f9, -0xf009,0xf009,0xf009,0xf009,0xf009,0x639,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x3c89, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0, +0,4,0,4,0,0,0,0,4,0x399,0,4,4,0,1,0, +0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x3fa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x47a,0x4ba,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x4f9,0xf009,0xf009,0xf009,0xf009,0xf009,0x639,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0x3c89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6ba,0xff89,0x8a,0xff89, +0x8a,0xff89,0x6fa,0xffa9,0x73a,0x7f9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x899,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6ba,0xff89,0x8a,0xff89,0x8a,0xff89,0x6fa,0xffa9, -0x73a,0x7f9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0x8a,0xff89,0x899,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc38a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x999, +0x6189,0x690a,0x8a,0xff89,0x8a,0xff89,0x670a,0x8a,0xff89,0x668a,0x668a,0x8a,0xff89,1,0x278a,0x650a, +0x658a,0x8a,0xff89,0x668a,0x678a,0x3089,0x698a,0x688a,0x8a,0xff89,0x5189,1,0x698a,0x6a8a,0x4109,0x6b0a, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6d0a,1,1,0x8a,0xff89,0x6d0a,0x8a, +0xff89,0x6c8a,0x6c8a,0x8a,0xff89,0x8a,0xff89,0x6d8a,0x8a,0xff89,1,0,0x8a,0xff89,1,0x1c09, +0,0,0,0,0x9fa,0xa5b,0xad9,0xb3a,0xb9b,0xc19,0xc7a,0xcdb,0xd59,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xd889,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0xc38a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x999,0x6189,0x690a,0x8a,0xff89, -0x8a,0xff89,0x670a,0x8a,0xff89,0x668a,0x668a,0x8a,0xff89,1,0x278a,0x650a,0x658a,0x8a,0xff89,0x668a, -0x678a,0x3089,0x698a,0x688a,0x8a,0xff89,0x5189,1,0x698a,0x6a8a,0x4109,0x6b0a,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6d0a,1,1,0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6c8a,0x6c8a,0x8a, -0xff89,0x8a,0xff89,0x6d8a,0x8a,0xff89,1,0,0x8a,0xff89,1,0x1c09,0,0,0,0, -0x9fa,0xa5b,0xad9,0xb3a,0xb9b,0xc19,0xc7a,0xcdb,0xd59,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xd889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xdb9,0xeba,0xf1b,0xf99, -0x8a,0xff89,0xcf8a,0xe40a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0xdb9,0xeba,0xf1b,0xf99,0x8a,0xff89,0xcf8a,0xe40a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0xbf0a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,1,1,1,1,0xffa,0x8a, -0xff89,0xae8a,0x103a,0x1079,0x10b9,0x8a,0xff89,0x9e8a,0x228a,0x238a,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x10f9,0x1139,0x1179,0x9709,0x9909,1,0x9989,0x9989,1,0x9b09,1,0x9a89, -0x11b9,1,1,1,0x9989,0x11f9,1,0x9889,1,0x1239,0x1279,1,0x97a9,0x9689,1,0x12b9, -0x12f9,1,1,0x9689,1,0x1339,0x9589,1,1,0x9509,1,1,1,1,1,1, -1,0x1379,1,1,0x9309,1,1,0x9309,1,1,1,0x13b9,0x9309,0xdd89,0x9389,0x9389, -0xdc89,1,1,1,1,1,0x9289,1,0,1,1,1,1,1,1,1, -1,0x13f9,0x1439,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,5,5,0x25,5,5,5,5,5,5,4,4,4, -0xc,4,0xc,4,5,5,4,4,4,4,4,4,4,4,4,4, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xbf0a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,1,1, +1,1,0xffa,0x8a,0xff89,0xae8a,0x103a,0x1079,0x10b9,0x8a,0xff89,0x9e8a,0x228a,0x238a,0x8a,0xff89, +0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x10f9,0x1139,0x1179,0x9709,0x9909,1,0x9989,0x9989, +1,0x9b09,1,0x9a89,0x11b9,1,1,1,0x9989,0x11f9,1,0x9889,1,0x1239,0x1279,1, +0x97a9,0x9689,0x12b9,0x12f9,0x1339,1,1,0x9689,1,0x1379,0x9589,1,1,0x9509,1,1, +1,1,1,1,1,0x13b9,1,1,0x9309,1,1,0x9309,1,1,1,0x13f9, +0x9309,0xdd89,0x9389,0x9389,0xdc89,1,1,1,1,1,0x9289,1,0,1,1,1, +1,1,1,1,1,0x1439,0x1479,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,5,0x25,5,5,5,5,5, +5,4,4,4,0xc,4,0xc,4,5,5,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,0x4c,0x4c,0x44,0x44,0x44,0x44,0x44,0x147c,0x4c,0x44,0x4c,0x44, -0x4c,0x44,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64, +4,4,4,4,4,4,4,4,0x4c,0x4c,0x44,0x44,0x44,0x44,0x44,0x14bc, +0x4c,0x44,0x4c,0x44,0x4c,0x44,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x64,0x64,0x64, 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x64,0x64,0x64,0x64,0x6c,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x44,0x149d,0x44,0x64,0x64,0x64,0x44,0x44, -0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x44, -0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89,4,4,0x8a,0xff89,0,0,5,0x4109, -0x4109,0x4109,0,0x3a0a,0,0,0,0,4,4,0x130a,4,0x128a,0x128a,0x128a,0, -0x200a,0,0x1f8a,0x1f8a,0x1539,0x100a,0x16da,0x100a,0x100a,0x175a,0x100a,0x100a,0x17da,0x187a,0x191a,0x100a, -0x199a,0x100a,0x100a,0x100a,0x1a1a,0x1a9a,0,0x1b1a,0x100a,0x100a,0x1b9a,0x100a,0x100a,0x1c1a,0x100a,0x100a, -0xed09,0xed89,0xed89,0xed89,0x1c99,0xf009,0x1e39,0xf009,0xf009,0x1eb9,0xf009,0xf009,0x1f39,0x1fd9,0x2079,0xf009, -0x20f9,0xf009,0xf009,0xf009,0x2179,0x21f9,0x2279,0x22d9,0xf009,0xf009,0x2359,0xf009,0xf009,0x23d9,0xf009,0xf009, -0xe009,0xe089,0xe089,0x40a,0x2459,0x24b9,2,2,2,0x2559,0x25b9,0xfc09,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x2619,0x2679,0x389,0xc629,0x26da,0x2779,0,0x8a,0xff89,0xfc8a,0x8a,0xff89, -1,0xbf0a,0xbf0a,0xbf0a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a, -0x280a,0x280a,0x280a,0x280a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd829,0xd809,0xd829,0xd809,0xd809,0xd809, -0xd809,0xd809,0xd809,0xd809,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x6c,0x64,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x44,0x14dd,0x44,0x64, +0x64,0x64,0x44,0x44,0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44, +0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89,4,4,0x8a,0xff89, +0,0,5,0x4109,0x4109,0x4109,0,0x3a0a,0,0,0,0,4,4,0x130a,4, +0x128a,0x128a,0x128a,0,0x200a,0,0x1f8a,0x1f8a,0x1579,0x100a,0x171a,0x100a,0x100a,0x179a,0x100a,0x100a, +0x181a,0x18ba,0x195a,0x100a,0x19da,0x100a,0x100a,0x100a,0x1a5a,0x1ada,0,0x1b5a,0x100a,0x100a,0x1bda,0x100a, +0x100a,0x1c5a,0x100a,0x100a,0xed09,0xed89,0xed89,0xed89,0x1cd9,0xf009,0x1e79,0xf009,0xf009,0x1ef9,0xf009,0xf009, +0x1f79,0x2019,0x20b9,0xf009,0x2139,0xf009,0xf009,0xf009,0x21b9,0x2239,0x22b9,0x2319,0xf009,0xf009,0x2399,0xf009, +0xf009,0x2419,0xf009,0xf009,0xe009,0xe089,0xe089,0x40a,0x2499,0x24f9,2,2,2,0x2599,0x25f9,0xfc09, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,0x44,0x44,0x44,0x44,4,4,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x2659,0x26b9,0x389,0xc629,0x271a,0x27b9,0,0x8a, +0xff89,0xfc8a,0x8a,0xff89,1,0xbf0a,0xbf0a,0xbf0a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a, +0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x100a,0x100a,0x281a,0x100a,0x289a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x291a,0x100a,0x100a,0x299a,0x2a1a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x2aba,0x100a,0x100a,0x100a,0x100a,0x100a,0xf009,0xf009,0x2b39,0xf009,0x2bb9,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x2c39,0xf009,0xf009,0x2cb9,0x2d39,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0x2dd9,0xf009,0xf009,0xf009,0xf009,0xf009,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd829,0xd809, +0xd829,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0x8a,0xff89,0x2e5a,0x2ed9,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,0x44,0x44,0x44,0x44, +4,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x78a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0xf889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x78a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xf889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, -0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0, -0,4,0,0,0,0,0,0,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x180a,0x180a,0x180a,0,0,4,0,0,0,0,0,0,0,0xe809,0xe809,0xe809, 0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, -0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0x27d9,0,0,0,0, -0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64, -0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x44, -0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64,0,0,0,0, +0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0x2f59, +0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44, +0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64, +0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x64,0x64,0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x64,0x64,0x64,0,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0, -0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0, -4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44, +0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0x64, -0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44, -0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64,0x44,4,4,0x44, -0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0, +0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64, +0x44,4,4,0x44,0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x44, -0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x44,0x64,0x44, -0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0, +0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44, +0x44,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, -4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,4,4,4,4,4,4,4,4,4,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44, -4,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, -0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,4,0x44,0x44,0x44, -0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64, -0,0,0,0,0,0,0,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44, -0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44, -0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4, -4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44, -0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0, -0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x64,0x44,4,4,0,0,0,0,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44, +4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x64,0x64,0x64,0,0,0,0,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44, +0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44, +0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0,0, +0,4,4,4,4,4,4,4,4,0,0,0,0,0x64,0,0, +0,0x44,0x64,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0, +0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x64,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0, -0,0x64,0,0,0,0,0,0,0,0,4,0,0,0,0,0, +0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4, -4,0,4,4,4,0x64,0,0,0,0,0,0,0,0x64,0x64,0, -0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, -4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,4,4, -4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0x64,0, -0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,0,0,4,4,4,4,0x64,0x64,0,4,4,0,0,0, -0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x64,0,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x64,0x64,4,0x64,4,4,4, -4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44, -0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4, -0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0, +0,0,0,0,0,4,4,0,0,0,0,4,4,0,0,4, +4,0x64,0,0,0,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4, +4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,4,0,4,4,4,4,4,0x64, -0,0x64,0x64,0,0,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x64,0,0,4,0,4,4,4,4,0,0,0, +0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,4,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,0,0,0,0,4,4,4,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,0,0,4,4,0, -0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,0,0,0x28da,0x291a,0x295a,0x299a,0x29da,0x2a1a,0x2a5a,0x2a9a, -0x2ada,0x2b1a,0x2b5a,0x2b9a,0x2bda,0x2c1a,0x2c5a,0x2c9a,0x2cda,0x2d1a,0x2d5a,0x2d9a,0x2dda,0x2e1a,0x2e5a,0x2e9a, -0x2eda,0x2f1a,0x2f5a,0x2f9a,0x2fda,0x301a,0x305a,0x309a,0x30da,0x311a,0x315a,0x319a,0x31da,0x321a,0,0x325a, -0,0,0,0,0,0x329a,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x44,0x44,0x44,0x4ada,0x4b3a,0x4b9a,0x4bfa,0x4c5a,0x4cba,0x4d1a,0x4d7a, -0x4dda,0x4e3a,0x4e9a,0x4efa,0x4f5a,0x4fba,0x501a,0x507a,0x50da,0x513a,0x519a,0x51fa,0x525a,0x52ba,0,0, -0x5319,0x5379,0x53d9,0x5439,0x5499,0x54f9,0,0,0x32da,0x333a,0x339a,0x33fa,0x345a,0x34ba,0x351a,0x357a, -0x35da,0x363a,0x369a,0x36fa,0x375a,0x37ba,0x381a,0x387a,0x38da,0x393a,0x399a,0x39fa,0x3a5a,0x3aba,0x3b1a,0x3b7a, -0x3bda,0x3c3a,0x3c9a,0x3cfa,0x3d5a,0x3dba,0x3e1a,0x3e7a,0x3eda,0x3f3a,0x3f9a,0x3ffa,0x405a,0x40ba,0x411a,0x417a, -0x41da,0x423a,0x429a,0x42fa,0x435a,0x43ba,0x441a,0x447a,0x44da,0x453a,0x459a,0x45fa,0x465a,0x46ba,0x471a,0x477a, -0x47da,0x483a,0x489a,0x48fa,0x495a,0x49ba,0x4a1a,0x4a7a,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,4,0x64,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,4,4,4,0,4,4,4,0x64,0,0,0,0,0,0, +0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,4,0, +0,0,0,0,4,0x64,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0, +0,0,4,4,4,0,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,4,4,4,4, +0x64,0x64,0x64,0,0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64, +4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0,4, +4,0,0,0,0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64, +4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,4,4,4,4,4,4,4,0,0, -0,0,0,0,0,0,4,0,0,4,4,4,4,4,4,4, -4,4,0x64,4,0,0,0,4,0,0,0,0,0,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,0, +0,0,0,0,0,0x64,0,0x64,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4, +0x64,4,4,4,4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44, +0x64,0,0x44,0x44,0,0,0,0,0,4,4,4,4,4,4,4, +4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,0,0,0,0,0,0,0,0,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,4,0,4,4, +4,4,4,0x64,0,0x64,0x64,0,0,4,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,4, -4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, -0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0,0,4, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,0,4,4,4,4,4,4,4,0, -0x64,0,4,0,0,4,4,4,4,4,4,4,4,0,0,0, -0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0x64, +0,0,0,0,4,4,0,0,0,0,4,4,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, +0,4,4,0,0,0,0,0,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,0x305a,0x309a,0x30da,0x311a, +0x315a,0x319a,0x31da,0x321a,0x325a,0x329a,0x32da,0x331a,0x335a,0x339a,0x33da,0x341a,0x345a,0x349a,0x34da,0x351a, +0x355a,0x359a,0x35da,0x361a,0x365a,0x369a,0x36da,0x371a,0x375a,0x379a,0x37da,0x381a,0x385a,0x389a,0x38da,0x391a, +0x395a,0x399a,0,0x39da,0,0,0,0,0,0x3a1a,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x525a,0x52ba,0x531a,0x537a, +0x53da,0x543a,0x549a,0x54fa,0x555a,0x55ba,0x561a,0x567a,0x56da,0x573a,0x579a,0x57fa,0x585a,0x58ba,0x591a,0x597a, +0x59da,0x5a3a,0,0,0x5a99,0x5af9,0x5b59,0x5bb9,0x5c19,0x5c79,0,0,0x3a5a,0x3aba,0x3b1a,0x3b7a, +0x3bda,0x3c3a,0x3c9a,0x3cfa,0x3d5a,0x3dba,0x3e1a,0x3e7a,0x3eda,0x3f3a,0x3f9a,0x3ffa,0x405a,0x40ba,0x411a,0x417a, +0x41da,0x423a,0x429a,0x42fa,0x435a,0x43ba,0x441a,0x447a,0x44da,0x453a,0x459a,0x45fa,0x465a,0x46ba,0x471a,0x477a, +0x47da,0x483a,0x489a,0x48fa,0x495a,0x49ba,0x4a1a,0x4a7a,0x4ada,0x4b3a,0x4b9a,0x4bfa,0x4c5a,0x4cba,0x4d1a,0x4d7a, +0x4dda,0x4e3a,0x4e9a,0x4efa,0x4f5a,0x4fba,0x501a,0x507a,0x50da,0x513a,0x519a,0x51fa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, +0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,4,4,4,4,4, +4,4,0,0,0,0,0,0,0,0,4,0,0,4,4,4, +4,4,4,4,4,4,0x64,4,0,0,0,4,0,0,0,0, +0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,4,0, -4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,4,4,4,4,4,0,4,0,0,0,0,0,4,0, -0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0, +0,0,0,4,4,0,0,0,0,0,0,0,0,0,4,0, +0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44, -0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,4,4,4,0,0,4,4,0x60,0x64, -4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x64,0,4,4,0,0,0,4,0,4, -4,4,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,4,4,4,4,4,4,0,0,4,0x64,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0, -0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64, -0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0, -0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,1,1,1,1, +0x64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,4,4,4,4, +4,4,4,0,0x64,0,4,0,0,4,4,4,4,4,4,4, +4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0,0,0x64,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44, +0x44,0x64,4,0,4,4,4,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x64,0,4,4,4,4,4,0,4,0,0,0, +0,0,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0, +4,4,0x60,0x64,4,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,0,0, +0,4,0,4,4,4,0x60,0x60,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0, +0x5cd9,0x5d39,0x5d99,0x5df9,0x5e59,0x5ef9,0x5f99,0x5ff9,0x6059,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64, +0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0, +0,0,0,0,0x44,0,0,0,0x44,0x44,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x25,5, -5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1, -1,1,1,1,5,0x5559,1,1,1,0x5599,1,1,5,5,5,5, -0x25,5,5,5,0x25,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,0x60b9,1,1,1,0x60f9,1,1, +5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,0x21,1,1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44, +1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0,0,0,0,0,0,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x55da,0x5659,0x8a,0xff89, +0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x44,0x64,0x64,0x44,0x64, +0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64, +0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x56d9,0x57d9, -0x58d9,0x59d9,0x5ad9,0x5bd9,1,1,0x5c3a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x5cd9,0x409,0x5dd9,0x409,0x5f39,0x409,0x6099,0x409, -0,0xfc0a,0,0xfc0a,0,0xfc0a,0,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x2509,0x2509,0x2b09,0x2b09,0x2b09,0x2b09,0x3209,0x3209, -0x4009,0x4009,0x3809,0x3809,0x3f09,0x3f09,0,0,0x61f9,0x62d9,0x63b9,0x6499,0x6579,0x6659,0x6739,0x6819, -0x68fb,0x69db,0x6abb,0x6b9b,0x6c7b,0x6d5b,0x6e3b,0x6f1b,0x6ff9,0x70d9,0x71b9,0x7299,0x7379,0x7459,0x7539,0x7619, -0x76fb,0x77db,0x78bb,0x799b,0x7a7b,0x7b5b,0x7c3b,0x7d1b,0x7df9,0x7ed9,0x7fb9,0x8099,0x8179,0x8259,0x8339,0x8419, -0x84fb,0x85db,0x86bb,0x879b,0x887b,0x895b,0x8a3b,0x8b1b,0x409,0x409,0x8bf9,0x8cf9,0x8dd9,0,0x8ed9,0x8fd9, -0xfc0a,0xfc0a,0xdb0a,0xdb0a,0x913b,4,0x9219,4,4,4,0x92b9,0x93b9,0x9499,0,0x9599,0x9699, -0xd50a,0xd50a,0xd50a,0xd50a,0x97fb,4,4,4,0x409,0x409,0x98d9,0x9a39,0,0,0x9bd9,0x9cd9, -0xfc0a,0xfc0a,0xce0a,0xce0a,0,4,4,4,0x409,0x409,0x9e39,0x9f99,0xa139,0x389,0xa239,0xa339, -0xfc0a,0xfc0a,0xc80a,0xc80a,0xfc8a,4,4,4,0,0,0xa499,0xa599,0xa679,0,0xa779,0xa879, -0xc00a,0xc00a,0xc10a,0xc10a,0xa9db,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,0,0,0,0,0,0,0,0, -4,4,0,0,0,0,0,0,4,0,0,4,0,0,4,4, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,0,4,4,4,4,4,4, -4,4,4,4,0,0x25,0,0,0,0,0,0,0,0,0,0, -0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44, -0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64, -0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,0,2,0,0,1,2, -2,2,1,1,2,2,2,1,0,2,0,0,0,2,2,2, -2,2,0,0,0,0,0,0,2,0,0xaaba,0,2,0,0xab3a,0xabba, -2,2,0,1,2,2,0xe0a,2,1,0,0,0,0,1,0,0, -1,1,2,2,0,0,0,0,0,2,1,1,0x21,0x21,0,0, -0,0,0xf209,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809, -0xf809,0xf809,0xf809,0xf809,0,0,0,0x8a,0xff89,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a, -0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309, -0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x613a,0x61b9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x6239,0x6339,0x6439,0x6539,0x6639,0x6739,1,1,0x679a,1,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0,0,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0,0,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x6839,0x409,0x6939,0x409, +0x6a99,0x409,0x6bf9,0x409,0,0xfc0a,0,0xfc0a,0,0xfc0a,0,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x2509,0x2509,0x2b09,0x2b09, +0x2b09,0x2b09,0x3209,0x3209,0x4009,0x4009,0x3809,0x3809,0x3f09,0x3f09,0,0,0x6d59,0x6e39,0x6f19,0x6ff9, +0x70d9,0x71b9,0x7299,0x7379,0x745b,0x753b,0x761b,0x76fb,0x77db,0x78bb,0x799b,0x7a7b,0x7b59,0x7c39,0x7d19,0x7df9, +0x7ed9,0x7fb9,0x8099,0x8179,0x825b,0x833b,0x841b,0x84fb,0x85db,0x86bb,0x879b,0x887b,0x8959,0x8a39,0x8b19,0x8bf9, +0x8cd9,0x8db9,0x8e99,0x8f79,0x905b,0x913b,0x921b,0x92fb,0x93db,0x94bb,0x959b,0x967b,0x409,0x409,0x9759,0x9859, +0x9939,0,0x9a39,0x9b39,0xfc0a,0xfc0a,0xdb0a,0xdb0a,0x9c9b,4,0x9d79,4,4,4,0x9e19,0x9f19, +0x9ff9,0,0xa0f9,0xa1f9,0xd50a,0xd50a,0xd50a,0xd50a,0xa35b,4,4,4,0x409,0x409,0xa439,0xa599, +0,0,0xa739,0xa839,0xfc0a,0xfc0a,0xce0a,0xce0a,0,4,4,4,0x409,0x409,0xa999,0xaaf9, +0xac99,0x389,0xad99,0xae99,0xfc0a,0xfc0a,0xc80a,0xc80a,0xfc8a,4,4,4,0,0,0xaff9,0xb0f9, +0xb1d9,0,0xb2d9,0xb3d9,0xc00a,0xc00a,0xc10a,0xc10a,0xb53b,4,4,0,0,0,0,0, +0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4, +0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,4, +4,4,4,4,4,4,4,4,0,0x25,0,0,0,0,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44, +0x64,0x64,0x64,0x44,0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44, +0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0xb61a,0, +2,0,0xb69a,0xb71a,2,2,0,1,2,2,0xe0a,2,1,0,0,0, +0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1, +0x21,0x21,0,0,0,0,0xf209,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, +0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809, +0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0,0,0,0x8a,0xff89,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a, +0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xf309,0xf309,0xf309,0xf309, +0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, 0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, -0x180a,0x180a,0x180a,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, +0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, 0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, -0xe809,0xe809,0xe809,0,0x8a,0xff89,0xac3a,0xac7a,0xacba,0xacf9,0xad39,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0xad7a,0xadba,0xadfa,0xae3a,1,0x8a,0xff89,1,0x8a,0xff89,1,1,1,1,1, -0x25,5,0xae7a,0xaeba,0x8a,0xff89,0x8a,0xff89,1,0,0,0,0,0,0,0x8a, -0xff89,0x8a,0xff89,0x44,0x44,0x44,0x8a,0xff89,0,0,0,0,0,0,0,0, -0,0,0,0,0xaef9,0xaf39,0xaf79,0xafb9,0xaff9,0xb039,0xb079,0xb0b9,0xb0f9,0xb139,0xb179,0xb1b9, -0xb1f9,0xb239,0xb279,0xb2b9,0xb2f9,0xb339,0xb379,0xb3b9,0xb3f9,0xb439,0xb479,0xb4b9,0xb4f9,0xb539,0xb579,0xb5b9, -0xb5f9,0xb639,0xb679,0xb6b9,0xb6f9,0xb739,0xb779,0xb7b9,0xb7f9,0xb839,0,0xb879,0,0,0,0, -0,0xb8b9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0,0x8a,0xff89,0xb79a,0xb7da,0xb81a,0xb859,0xb899,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0xb8da,0xb91a,0xb95a,0xb99a,1,0x8a,0xff89,1,0x8a,0xff89,1, +1,1,1,1,0x25,5,0xb9da,0xba1a,0x8a,0xff89,0x8a,0xff89,1,0,0,0, +0,0,0,0x8a,0xff89,0x8a,0xff89,0x44,0x44,0x44,0x8a,0xff89,0,0,0,0, +0,0,0,0,0,0,0,0,0xba59,0xba99,0xbad9,0xbb19,0xbb59,0xbb99,0xbbd9,0xbc19, +0xbc59,0xbc99,0xbcd9,0xbd19,0xbd59,0xbd99,0xbdd9,0xbe19,0xbe59,0xbe99,0xbed9,0xbf19,0xbf59,0xbf99,0xbfd9,0xc019, +0xc059,0xc099,0xc0d9,0xc119,0xc159,0xc199,0xc1d9,0xc219,0xc259,0xc299,0xc2d9,0xc319,0xc359,0xc399,0,0xc3d9, +0,0,0,0,0,0xc419,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, -0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0, +0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4, +4,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,4,4,4,0, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x8a,0xff89,0x8a,0xff89, +0,0x64,0x64,4,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc45a,0xc4d9,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,5,5,0x44,0x44,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89, +0x8a,0xff89,0,0x44,4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -5,1,1,1,1,1,1,1,1,0x8a,0xff89,0x8a,0xff89,0xb8fa,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,4,4,4,0x8a,0xff89,0xb93a,1,0, +5,5,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x44,0x44,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0xb97a,0xb9ba,0xb9fa,0xba3a,0,0,0xba7a,0xbaba,0xbafa,0xbb3a,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,5,1,1,1,1,1,1,1, +1,0x8a,0xff89,0x8a,0xff89,0xc55a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +4,4,4,0x8a,0xff89,0xc59a,1,0,0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc5da,0xc61a,0xc65a,0xc69a,0xc6da,0, +0xc71a,0xc75a,0xc79a,0xc7da,0x8a,0xff89,0x8a,0xff89,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,1,0,0,0,0,0, -0,0,4,0,0,0,0x64,0,0,0,0,4,0,0,0,0, +5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x64,4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, -4,4,4,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, -4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,4,4, -4,4,0,0,4,0,0,0,0x60,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0, -0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,4,4,4,4,0x64,0x64,0x64,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,4,4,4,4,4,4,4,4,4,4,4,0,0x60, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x44,0,0x44,0x44,0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44, -0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0, -0,0,0,4,4,0,0x64,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0xbb79,1,1,1,1, -1,1,1,4,5,5,5,5,1,1,1,1,1,1,0,0, -0,0,0,0,0,0,0,0,0xbbb9,0xbc19,0xbc79,0xbcd9,0xbd39,0xbd99,0xbdf9,0xbe59, -0xbeb9,0xbf19,0xbf79,0xbfd9,0xc039,0xc099,0xc0f9,0xc159,0xcdb9,0xce19,0xce79,0xced9,0xcf39,0xcf99,0xcff9,0xd059, -0xd0b9,0xd119,0xd179,0xd1d9,0xd239,0xd299,0xd2f9,0xd359,0xd3b9,0xd419,0xd479,0xd4d9,0xd539,0xd599,0xd5f9,0xd659, -0xd6b9,0xd719,0xd779,0xd7d9,0xd839,0xd899,0xd8f9,0xd959,0xc1b9,0xc219,0xc279,0xc2d9,0xc339,0xc399,0xc3f9,0xc459, -0xc4b9,0xc519,0xc579,0xc5d9,0xc639,0xc699,0xc6f9,0xc759,0xc7b9,0xc819,0xc879,0xc8d9,0xc939,0xc999,0xc9f9,0xca59, -0xcab9,0xcb19,0xcb79,0xcbd9,0xcc39,0xcc99,0xccf9,0xcd59,0,0,0,0,0,4,0,0, -4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xd9b9,0xdab9,0xdbb9,0xdcb9,0xde19,0xdf79,0xe0b9,0, -0,0,0,0,0,0,0,0,0,0,0,0xe1f9,0xe2f9,0xe3f9,0xe4f9,0xe5f9, -0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, -0,4,0,0,0,0,0,0,0,0,0,0,0,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, +0,0,0,0x64,0,0,4,4,4,4,0,0,4,0,0,0, +0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,4,4,4,4,4,4,0,0,4,4,0,0,4,4,0, 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, +0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,0x64,0,0,0x44, +0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,4,0,0,0,0,0x64,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0, -0,0,0,0,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xc819,1,1,1,1,1,1,1,4,5,5,5,5, +1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0xc859,0xc8b9,0xc919,0xc979,0xc9d9,0xca39,0xca99,0xcaf9,0xcb59,0xcbb9,0xcc19,0xcc79,0xccd9,0xcd39,0xcd99,0xcdf9, +0xda59,0xdab9,0xdb19,0xdb79,0xdbd9,0xdc39,0xdc99,0xdcf9,0xdd59,0xddb9,0xde19,0xde79,0xded9,0xdf39,0xdf99,0xdff9, +0xe059,0xe0b9,0xe119,0xe179,0xe1d9,0xe239,0xe299,0xe2f9,0xe359,0xe3b9,0xe419,0xe479,0xe4d9,0xe539,0xe599,0xe5f9, +0xce59,0xceb9,0xcf19,0xcf79,0xcfd9,0xd039,0xd099,0xd0f9,0xd159,0xd1b9,0xd219,0xd279,0xd2d9,0xd339,0xd399,0xd3f9, +0xd459,0xd4b9,0xd519,0xd579,0xd5d9,0xd639,0xd699,0xd6f9,0xd759,0xd7b9,0xd819,0xd879,0xd8d9,0xd939,0xd999,0xd9f9, +0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe659,0xe759,0xe859,0xe959,0xeab9,0xec19,0xed59,0,0,0,0,0,0,0,0,0, +0,0,0,0xee99,0xef99,0xf099,0xf199,0xf299,0,0,0,0,0,0,0x64,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0, +0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0, +0,0,4,0,4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0, +0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x140a,0x140a,0x140a,0x140a, 0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, -0x140a,0x140a,0x140a,0x140a,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, -0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, +0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0,0,0,0,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0,0,0,0,0,4,4,4, 0,4,4,0,0,0,0,0,4,0x64,4,0x44,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0, @@ -622,29 +637,36 @@ static const uint16_t ucase_props_trieIndex[11044]={ 4,4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0, 0,0,0x64,4,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,0, -4,0x60,0x64,4,0,0,0,0,0,0,0,0,0,0,0,4, +4,0x60,0x64,4,0,0,0,0,0,0,4,0,0,0,0,4, 4,4,4,4,4,0x64,0x64,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, 0,0,0,0,0,0,0,0,0,0x60,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,4,4,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,4,0,4,0,0,0,0,4, -4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, +4,0,4,0,0,0,0,4,4,0,0x64,0x64,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4,4,4,4,0,0,0,0,0,0,4,4,0,0x64, -0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0, +0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0, +0,0,0,0,4,4,0,0x64,0x64,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,4,4,4,0,0,4,0,0x64, -0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0, -4,4,4,4,4,4,0x60,0x64,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, +4,4,4,0,0,4,0,0x64,0,0,0,0,0,0,0,0, +0,0,0,4,0,4,0,0,4,4,4,4,4,4,0x60,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +0,0,4,4,4,4,0,4,4,4,4,0x64,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,0,0,4,4,4,4,0,4, -4,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, 0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,4,4,4,4,4,4,0,4,4,4,4,4,4,0,0x64, +4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4, +4,0,4,4,0,4,4,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x64,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0, @@ -699,15 +721,24 @@ static const uint16_t ucase_props_trieIndex[11044]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,4,4,4,4,4,0,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0x44,0x44,0,0x44,0x44, +0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0 +0,0,0,0,0,0,0,0,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09, +0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09, +0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -static const uint16_t ucase_props_exceptions[1847]={ +static const uint16_t ucase_props_exceptions[1948]={ 0xc041,0x69,2,0x130,0x131,0x4001,0x6a,0x41,0x6b,1,0x212a,0x41,0x73,1,0x17f,0x5044, 0x49,2,0x130,0x131,0x44,0x4b,1,0x212a,0x44,0x53,1,0x17f,6,0x3bc,0x39c,0x41, 0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0xc0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73, @@ -717,113 +748,119 @@ static const uint16_t ucase_props_exceptions[1847]={ 0xc,0x1c7,0x1c8,9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a, 0x30c,0x4a,0x30c,0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1, 0x2c65,1,0x2c66,4,0x2c7e,4,0x2c7f,4,0x2c6f,4,0x2c6d,4,0x2c70,4,0xa7ab,4, -0xa7ac,4,0xa78d,4,0xa7aa,4,0x2c62,4,0xa7ad,4,0x2c6e,4,0x2c64,4,0xa7b1,0x1004, -0xa7b2,4,0xa7b0,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399, -0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5,0x41,0x3b8, -2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc,1,0xb5, -0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6,1,0x3d5, -0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301, -0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4,0x44,0x399, -2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1,0x3d6,0x44, -0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5,0x44,0x3a9, -1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6,0x3c0,0x3a0, -6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395,0x80,0x2220, -0x565,0x582,0x535,0x552,0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,0x2d04, -1,0x2d05,1,0x2d06,1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,0x2d0c, -1,0x2d0d,1,0x2d0e,1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,0x2d14, -1,0x2d15,1,0x2d16,1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,0x2d1c, -1,0x2d1d,1,0x2d1e,1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,0x2d24, -1,0x2d25,1,0x2d27,1,0x2d2d,3,0xab70,0x13a0,3,0xab71,0x13a1,3,0xab72,0x13a2,3, -0xab73,0x13a3,3,0xab74,0x13a4,3,0xab75,0x13a5,3,0xab76,0x13a6,3,0xab77,0x13a7,3,0xab78, -0x13a8,3,0xab79,0x13a9,3,0xab7a,0x13aa,3,0xab7b,0x13ab,3,0xab7c,0x13ac,3,0xab7d,0x13ad, -3,0xab7e,0x13ae,3,0xab7f,0x13af,3,0xab80,0x13b0,3,0xab81,0x13b1,3,0xab82,0x13b2,3, -0xab83,0x13b3,3,0xab84,0x13b4,3,0xab85,0x13b5,3,0xab86,0x13b6,3,0xab87,0x13b7,3,0xab88, -0x13b8,3,0xab89,0x13b9,3,0xab8a,0x13ba,3,0xab8b,0x13bb,3,0xab8c,0x13bc,3,0xab8d,0x13bd, -3,0xab8e,0x13be,3,0xab8f,0x13bf,3,0xab90,0x13c0,3,0xab91,0x13c1,3,0xab92,0x13c2,3, -0xab93,0x13c3,3,0xab94,0x13c4,3,0xab95,0x13c5,3,0xab96,0x13c6,3,0xab97,0x13c7,3,0xab98, -0x13c8,3,0xab99,0x13c9,3,0xab9a,0x13ca,3,0xab9b,0x13cb,3,0xab9c,0x13cc,3,0xab9d,0x13cd, -3,0xab9e,0x13ce,3,0xab9f,0x13cf,3,0xaba0,0x13d0,3,0xaba1,0x13d1,3,0xaba2,0x13d2,3, -0xaba3,0x13d3,3,0xaba4,0x13d4,3,0xaba5,0x13d5,3,0xaba6,0x13d6,3,0xaba7,0x13d7,3,0xaba8, -0x13d8,3,0xaba9,0x13d9,3,0xabaa,0x13da,3,0xabab,0x13db,3,0xabac,0x13dc,3,0xabad,0x13dd, -3,0xabae,0x13de,3,0xabaf,0x13df,3,0xabb0,0x13e0,3,0xabb1,0x13e1,3,0xabb2,0x13e2,3, -0xabb3,0x13e3,3,0xabb4,0x13e4,3,0xabb5,0x13e5,3,0xabb6,0x13e6,3,0xabb7,0x13e7,3,0xabb8, -0x13e8,3,0xabb9,0x13e9,3,0xabba,0x13ea,3,0xabbb,0x13eb,3,0xabbc,0x13ec,3,0xabbd,0x13ed, -3,0xabbe,0x13ee,3,0xabbf,0x13ef,3,0x13f8,0x13f0,3,0x13f9,0x13f1,3,0x13fa,0x13f2,3, -0x13fb,0x13f3,3,0x13fc,0x13f4,3,0x13fd,0x13f5,6,0x13f0,0x13f0,6,0x13f1,0x13f1,6,0x13f2, -0x13f2,6,0x13f3,0x13f3,6,0x13f4,0x13f4,6,0x13f5,0x13f5,4,0xa77d,4,0x2c63,0x41,0x1e61, -1,0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,0x2220, -0x74,0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220, -0x79,0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61, -0x1e60,0x81,0xdf,0x20,0x73,0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,0x3330, -0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,0x313, -0x301,0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x84, -0x1f88,0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,0x220, -0x1f02,0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,0x3b9, -0x1f0c,0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,0x399, -0x84,0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,0x1f81, -0x220,0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,0x1f03, -0x3b9,0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,0x1f0d, -0x399,0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x84, -0x1f98,0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,0x220, -0x1f22,0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,0x3b9, -0x1f2c,0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,0x399, -0x84,0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,0x1f91, -0x220,0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,0x1f23, -0x3b9,0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,0x1f2d, -0x399,0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x84, -0x1fa8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,0x220, -0x1f62,0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,0x3b9, -0x1f6c,0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,0x399, -0x84,0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,0x1fa1, -0x220,0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,0x1f63, -0x3b9,0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,0x1f6d, -0x399,0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x80, -0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,0x2220, -0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,0x3330, -0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,0x399, -0x46,0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,0x220, -0x3b7,0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,0x342, -0x397,0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0x81, -0x1fc3,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308, -0x300,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,0x2220, -0x3b9,0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308, -0x342,0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,0x3c5, -0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1, -0x313,0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,0x308, -0x342,0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,0x3c9, -0x3b9,0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,0x3a9, -0x342,0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,0x1ff3, -0x220,0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,1, -0xc5,1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,1, -0x250,1,0x252,1,0x23f,1,0x240,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4, -0x10a4,4,0x10a5,4,0x10a6,4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4, -0x10ac,4,0x10ad,4,0x10ae,4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4, -0x10b4,4,0x10b5,4,0x10b6,4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4, -0x10bc,4,0x10bd,4,0x10be,4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4, -0x10c4,4,0x10c5,4,0x10c7,4,0x10cd,1,0x1d79,1,0x265,1,0x266,1,0x25c,1, -0x261,1,0x26c,1,0x29e,1,0x287,1,0x29d,1,0xab53,4,0xa7b3,6,0x13a0,0x13a0, -6,0x13a1,0x13a1,6,0x13a2,0x13a2,6,0x13a3,0x13a3,6,0x13a4,0x13a4,6,0x13a5,0x13a5,6, -0x13a6,0x13a6,6,0x13a7,0x13a7,6,0x13a8,0x13a8,6,0x13a9,0x13a9,6,0x13aa,0x13aa,6,0x13ab, -0x13ab,6,0x13ac,0x13ac,6,0x13ad,0x13ad,6,0x13ae,0x13ae,6,0x13af,0x13af,6,0x13b0,0x13b0, -6,0x13b1,0x13b1,6,0x13b2,0x13b2,6,0x13b3,0x13b3,6,0x13b4,0x13b4,6,0x13b5,0x13b5,6, -0x13b6,0x13b6,6,0x13b7,0x13b7,6,0x13b8,0x13b8,6,0x13b9,0x13b9,6,0x13ba,0x13ba,6,0x13bb, -0x13bb,6,0x13bc,0x13bc,6,0x13bd,0x13bd,6,0x13be,0x13be,6,0x13bf,0x13bf,6,0x13c0,0x13c0, -6,0x13c1,0x13c1,6,0x13c2,0x13c2,6,0x13c3,0x13c3,6,0x13c4,0x13c4,6,0x13c5,0x13c5,6, -0x13c6,0x13c6,6,0x13c7,0x13c7,6,0x13c8,0x13c8,6,0x13c9,0x13c9,6,0x13ca,0x13ca,6,0x13cb, -0x13cb,6,0x13cc,0x13cc,6,0x13cd,0x13cd,6,0x13ce,0x13ce,6,0x13cf,0x13cf,6,0x13d0,0x13d0, -6,0x13d1,0x13d1,6,0x13d2,0x13d2,6,0x13d3,0x13d3,6,0x13d4,0x13d4,6,0x13d5,0x13d5,6, -0x13d6,0x13d6,6,0x13d7,0x13d7,6,0x13d8,0x13d8,6,0x13d9,0x13d9,6,0x13da,0x13da,6,0x13db, -0x13db,6,0x13dc,0x13dc,6,0x13dd,0x13dd,6,0x13de,0x13de,6,0x13df,0x13df,6,0x13e0,0x13e0, -6,0x13e1,0x13e1,6,0x13e2,0x13e2,6,0x13e3,0x13e3,6,0x13e4,0x13e4,6,0x13e5,0x13e5,6, -0x13e6,0x13e6,6,0x13e7,0x13e7,6,0x13e8,0x13e8,6,0x13e9,0x13e9,6,0x13ea,0x13ea,6,0x13eb, -0x13eb,6,0x13ec,0x13ec,6,0x13ed,0x13ed,6,0x13ee,0x13ee,6,0x13ef,0x13ef,0x80,0x2220,0x66, -0x66,0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x80,0x2220,0x66, -0x6c,0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69, -0x80,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,0x2220,0x73,0x74, -0x53,0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x80, -0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x80, -0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x80, -0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d +0xa7ac,4,0xa78d,4,0xa7aa,4,0xa7ae,4,0x2c62,4,0xa7ad,4,0x2c6e,4,0x2c64,4, +0xa7b1,0x1004,0xa7b2,4,0xa7b0,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308, +0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5, +0x41,0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc, +1,0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6, +1,0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5, +0x308,0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4, +0x44,0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1, +0x3d6,0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5, +0x44,0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6, +0x3c0,0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395, +0x41,0x432,1,0x1c80,0x41,0x434,1,0x1c81,0x41,0x43e,1,0x1c82,0x41,0x441,1,0x1c83, +0x41,0x442,2,0x1c84,0x1c85,0x41,0x44a,1,0x1c86,0x44,0x412,1,0x1c80,0x44,0x414,1, +0x1c81,0x44,0x41e,1,0x1c82,0x44,0x421,1,0x1c83,0x44,0x422,2,0x1c84,0x1c85,0x44,0x42a, +1,0x1c86,0x41,0x463,1,0x1c87,0x44,0x462,1,0x1c87,0x80,0x2220,0x565,0x582,0x535,0x552, +0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,0x2d04,1,0x2d05,1,0x2d06, +1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,0x2d0c,1,0x2d0d,1,0x2d0e, +1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,0x2d14,1,0x2d15,1,0x2d16, +1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,0x2d1c,1,0x2d1d,1,0x2d1e, +1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,0x2d24,1,0x2d25,1,0x2d27, +1,0x2d2d,3,0xab70,0x13a0,3,0xab71,0x13a1,3,0xab72,0x13a2,3,0xab73,0x13a3,3,0xab74, +0x13a4,3,0xab75,0x13a5,3,0xab76,0x13a6,3,0xab77,0x13a7,3,0xab78,0x13a8,3,0xab79,0x13a9, +3,0xab7a,0x13aa,3,0xab7b,0x13ab,3,0xab7c,0x13ac,3,0xab7d,0x13ad,3,0xab7e,0x13ae,3, +0xab7f,0x13af,3,0xab80,0x13b0,3,0xab81,0x13b1,3,0xab82,0x13b2,3,0xab83,0x13b3,3,0xab84, +0x13b4,3,0xab85,0x13b5,3,0xab86,0x13b6,3,0xab87,0x13b7,3,0xab88,0x13b8,3,0xab89,0x13b9, +3,0xab8a,0x13ba,3,0xab8b,0x13bb,3,0xab8c,0x13bc,3,0xab8d,0x13bd,3,0xab8e,0x13be,3, +0xab8f,0x13bf,3,0xab90,0x13c0,3,0xab91,0x13c1,3,0xab92,0x13c2,3,0xab93,0x13c3,3,0xab94, +0x13c4,3,0xab95,0x13c5,3,0xab96,0x13c6,3,0xab97,0x13c7,3,0xab98,0x13c8,3,0xab99,0x13c9, +3,0xab9a,0x13ca,3,0xab9b,0x13cb,3,0xab9c,0x13cc,3,0xab9d,0x13cd,3,0xab9e,0x13ce,3, +0xab9f,0x13cf,3,0xaba0,0x13d0,3,0xaba1,0x13d1,3,0xaba2,0x13d2,3,0xaba3,0x13d3,3,0xaba4, +0x13d4,3,0xaba5,0x13d5,3,0xaba6,0x13d6,3,0xaba7,0x13d7,3,0xaba8,0x13d8,3,0xaba9,0x13d9, +3,0xabaa,0x13da,3,0xabab,0x13db,3,0xabac,0x13dc,3,0xabad,0x13dd,3,0xabae,0x13de,3, +0xabaf,0x13df,3,0xabb0,0x13e0,3,0xabb1,0x13e1,3,0xabb2,0x13e2,3,0xabb3,0x13e3,3,0xabb4, +0x13e4,3,0xabb5,0x13e5,3,0xabb6,0x13e6,3,0xabb7,0x13e7,3,0xabb8,0x13e8,3,0xabb9,0x13e9, +3,0xabba,0x13ea,3,0xabbb,0x13eb,3,0xabbc,0x13ec,3,0xabbd,0x13ed,3,0xabbe,0x13ee,3, +0xabbf,0x13ef,3,0x13f8,0x13f0,3,0x13f9,0x13f1,3,0x13fa,0x13f2,3,0x13fb,0x13f3,3,0x13fc, +0x13f4,3,0x13fd,0x13f5,6,0x13f0,0x13f0,6,0x13f1,0x13f1,6,0x13f2,0x13f2,6,0x13f3,0x13f3, +6,0x13f4,0x13f4,6,0x13f5,0x13f5,6,0x432,0x412,6,0x434,0x414,6,0x43e,0x41e,6, +0x441,0x421,0x46,0x442,0x422,1,0x1c85,0x46,0x442,0x422,1,0x1c84,6,0x44a,0x42a,6, +0x463,0x462,6,0xa64b,0xa64a,4,0xa77d,4,0x2c63,0x41,0x1e61,1,0x1e9b,0x44,0x1e60,1, +0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,0x2220,0x74,0x308,0x54,0x308,0x54, +0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220,0x79,0x30a,0x59,0x30a,0x59, +0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61,0x1e60,0x81,0xdf,0x20,0x73, +0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,0x3330,0x3c5,0x313,0x300,0x3a5,0x313, +0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x80, +0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x84,0x1f88,0x220,0x1f00,0x3b9,0x1f08, +0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x84, +0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x84,0x1f8d,0x220, +0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x84,0x1f8f,0x220,0x1f07,0x3b9, +0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,0x1f81,0x220,0x1f01,0x3b9,0x1f09,0x399, +0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x81,0x1f84, +0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x81,0x1f86,0x220,0x1f06, +0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x84,0x1f98,0x220,0x1f20,0x3b9,0x1f28, +0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x84, +0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x84,0x1f9d,0x220, +0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x84,0x1f9f,0x220,0x1f27,0x3b9, +0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,0x1f91,0x220,0x1f21,0x3b9,0x1f29,0x399, +0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x81,0x1f94, +0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x81,0x1f96,0x220,0x1f26, +0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x84,0x1fa8,0x220,0x1f60,0x3b9,0x1f68, +0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x84, +0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x84,0x1fad,0x220, +0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x84,0x1faf,0x220,0x1f67,0x3b9, +0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,0x1fa1,0x220,0x1f61,0x3b9,0x1f69,0x399, +0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x81,0x1fa4, +0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x81,0x1fa6,0x220,0x1f66, +0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x80,0x2220,0x1f70,0x3b9,0x1fba,0x399, +0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,0x2220,0x3ac,0x3b9,0x386,0x399,0x386, +0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,0x3330,0x3b1,0x342,0x3b9,0x391,0x342, +0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,0x399,0x46,0x3b9,0x399,1,0x345, +0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,0x220,0x3b7,0x3b9,0x397,0x399,0x80, +0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,0x342,0x397,0x342,0x397,0x342,0x80, +0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0x81,0x1fc3,0x220,0x3b7,0x3b9,0x397, +0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308,0x300,0xc0,1,0x3330,0x3b9, +0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,0x2220,0x3b9,0x342,0x399,0x342,0x399, +0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,0x342,0x80,0x3330,0x3c5,0x308, +0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301, +0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,0x313,0x80,0x2220,0x3c5,0x342, +0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x80, +0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,0x3c9,0x3b9,0x3a9,0x399,0x80,0x2220, +0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,0x3a9,0x342,0x3a9,0x342,0x80,0x3330, +0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,0x1ff3,0x220,0x3c9,0x3b9,0x3a9,0x399, +0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,1,0xc5,1,0x26b,1,0x1d7d, +1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,1,0x250,1,0x252,1,0x23f, +1,0x240,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,4,0x10a5,4,0x10a6, +4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,4,0x10ad,4,0x10ae, +4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,4,0x10b5,4,0x10b6, +4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,4,0x10bd,4,0x10be, +4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,4,0x10c5,4,0x10c7, +4,0x10cd,0x41,0xa64b,1,0x1c88,0x44,0xa64a,1,0x1c88,1,0x1d79,1,0x265,1,0x266, +1,0x25c,1,0x261,1,0x26c,1,0x26a,1,0x29e,1,0x287,1,0x29d,1,0xab53, +4,0xa7b3,6,0x13a0,0x13a0,6,0x13a1,0x13a1,6,0x13a2,0x13a2,6,0x13a3,0x13a3,6,0x13a4, +0x13a4,6,0x13a5,0x13a5,6,0x13a6,0x13a6,6,0x13a7,0x13a7,6,0x13a8,0x13a8,6,0x13a9,0x13a9, +6,0x13aa,0x13aa,6,0x13ab,0x13ab,6,0x13ac,0x13ac,6,0x13ad,0x13ad,6,0x13ae,0x13ae,6, +0x13af,0x13af,6,0x13b0,0x13b0,6,0x13b1,0x13b1,6,0x13b2,0x13b2,6,0x13b3,0x13b3,6,0x13b4, +0x13b4,6,0x13b5,0x13b5,6,0x13b6,0x13b6,6,0x13b7,0x13b7,6,0x13b8,0x13b8,6,0x13b9,0x13b9, +6,0x13ba,0x13ba,6,0x13bb,0x13bb,6,0x13bc,0x13bc,6,0x13bd,0x13bd,6,0x13be,0x13be,6, +0x13bf,0x13bf,6,0x13c0,0x13c0,6,0x13c1,0x13c1,6,0x13c2,0x13c2,6,0x13c3,0x13c3,6,0x13c4, +0x13c4,6,0x13c5,0x13c5,6,0x13c6,0x13c6,6,0x13c7,0x13c7,6,0x13c8,0x13c8,6,0x13c9,0x13c9, +6,0x13ca,0x13ca,6,0x13cb,0x13cb,6,0x13cc,0x13cc,6,0x13cd,0x13cd,6,0x13ce,0x13ce,6, +0x13cf,0x13cf,6,0x13d0,0x13d0,6,0x13d1,0x13d1,6,0x13d2,0x13d2,6,0x13d3,0x13d3,6,0x13d4, +0x13d4,6,0x13d5,0x13d5,6,0x13d6,0x13d6,6,0x13d7,0x13d7,6,0x13d8,0x13d8,6,0x13d9,0x13d9, +6,0x13da,0x13da,6,0x13db,0x13db,6,0x13dc,0x13dc,6,0x13dd,0x13dd,6,0x13de,0x13de,6, +0x13df,0x13df,6,0x13e0,0x13e0,6,0x13e1,0x13e1,6,0x13e2,0x13e2,6,0x13e3,0x13e3,6,0x13e4, +0x13e4,6,0x13e5,0x13e5,6,0x13e6,0x13e6,6,0x13e7,0x13e7,6,0x13e8,0x13e8,6,0x13e9,0x13e9, +6,0x13ea,0x13ea,6,0x13eb,0x13eb,6,0x13ec,0x13ec,6,0x13ed,0x13ed,6,0x13ee,0x13ee,6, +0x13ef,0x13ef,0x80,0x2220,0x66,0x66,0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49, +0x46,0x69,0x80,0x2220,0x66,0x6c,0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46, +0x46,0x49,0x46,0x66,0x69,0x80,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c, +0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53, +0x54,0x53,0x74,0xfb05,0x80,0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565, +0x544,0x535,0x544,0x565,0x80,0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576, +0x54e,0x546,0x54e,0x576,0x80,0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d }; static const uint16_t ucase_props_unfold[370]={ @@ -860,16 +897,16 @@ static const UCaseProps ucase_props_singleton={ ucase_props_unfold, { ucase_props_trieIndex, - ucase_props_trieIndex+3160, + ucase_props_trieIndex+3228, NULL, - 3160, - 7884, + 3228, + 8292, 0x188, - 0xcd4, + 0xd18, 0x0, 0x0, 0xe0800, - 0x2b20, + 0x2cfc, NULL, 0, FALSE, FALSE, 0, NULL }, { 3,0,0,0 } diff --git a/deps/icu-small/source/common/ucasemap.cpp b/deps/icu-small/source/common/ucasemap.cpp index f3ab31fa76610b..c0d56c28731d1f 100644 --- a/deps/icu-small/source/common/ucasemap.cpp +++ b/deps/icu-small/source/common/ucasemap.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -122,58 +124,103 @@ static inline int32_t appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, int32_t result, const UChar *s) { UChar32 c; - int32_t length, destLength; + int32_t length; UErrorCode errorCode; /* decode the result */ if(result<0) { /* (not) original code point */ c=~result; - length=-1; + length=U8_LENGTH(c); } else if(result<=UCASE_MAX_STRING_LENGTH) { c=U_SENTINEL; length=result; } else { c=result; - length=-1; + length=U8_LENGTH(c); + } + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } if(destIndex=0) { /* code point */ UBool isError=FALSE; U8_APPEND(dest, destIndex, destCapacity, c, isError); if(isError) { /* overflow, nothing written */ - destIndex+=U8_LENGTH(c); + destIndex+=length; } } else { /* string */ + int32_t destLength; errorCode=U_ZERO_ERROR; u_strToUTF8( (char *)(dest+destIndex), destCapacity-destIndex, &destLength, s, length, &errorCode); + if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { + return -1; + } + if(destLength>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } destIndex+=destLength; /* we might have an overflow, but we know the actual length */ } } else { /* preflight */ - if(length<0) { - destIndex+=U8_LENGTH(c); + if(c>=0) { + destIndex+=length; } else { + int32_t destLength; errorCode=U_ZERO_ERROR; u_strToUTF8( NULL, 0, &destLength, s, length, &errorCode); + if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { + return -1; + } + if(destLength>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } destIndex+=destLength; } } return destIndex; } +static inline int32_t +appendUChar(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar c) { + int32_t length=U8_LENGTH(c); + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + int32_t limit=destIndex+length; + if(limit0) { + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + if((destIndex+length)<=destCapacity) { + uprv_memcpy(dest+destIndex, s, length); + } + destIndex+=length; + } + return destIndex; +} + static UChar32 U_CALLCONV utf8_caseContextIterator(void *context, int8_t dir) { UCaseContext *csc=(UCaseContext *)context; @@ -231,9 +278,11 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, U8_NEXT(src, srcIndex, srcLimit, c); csc->cpLimit=srcIndex; if(c<0) { - int32_t i=csc->cpStart; - while(destIndexcpStart, srcIndex-csc->cpStart); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } continue; } @@ -243,6 +292,10 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, dest[destIndex++]=(uint8_t)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -261,7 +314,7 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, UErrorCode *pErrorCode) { const UChar *s; UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex, length; + int32_t prev, titleStart, titleLimit, idx, destIndex; UBool isFirstIndex; if(U_FAILURE(*pErrorCode)) { @@ -327,30 +380,36 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, break; /* cased letter at [titleStart..titleLimit[ */ } } - length=titleStart-prev; - if(length>0) { - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+prev, length); - } - destIndex+=length; + destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } } if(titleStartcsp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(c>=0) { + csc.cpStart=titleStart; + csc.cpLimit=titleLimit; + c=ucase_toFullTitle(csm->csp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache); + destIndex=appendResult(dest, destIndex, destCapacity, c, s); + } else { + // Malformed UTF-8. + destIndex=appendString(dest, destIndex, destCapacity, src+titleStart, titleLimit-titleStart); + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } /* Special case Dutch IJ titlecasing */ - if ( titleStart+1 < idx && - ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH && - ( src[titleStart] == 0x0049 || src[titleStart] == 0x0069 ) && - ( src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A )) { - c=0x004A; - destIndex=appendResult(dest, destIndex, destCapacity, c, s); - titleLimit++; + if (titleStart+1 < idx && + ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && + (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); + titleLimit++; } /* lowercase [titleLimit..index[ */ if(titleLimitcsp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // c is case-ignorable + nextState |= (state & AFTER_CASED); + } else if (type != UCASE_NONE) { + // c is cased + nextState |= AFTER_CASED; + } + uint32_t data = getLetterData(c); + if (data > 0) { + uint32_t upper = data & UPPER_MASK; + // Add a dialytika to this iota or ypsilon vowel + // if we removed a tonos from the previous vowel, + // and that previous vowel did not also have (or gain) a dialytika. + // Adding one only to the final vowel in a longer sequence + // (which does not occur in normal writing) would require lookahead. + // Set the same flag as for preserving an existing dialytika. + if ((data & HAS_VOWEL) != 0 && (state & AFTER_VOWEL_WITH_ACCENT) != 0 && + (upper == 0x399 || upper == 0x3A5)) { + data |= HAS_DIALYTIKA; + } + int32_t numYpogegrammeni = 0; // Map each one to a trailing, spacing, capital iota. + if ((data & HAS_YPOGEGRAMMENI) != 0) { + numYpogegrammeni = 1; + } + // Skip combining diacritics after this Greek letter. + int32_t nextNextIndex = nextIndex; + while (nextIndex < srcLength) { + UChar32 c2; + U8_NEXT(src, nextNextIndex, srcLength, c2); + uint32_t diacriticData = getDiacriticData(c2); + if (diacriticData != 0) { + data |= diacriticData; + if ((diacriticData & HAS_YPOGEGRAMMENI) != 0) { + ++numYpogegrammeni; + } + nextIndex = nextNextIndex; + } else { + break; // not a Greek diacritic + } + } + if ((data & HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA) == HAS_VOWEL_AND_ACCENT) { + nextState |= AFTER_VOWEL_WITH_ACCENT; + } + // Map according to Greek rules. + UBool addTonos = FALSE; + if (upper == 0x397 && + (data & HAS_ACCENT) != 0 && + numYpogegrammeni == 0 && + (state & AFTER_CASED) == 0 && + !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + // Keep disjunctive "or" with (only) a tonos. + // We use the same "word boundary" conditions as for the Final_Sigma test. + if (i == nextIndex) { + upper = 0x389; // Preserve the precomposed form. + } else { + addTonos = TRUE; + } + } else if ((data & HAS_DIALYTIKA) != 0) { + // Preserve a vowel with dialytika in precomposed form if it exists. + if (upper == 0x399) { + upper = 0x3AA; + data &= ~HAS_EITHER_DIALYTIKA; + } else if (upper == 0x3A5) { + upper = 0x3AB; + data &= ~HAS_EITHER_DIALYTIKA; + } + } + destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); + if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); + --numYpogegrammeni; + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } else if(c>=0) { + const UChar *s; + UChar32 c2 = 0; + c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); + if((destIndexdestCapacity) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + return destIndex; +} + +} // namespace GreekUpper +U_NAMESPACE_END + static int32_t U_CALLCONV ucasemap_internalUTF8ToLower(const UCaseMap *csm, uint8_t *dest, int32_t destCapacity, @@ -406,6 +618,10 @@ ucasemap_internalUTF8ToUpper(const UCaseMap *csm, uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, UErrorCode *pErrorCode) { + int32_t locCache = csm->locCache; + if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { + return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + } UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; @@ -434,8 +650,11 @@ utf8_foldCase(const UCaseProps *csp, start=srcIndex; U8_NEXT(src, srcIndex, srcLength, c); if(c<0) { - while(destIndex>2)-0xbf; int32_t exp=(ntv&3)+1; @@ -458,6 +460,12 @@ u_getNumericValue(UChar32 c) { } return numValue; + } else if(ntv>2); + return (double)numerator/denominator; } else { /* reserved */ return U_NO_NUMERIC_VALUE; diff --git a/deps/icu-small/source/common/uchar_props_data.h b/deps/icu-small/source/common/uchar_props_data.h index f898e3f0a567f8..79ba55eb75d570 100644 --- a/deps/icu-small/source/common/uchar_props_data.h +++ b/deps/icu-small/source/common/uchar_props_data.h @@ -1,153 +1,155 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: uchar_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: uchar_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp + #ifdef INCLUDED_FROM_UCHAR_C -static const UVersionInfo dataVersion={8,0,0,0}; +static const UVersionInfo dataVersion={9,0,0,0}; -static const uint16_t propsTrie_index[19820]={ -0x41e,0x426,0x42e,0x436,0x44e,0x456,0x45e,0x466,0x46e,0x476,0x47c,0x484,0x48c,0x494,0x49c,0x4a4, -0x4aa,0x4b2,0x4ba,0x4c2,0x4c5,0x4cd,0x4d5,0x4dd,0x4e5,0x4ed,0x4e9,0x4f1,0x4f9,0x501,0x506,0x50e, -0x516,0x51e,0x522,0x52a,0x532,0x53a,0x542,0x54a,0x546,0x54e,0x553,0x55b,0x561,0x569,0x571,0x579, -0x581,0x589,0x591,0x599,0x59e,0x5a6,0x5a9,0x5b1,0x5b9,0x5c1,0x5c7,0x5cf,0x5ce,0x5d6,0x5de,0x5e6, -0x5f6,0x5ee,0x5fe,0x43e,0x43e,0x60e,0x43e,0x606,0x61e,0x620,0x628,0x616,0x638,0x63e,0x646,0x630, -0x656,0x65c,0x664,0x64e,0x674,0x67a,0x682,0x66c,0x692,0x698,0x6a0,0x68a,0x6b0,0x6b8,0x6c0,0x6a8, -0x6d0,0x6d6,0x6de,0x6c8,0x6ee,0x6f4,0x6fc,0x6e6,0x6ee,0x70b,0x713,0x704,0x723,0x72a,0x732,0x71b, -0x5ca,0x73a,0x742,0x43e,0x74a,0x752,0x75a,0x43e,0x762,0x76a,0x772,0x777,0x77f,0x786,0x78e,0x43e, -0x589,0x796,0x79e,0x7a6,0x7ae,0x516,0x7be,0x7b6,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x7c4,0x589,0x7cc,0x7c2,0x7d4,0x589,0x7d0,0x589,0x7da,0x7e2,0x7ea,0x516,0x516,0x7f2, -0x7fa,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x7ff,0x807,0x589,0x589,0x80f,0x817,0x81f,0x827,0x82f,0x589,0x837,0x83f,0x847, -0x857,0x589,0x85f,0x861,0x589,0x84f,0x589,0x869,0x87d,0x871,0x879,0x885,0x589,0x88d,0x893,0x89b, -0x8a3,0x589,0x8b3,0x8bb,0x8c3,0x8ab,0x43e,0x43e,0x8d3,0x8d6,0x8de,0x8cb,0x8ee,0x8e6,0x589,0x8f5, -0x589,0x904,0x8fd,0x90c,0x43e,0x43e,0x914,0x91c,0x4be,0x924,0x927,0x92d,0x934,0x927,0x4e5,0x93c, -0x46e,0x46e,0x46e,0x46e,0x944,0x46e,0x46e,0x46e,0x954,0x95c,0x964,0x96c,0x974,0x978,0x980,0x94c, -0x998,0x9a0,0x988,0x990,0x9a8,0x9b0,0x9b8,0x9c0,0x9d8,0x9c8,0x9d0,0x9e0,0x9e8,0x9f7,0x9fc,0x9ef, -0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa0c,0xa14,0x89b,0xa17,0xa1f,0xa26,0xa2b,0xa33, -0x89b,0xa38,0xa37,0xa48,0xa4b,0x89b,0x89b,0xa40,0x89b,0x89b,0x89b,0x89b,0x89b,0xa5a,0xa62,0xa52, -0x89b,0x89b,0x89b,0xa67,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xa6d,0xa75,0x89b,0xa7d,0xa84, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xa04,0xa04,0xa04,0xa04,0xa8c,0xa04,0xa93,0xa9a, -0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0x89b,0xaa2,0xaa9,0xaad,0xab3,0xab9,0xac1,0xac6, -0x516,0xad6,0xace,0xade,0x46e,0x46e,0x46e,0xae6,0x4be,0xaee,0x589,0xaf4,0xb04,0xafc,0xafc,0x4e5, -0xb0c,0xb14,0xb1c,0x43e,0xb24,0x89b,0x89b,0xb2b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xb33,0xb39, -0xb49,0xb41,0x5ca,0x589,0xb51,0x7fa,0x589,0xb59,0xb61,0xb66,0x589,0x589,0xb6b,0x575,0x89b,0xb72, -0xb7a,0xb82,0xb88,0x89b,0xb82,0xb90,0x89b,0xb7a,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b, -0xb98,0x589,0x589,0x589,0xba0,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xba6,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbab,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x869,0x89b,0x89b, -0xbb3,0x589,0xbb6,0x589,0xbbe,0xbc4,0xbcc,0xbd4,0xbd9,0x589,0x589,0xbdd,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbe4,0x589,0xbeb,0xbf1,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbf9,0x589,0x589,0x589,0xc01,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0xc03,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc0a,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0xc11,0x589,0x589,0x589,0xc18,0xc20,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc25,0x589,0x589,0xc2d,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc31,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc34,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc37,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0xc3d,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc45,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xc4a,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0xc4f,0x589,0x589,0x589,0xc54,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xc5c,0xc63,0xc67,0x589,0x589,0x589,0xc6e,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x869,0x43e, -0xc7c,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc74,0x89b,0xc84,0x90c,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0xc89,0xc91,0x46e,0xca1,0xc99,0x589,0x589,0xca9,0xcb1,0xcc1,0x46e,0xcc6,0xcce,0xcd4,0x43e,0xcb9, -0xcdc,0xce4,0x589,0xcec,0xcfc,0xcff,0xcf4,0xd07,0x5de,0xd0f,0xd16,0xd1e,0x61e,0xd2e,0xd26,0xd36, -0x589,0xd3e,0xd46,0xd4e,0x589,0xd56,0xd5e,0xd66,0xd6e,0xd76,0xd7a,0xd82,0x4be,0x4be,0x589,0xd8a, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xd92,0xd99,0x860, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0x589,0x589,0x589,0xdb1,0x589,0xc6f,0xdb8,0xdbd, -0x589,0x589,0x589,0xdc5,0x589,0x589,0xdc9,0x43e,0xde1,0xdd1,0xdd9,0x589,0x589,0xde9,0xdf1,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xdf6,0xdfe,0x589,0xe02,0x589,0xe08,0xe0c, -0xe14,0xe1c,0xe23,0xe2b,0x589,0x589,0x589,0xe31,0xe49,0x42e,0xe51,0xe59,0xe5e,0x87d,0xe39,0xe41, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0x10f8,0x10f8,0x1138,0x1178,0x11b8,0x11f0,0x1230,0x1270,0x12a8,0x12e8,0x1314,0x1354,0x1394,0x13a4,0x13e4,0x1418, -0x1458,0x1488,0x14c8,0x1508,0x1518,0x154c,0x1584,0x15c4,0x1604,0x1644,0x1678,0x16a4,0x16e4,0x171c,0x1738,0x1778, -0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xbdd,0xa40,0xa40,0xa40,0xa40,0xc1d,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xc5d,0xc7d,0xa40,0xa40,0xcbd,0xcfd,0xa40,0xd3d,0xd7d,0xdbd, -0xdfd,0xe34,0x1db,0x1db,0xe58,0xe8c,0x1db,0xeb4,0x1db,0x1db,0x1db,0x1db,0xee1,0x1db,0x1db,0x1db, -0x1db,0x1db,0x1db,0x1db,0xef5,0x1db,0xf2d,0xf6d,0x1db,0xf78,0xa40,0xa40,0xa40,0xa40,0xa40,0xfb8, +static const uint16_t propsTrie_index[20780]={ +0x44e,0x456,0x45e,0x466,0x47e,0x486,0x48e,0x496,0x49e,0x4a6,0x4ac,0x4b4,0x4bc,0x4c4,0x4cc,0x4d4, +0x4da,0x4e2,0x4ea,0x4f2,0x4f5,0x4fd,0x505,0x50d,0x515,0x51d,0x519,0x521,0x529,0x531,0x536,0x53e, +0x546,0x54e,0x552,0x55a,0x562,0x56a,0x572,0x57a,0x576,0x57e,0x583,0x58b,0x591,0x599,0x5a1,0x5a9, +0x5b1,0x5b9,0x5c1,0x5c9,0x5ce,0x5d6,0x5d9,0x5e1,0x5e9,0x5f1,0x5f7,0x5ff,0x5fe,0x606,0x60e,0x616, +0x626,0x61e,0x62e,0x46e,0x46e,0x63e,0x646,0x636,0x656,0x658,0x660,0x64e,0x670,0x676,0x67e,0x668, +0x68e,0x694,0x69c,0x686,0x6ac,0x6b2,0x6ba,0x6a4,0x6ca,0x6d0,0x6d8,0x6c2,0x6e8,0x6f0,0x6f8,0x6e0, +0x708,0x70e,0x716,0x700,0x726,0x72c,0x734,0x71e,0x744,0x749,0x751,0x73c,0x761,0x768,0x770,0x759, +0x5fa,0x778,0x780,0x46e,0x788,0x790,0x798,0x46e,0x7a0,0x7a8,0x7b0,0x7b5,0x7bd,0x7c4,0x7cc,0x46e, +0x5b9,0x7d4,0x7dc,0x7e4,0x7ec,0x546,0x7fc,0x7f4,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x802,0x5b9,0x80a,0x800,0x812,0x5b9,0x80e,0x5b9,0x818,0x820,0x828,0x546,0x546,0x830, +0x838,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x83d,0x845,0x5b9,0x5b9,0x84d,0x855,0x85d,0x865,0x86d,0x5b9,0x875,0x87d,0x885, +0x895,0x5b9,0x89d,0x89f,0x8a7,0x88d,0x5b9,0x8aa,0x8be,0x8b2,0x8ba,0x8c6,0x5b9,0x8ce,0x8d4,0x8dc, +0x8e4,0x5b9,0x8f4,0x8fc,0x904,0x8ec,0x46e,0x46e,0x914,0x917,0x91f,0x90c,0x92f,0x927,0x5b9,0x936, +0x5b9,0x945,0x93e,0x94d,0x955,0x46e,0x95d,0x965,0x4ee,0x96d,0x970,0x976,0x97d,0x970,0x515,0x985, +0x49e,0x49e,0x49e,0x49e,0x98d,0x49e,0x49e,0x49e,0x99d,0x9a5,0x9ad,0x9b5,0x9bd,0x9c1,0x9c9,0x995, +0x9e1,0x9e9,0x9d1,0x9d9,0x9f1,0x9f9,0xa01,0xa09,0xa21,0xa11,0xa19,0xa29,0xa31,0xa40,0xa45,0xa38, +0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa55,0xa5d,0x8dc,0xa60,0xa68,0xa6f,0xa74,0xa7c, +0x8dc,0xa82,0xa81,0xa92,0xa95,0x8dc,0x8dc,0xa8a,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xaa4,0xaac,0xa9c, +0x8dc,0x8dc,0x8dc,0xab1,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xab7,0xabf,0x8dc,0xac7,0xace, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xa4d,0xa4d,0xa4d,0xa4d,0xad6,0xa4d,0xadd,0xae4, +0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0x8dc,0xaec,0xaf3,0xaf7,0xafd,0xb03,0xb0b,0xb10, +0x546,0xb20,0xb18,0xb28,0x49e,0x49e,0x49e,0xb30,0x4ee,0xb38,0x5b9,0xb3e,0xb4e,0xb46,0xb46,0x515, +0xb56,0xb5e,0xb66,0x46e,0xb6e,0x8dc,0x8dc,0xb75,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xb7d,0xb83, +0xb93,0xb8b,0x5fa,0x5b9,0xb9b,0x838,0x5b9,0xba3,0xbab,0xbb0,0x5b9,0x5b9,0xbb5,0x5a5,0x8dc,0xbbc, +0xbc4,0xbcc,0xbd2,0x8dc,0xbcc,0xbda,0x8dc,0xbc4,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc, +0xbe2,0x5b9,0x5b9,0x5b9,0xbea,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xbf0,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xbf5,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8aa,0x8dc,0x8dc, +0xbfd,0x5b9,0xc00,0x5b9,0xc08,0xc0e,0xc16,0xc1e,0xc23,0x5b9,0x5b9,0xc27,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc2e,0x5b9,0xc35,0xc3b,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc43,0x5b9,0x5b9,0x5b9,0xc4b,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc4d,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc54,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0xc5b,0x5b9,0x5b9,0x5b9,0xc62,0xc6a,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc6f,0x5b9,0x5b9,0xc77,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc7b,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc7e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc81,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0xc87,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xc8f,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xc94,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc99,0x5b9,0x5b9,0x5b9,0xc9e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xca6,0xcad,0xcb1,0x5b9,0x5b9,0x5b9,0xcb8,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8aa,0x46e, +0xcc6,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xcbe,0x8dc,0xcce,0x94d,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0xcd3,0xcdb,0x49e,0xceb,0xce3,0x5b9,0x5b9,0xcf3,0xcfb,0xd0b,0x49e,0xd10,0xd18,0xd1e,0x46e,0xd03, +0xd26,0xd2e,0x5b9,0xd36,0xd46,0xd49,0xd3e,0xd51,0x60e,0xd59,0xd60,0xd68,0x656,0xd78,0xd70,0xd80, +0x5b9,0xd88,0xd90,0xd98,0x5b9,0xda0,0xda8,0xdb0,0xdb8,0xdc0,0xdc4,0xdcc,0x4ee,0x4ee,0x5b9,0xdd4, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xddc,0xde3,0x89e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0x5b9,0x5b9,0x5b9,0xdfb,0x5b9,0xcb9,0xe02,0xe07, +0x5b9,0x5b9,0x5b9,0xe0f,0x5b9,0x5b9,0x8a9,0x46e,0xe25,0xe15,0xe1d,0x5b9,0x5b9,0xe2d,0xe35,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xe3a,0xe42,0x5b9,0xe46,0x5b9,0xe4c,0xe50, +0xe58,0xe60,0xe67,0xe6f,0x5b9,0x5b9,0x5b9,0xe75,0xe8d,0x45e,0xe95,0xe9d,0xea2,0x8be,0xe7d,0xe85, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0x11b8,0x11b8,0x11f8,0x1238,0x1278,0x12b0,0x12f0,0x1330,0x1368,0x13a8,0x13d4,0x1414,0x1454,0x1464,0x14a4,0x14d8, +0x1518,0x1548,0x1588,0x15c8,0x15d8,0x160c,0x1644,0x1684,0x16c4,0x1704,0x1738,0x1764,0x17a4,0x17dc,0x17f8,0x1838, +0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xbdd,0xa40,0xa40,0xa40,0xa40,0xc1d,0x1db,0x1db, +0xc5d,0xc9d,0xa40,0xa40,0xa40,0xa40,0xcdd,0xcfd,0xa40,0xa40,0xd3d,0xd7d,0xdbd,0xdfd,0xe3d,0xe7d, +0xebd,0xef4,0x1db,0x1db,0xf18,0xf4c,0x1db,0xf74,0x1db,0x1db,0x1db,0x1db,0xfa1,0x1db,0x1db,0x1db, +0x1db,0x1db,0x1db,0x1db,0xfb5,0x1db,0xfed,0x102d,0x1db,0x1038,0xa40,0xa40,0xa40,0xa40,0xa40,0x1078, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, @@ -170,112 +172,124 @@ static const uint16_t propsTrie_index[19820]={ 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xff8,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0x10b8,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1038, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x10f8, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1038, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xe66,0xe6d,0xe75,0x43e,0x589,0x589,0x589,0x575,0xe85,0xe7d,0xe9c,0xe8d,0xe94,0xea4,0xb20,0xeac, -0x43e,0x43e,0x43e,0x43e,0xd1e,0x589,0xeb4,0xebc,0x589,0xec4,0xecc,0xed0,0xed8,0x589,0xee0,0x43e, -0x516,0x520,0xee8,0x589,0xeec,0xef4,0x43e,0x43e,0x589,0x865,0x589,0xefc,0x43e,0x43e,0x43e,0x43e, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xb04,0x869,0xe08,0x43e,0x43e,0x43e,0x43e, -0xf0c,0xf04,0xf0f,0xf17,0x87d,0xf1f,0x43e,0xf27,0xf2f,0xf37,0x43e,0x43e,0x589,0xf47,0xf4f,0xf3f, -0xf5f,0xf66,0xf57,0xf6e,0xf76,0x43e,0xf86,0xf7e,0x589,0xf89,0xf91,0xf99,0xfa1,0xfa9,0x43e,0x43e, -0x589,0x589,0xfb1,0x43e,0x516,0xfb9,0x4be,0xfc1,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0xfc9,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xfd9,0x5bf,0xfe1,0xfd1,0x8ee,0xfe9,0xff1,0xff7,0x100f,0xfff,0x1007,0x1013,0x8ee,0x1023,0x101b,0x102b, -0x103b,0x1033,0x43e,0x43e,0x1042,0x104a,0x5e1,0x1052,0x1062,0x67a,0x106a,0x105a,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x589,0x1072,0x107a,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x1082,0x108a,0x43e, -0x589,0x1092,0x109a,0x43e,0x589,0x10a2,0xef4,0x43e,0x10b2,0x10aa,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x516,0x4be,0x10ba,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x589,0x10c2,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xdc9,0x43e,0x43e,0x43e,0x10d2,0x10da,0x10e2,0x10ca,0x589, -0x589,0x589,0x589,0x589,0x589,0x10ea,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10f2,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10f4, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10c2,0x87d, -0x10fc,0x43e,0x43e,0xdfe,0x1104,0x589,0x1114,0x111c,0x1124,0x110c,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x112c,0x1131,0x1139,0x43e,0x43e,0x43e,0x1141,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x1149,0x114e,0x1156,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0xb33,0x89b,0x115e,0x89b,0x1165,0x116d,0x1173,0x89b,0x1179,0x89b,0x89b,0x1181, -0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0xa34,0x1189,0x43e,0x43e,0x43e,0x43e,0x1199,0x11a0,0x11a5, -0x11ab,0x11b3,0x11bb,0x11c3,0x119d,0x11cb,0x11d3,0x11db,0x11e0,0x11b2,0x1199,0x11a0,0x119c,0x11ab,0x11e8,0x119a, -0x11eb,0x119d,0x11f3,0x11fb,0x1203,0x120a,0x11f6,0x11fe,0x1206,0x120d,0x11f9,0x1215,0x1191,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x4e5,0x1225,0x4e5, -0x122c,0x1233,0x121d,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x123b,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x1249,0x1251,0x1259, -0x1261,0x1269,0x1271,0x43e,0x1241,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x1279,0x89b, -0x89b,0xb2b,0x127e,0x1282,0xb33,0x128a,0x128f,0x89b,0x1279,0x1293,0x43e,0x43e,0x129a,0x12a2,0x1293,0x12a8, -0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x12b0,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xb24,0x89b,0x12b8,0x89b,0x89b,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x1177,0x12bd,0x89b,0x89b,0x89b,0xb2b,0x89b,0x89b,0x12c5,0x43e,0x1279,0x89b,0x12cd, -0x89b,0x12d5,0xb35,0x43e,0x43e,0x12dd,0x43e,0x43e,0x43e,0x12e2,0x43e,0xea4,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x12ea,0x589,0x589, -0x12f1,0x589,0x589,0x589,0x12f9,0x589,0x1301,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc15,0x589,0x589, -0x1309,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1311,0x1319,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc54,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1320,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1327,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x132e,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xb04,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x60e,0x589,0x589,0x589,0x589,0x589,0x589,0xeec,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1141,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x1332,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xeec,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x1342,0x133a,0x133a,0x133a,0x43e,0x43e,0x43e,0x43e, -0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x134a,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0x1352,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x10f8, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0xeaa,0xeb1,0xeb9,0x46e,0x5b9,0x5b9,0x5b9,0x5a5,0xec9,0xec1,0xee0,0xed1,0xed8,0xee8,0xb6a,0xef0, +0x46e,0x46e,0x46e,0x46e,0xd68,0x5b9,0xef8,0xf00,0x5b9,0xf08,0xf10,0xf14,0xf1c,0x5b9,0xf24,0x46e, +0x546,0x550,0xf2c,0x5b9,0xf30,0xf38,0xf48,0xf40,0x5b9,0xf50,0x5b9,0xf57,0x46e,0x46e,0x46e,0x46e, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xb4e,0x8aa,0xe4c,0x46e,0x46e,0x46e,0x46e, +0xf67,0xf5f,0xf6a,0xf72,0x8be,0xf7a,0x46e,0xf82,0xf8a,0xf92,0x46e,0x46e,0x5b9,0xfa2,0xfaa,0xf9a, +0xfba,0xfc1,0xfb2,0xfc9,0xfd1,0x46e,0xfe1,0xfd9,0x5b9,0xfe4,0xfec,0xff4,0xffc,0x1004,0x46e,0x46e, +0x5b9,0x5b9,0x100c,0x46e,0x546,0x1014,0x4ee,0x101c,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x1024,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x1034,0x5ef,0x103c,0x102c,0x92f,0x1044,0x104c,0x1052,0x106a,0x105a,0x1062,0x106e,0x92f,0x107e,0x1076,0x1086, +0x1096,0x108e,0x46e,0x46e,0x109d,0x10a5,0x611,0x10ad,0x10bd,0x6b2,0x10c5,0x10b5,0x46e,0x46e,0x46e,0x46e, +0x5b9,0x10cd,0x10d5,0x46e,0x5b9,0x10dd,0x10e5,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x10ed,0x10f5,0x46e, +0x5b9,0x10fd,0x1105,0x110d,0x5b9,0x111d,0x1115,0x46e,0x112d,0x1125,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x546,0x4ee,0x1135,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x5b9,0x113d,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1153,0x1158,0x1145,0x114d,0x1168, +0x1160,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8a9,0x46e,0x46e,0x46e,0x1178,0x1180,0x1188,0x1170,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1190,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1198,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x119a, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x113d,0x8be, +0x11a2,0x46e,0x46e,0xe42,0x11aa,0x5b9,0x11ba,0x11c2,0x11ca,0x11b2,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x11d2,0x11d7,0x11df,0x46e,0x46e,0x11e7,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x11ef,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x11f7,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x11ff,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x1207,0x120c,0x1214,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0xb7d,0x8dc,0x121c,0x8dc,0x1223,0x122b,0x1231,0x8dc,0x1237,0x8dc,0x8dc,0x123f, +0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0xa7e,0x1247,0x46e,0x46e,0x46e,0x46e,0x1257,0x125e,0x1263, +0x1269,0x1271,0x1279,0x1281,0x125b,0x1289,0x1291,0x1299,0x129e,0x1270,0x1257,0x125e,0x125a,0x1269,0x12a6,0x1258, +0x12a9,0x125b,0x12b1,0x12b9,0x12c1,0x12c8,0x12b4,0x12bc,0x12c4,0x12cb,0x12b7,0x12d3,0x124f,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x515,0x12e3,0x515, +0x12ea,0x12f1,0x12db,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x12f8,0x1300,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x1308,0x46e,0x546,0x1318,0x1310,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1328,0x1330,0x1338, +0x1340,0x1348,0x1350,0x46e,0x1320,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x1358,0x8dc, +0x8dc,0xb75,0x135d,0x1361,0xb7d,0x1369,0x136e,0x8dc,0x1358,0x8dc,0x1236,0x46e,0x1376,0x137e,0x1382,0x138a, +0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x1392,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0xa7f,0x139a,0x8dc,0x8dc,0x8dc,0xb75,0x8dc,0x8dc,0x13a2,0x46e,0x1358,0x8dc,0x13aa, +0x8dc,0x13b2,0xb7f,0x46e,0x46e,0x13ba,0x13c2,0x13ca,0x46e,0xb7e,0x46e,0xee8,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x13d2,0x5b9,0x5b9, +0x13d9,0x5b9,0x5b9,0x5b9,0x13e1,0x5b9,0x13e9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc5f,0x5b9,0x5b9, +0x13f1,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x13f9,0x1401,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xc9e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1408,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x140f,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x1416,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xb4e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x141a,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xf30,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x11ff,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x1422,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xf30,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1432,0x142a,0x142a,0x142a,0x46e,0x46e,0x46e,0x46e, +0x515,0x515,0x515,0x515,0x515,0x515,0x515,0x143a,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0x1442,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17, 0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, @@ -397,11 +411,13 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, 6,6,4,6,6,6,6,6,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,6,6,6,0,0,0x17,0,0,0,0,6,6,6,6,6, +5,6,6,6,0,0,0x17,0,6,6,0x10,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0,0,0,0,5,5,6,6,0x17,0x17,0x49,0x89, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, +6,6,6,6,6,6,6,6,5,5,6,6,0x17,0x17,0x49,0x89, 0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,6,6,6,8,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -455,448 +471,451 @@ static const uint16_t propsTrie_index[19820]={ 6,0,6,6,6,6,0,0,0,0,0,0,0,6,6,0, 5,5,5,0,0,0,0,0,5,5,6,6,0,0,0x49,0x89, 0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,6,8,8,0,5,5,5, +0,0,0,0,0,0,0,0,5,6,8,8,0,5,5,5, 5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, 5,5,5,5,0,5,5,5,5,5,0,0,6,5,8,6, 8,8,8,8,8,0,6,8,8,0,8,8,6,6,0,0, 0,0,0,0,0,8,8,0,0,0,0,0,0,0,5,0, 5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0,0,0,0x1b,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,5,8,8,8,6,6,6, -6,0,8,8,8,0,8,8,8,6,5,0,0,0,0,0, -0,0,0,8,0,0,0,0,0,0,0,5,0,0,0,0, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,8,8, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, -5,5,5,5,0,5,0,0,5,5,5,5,5,5,5,0, -0,0,6,0,0,0,0,8,8,8,6,6,6,0,6,0, -8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6, -6,6,6,0,0,0,0,0x19,5,5,5,5,5,5,4,6, -6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,0,5,0,0,5, -5,0,5,0,0,5,0,0,0,0,0,0,5,5,5,5, -0,5,5,5,5,5,5,5,0,5,5,5,0,5,0,5, -0,0,5,5,0,5,5,5,5,6,5,5,6,6,6,6, -6,6,0,6,6,5,0,0,5,5,5,5,5,0,4,0, -6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b, -6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6, -0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,5,5,5,5, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,0,0,0,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,8,6,6,6,6, -6,0x17,6,6,5,5,5,5,5,6,6,6,6,6,6,6, -6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6, +0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,5,5,5,5, +0,6,8,8,0,5,5,5,5,5,5,5,5,0,5,5, +5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,5,8,8,8,6,6,6,6,0,8,8,8,0,8,8, +8,6,5,0x1b,0,0,0,0,5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b, +0x364b,0xc94b,0x350b,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0,0,8,8,0x17,0,0,0,0,0,0,0, +0,0,0,0,0,0,8,8,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0, +5,5,5,5,5,5,5,0,0,0,6,0,0,0,0,8, +8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,6,5,5,6,6,6,6,6,6,6,0,0,0,0,0x19, +5,5,5,5,5,5,4,6,6,6,6,6,6,6,6,0x17, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0, +0,5,5,0,5,0,0,5,5,0,5,0,0,5,0,0, +0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, +0,5,5,5,0,5,0,5,0,0,5,5,0,5,5,5, +5,6,5,5,6,6,6,6,6,6,0,6,6,5,0,0, +5,5,5,5,5,0,4,0,6,6,6,6,6,6,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5, +5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b, +0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,8,6,6,6,6,6,0x17,6,6,5,5,5,5, +5,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b, -0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,8,8,6,6,6,6,8,6,6,6,6,6,6, -8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8, -6,6,5,5,5,5,6,6,6,5,8,8,8,5,5,8, -8,8,8,8,8,8,5,5,5,6,6,6,6,5,5,5, -5,5,5,5,5,5,5,5,5,5,6,8,8,6,6,8, -8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,8,8,8,6,0x1b,0x1b,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x17,4,5,5,5,1,1,1,1,1,1,0,1, -0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,6,6,6,6,6,6,6,6,6,6,6,6,0,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b, +0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,6, +6,8,6,6,6,6,6,6,8,6,6,8,8,6,6,5, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17, +5,5,5,5,5,5,8,8,6,6,5,5,5,5,6,6, +6,5,8,8,8,5,5,8,8,8,8,8,8,8,5,5, +5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5, +5,5,6,8,8,6,6,8,8,8,8,8,8,6,5,8, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0x17,4,5,5,5, +1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0, 5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, -0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,0,0,0x13,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x17,0x17,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0xc,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6, -6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,8,6,6,6,6,6,6,6,8,8,8,8,8,8, -8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6, -0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,6,5,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17, -0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,4, +5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,6, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b, +0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0,0,2,2,2,2,2,2,0,0, +0x13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0xc,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x14, +0x15,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0x17, +0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5,5,5,5,5,5,0,0,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, -0,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8, -0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6, -0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,5,5,5,5,5,0,0,0,0,0,0,0, +5,0,5,5,5,5,6,6,6,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,6,6,6,0x17,0x17,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,6,6,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,0,6,6,0,0,0,0,0,0,0,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,8,6,6,6,6,6, +6,6,8,8,8,8,8,8,8,8,6,8,8,6,6,6, +6,6,6,6,6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19, +5,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,6,5,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6, +6,6,0x10,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,5,4,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0,0,0,0,5,5,5,5, +5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,0,0,0,0,0,0,6,6,6,8,8,8,8,6, +6,8,8,8,0,0,0,0,8,8,6,8,8,8,8,8, +8,6,6,6,0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,6,6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,7,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,8,6,8,6,6,6,6,6,6,6,0,6,8,6,8, -8,6,6,6,6,6,6,6,6,8,8,8,8,8,8,6, -6,6,6,6,6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6, -8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,6,8,6,6, -6,6,6,8,6,8,8,8,8,8,6,8,8,5,5,5, -5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8, -6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,5,5,5,5,5,5,6,6,8,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,6,8,6,6,8,8, -8,6,8,6,6,6,8,8,0,0,0,0,0,0,0,0, -0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, -5,5,5,5,8,8,8,8,8,8,8,8,6,6,6,6, -6,6,6,6,8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,4,4,4,4,4,4,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -6,6,6,0x17,6,6,6,6,6,6,6,6,6,6,6,6, -6,8,6,6,6,6,6,6,6,5,5,5,5,6,5,5, -5,5,8,8,6,5,5,0,6,6,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,6,6,8,8,6,0,0,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,8,6,8,6,6,6,6,6,6,6,0, +6,8,6,8,8,6,6,6,6,6,6,6,6,8,8,8, +8,8,8,6,6,6,6,6,6,6,6,6,6,0,0,6, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6, +6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +6,6,6,6,8,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,8,6,6,6,6,6,8,6,8,8,8,8,8,6,8, +8,5,5,5,5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6, +6,6,8,8,6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,6,6,8,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8, +6,6,8,8,8,6,8,6,6,6,8,8,0,0,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,5,5,5,5,5,5,8,8,8,8,8,8,8,8, +6,6,6,6,6,6,6,6,8,8,6,6,0,0,0,0x17, +0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4, +4,4,0x17,0x17,2,2,2,2,2,2,2,2,2,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0, +0,0,0,0,6,6,6,0x17,6,6,6,6,6,6,6,6, +6,6,6,6,6,8,6,6,6,6,6,6,6,5,5,5, +5,6,5,5,5,5,8,8,6,5,5,0,6,6,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2, -2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,0,0,0,0,0,0,6,6,6,6, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,2,2,2,2,2,2,2,2,1,2, -2,2,2,2,2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a, -0,0,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,2,2,0,1,0,1,0,1,0,1, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0, -2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, -2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, -2,2,2,2,2,0,2,2,1,1,1,1,3,0x1a,2,0x1a, -0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a, -2,2,2,2,0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a, -0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc, -0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4, -0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10, -0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16, -0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0, -4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2, +4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4, +4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,6, +6,6,6,6,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,2,2,2,2,2,2, +2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,1,1,1,1, +3,0x1a,0x1a,0,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, +1,1,0,0,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, +1,1,0,0,2,2,2,2,2,2,2,2,0,1,0,1, +0,1,0,1,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,0,0,2,2,2,2,2,2,2,2,3,3,3,3, +3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3, +3,3,3,3,2,2,2,2,2,0,2,2,1,1,1,1, +3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,1,1,1,1, +3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,1,1,1,1, +0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18, +0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10, +0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c, +0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10, +0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17, +0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18, +0x18,0x14,0x15,0,4,4,4,4,4,4,4,4,4,4,4,4, +4,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, -0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7, -7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6, -6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2, -1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1, -0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b, -0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b, -0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2, -1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b, -0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, -0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, -0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0, -0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x19,0x19,0x19,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, +6,7,7,7,7,6,7,7,7,6,6,6,6,6,6,6, +6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1, +1,1,0x1b,2,1,1,1,1,2,5,5,5,5,2,0x1b,0x1b, +2,2,1,1,0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18, +0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb, +0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1, +1,1,2,2,1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1, +1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a, +0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a, +0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b, +0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18, -0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18, -0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, +0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b, -0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb, -0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b, -0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b, -0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b, +0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb, +0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15, -0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b, -0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b, -0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, -0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, +0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, +0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14, +0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18, -0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, +0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1, -2,1,2,1,2,1,1,1,1,2,1,2,2,1,2,2, -2,2,2,2,4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,1,2,1,2,6,6,6,1,2,0,0,0,0, -0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2, -0,0,0,0,0,2,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,4, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,2,1,1,1,2,2,1,2,1,2,1,2,1,1,1, +1,2,1,2,2,1,2,2,2,2,2,2,4,4,1,1, +1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,1,2,1,2,6, +6,6,1,2,0,0,0,0,0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17, +2,2,2,2,2,2,0,2,0,0,0,0,0,2,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,0,0,0,4,0x17,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,5,5,5,5,5,5,5,0, 5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, -0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17, -0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17, -0x13,0x17,0x14,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17, +0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13, +0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15, +0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,0x17,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6, -6,6,8,8,0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4, -5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15, -0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, -0x13,0x14,0x15,0x15,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a, -0x1a,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17, -4,4,4,5,0,0,0,0,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb, -0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x58a,0x5ca,0x60a, +0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,6,6,8,8,0x13,4,4,4, +4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17, +0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0x14,0x15,0x15,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,6,6,0x1a,0x1a,4,4,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x17,4,4,4,5,0,0,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, -0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b, -0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b,0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb,0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb, -5,5,5,5,5,0x685,5,5,5,5,5,5,5,5,5,5, +0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b, +0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb, +0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,5,0x685,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x705,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0x585,5,5,0x705, -5,5,5,0x7885,5,0x605,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x785,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x5c5,5,5,5,5,5,5,5,0x685,5,0x645,5, +5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,5,0x605,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7985, -0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7845, -5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5, +5,5,5,5,0x685,5,0x645,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x1e45,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x7985,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x7a85,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,0x745, -5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x7c5,5,0x7845,0xa45,0xcc5,5,5,5,5,5,5, -0xf45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x605,0x605,0x605,0x605,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,5,5, +0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x7985,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5, -5,0x585,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x585,5, +5,5,5,5,5,5,5,5,5,5,0x7a85,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,0xa45, -5,5,5,5,5,5,5,5,5,5,5,5,0x585,0x5c5,0x605,5, -0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,0x7845, +0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,0x605,0x605, +0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x645, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0x745,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0x705,5,5,5,5,5,5,5,5,5, +5,0x585,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x785,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0x585,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x1e45,5,5,5,5,5,5,5,0x645,5,5,5,5,5, +5,5,5,5,5,5,0x785,0xa45,5,5,5,5,5,5,5,5, +5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x7885,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,0x5c5, +5,5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x745,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x705,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x7845,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x785,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x6c5,5,5,5,5,5,0x1e45,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,5,5, +5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x7885,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x545,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5, +0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -4,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, +5,5,5,5,5,5,0x545,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5, +5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,4,4,6,6,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,5,6,7,7,7,0x17, +6,6,6,6,6,6,6,6,6,6,0x17,4,5,5,5,5, +5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17, +0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2, +0,0,0,5,4,4,2,5,5,5,5,5,0x1a,0x1a,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,2,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -4,4,6,6,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,5,6,7,7,7,0x17,6,6,6,6,6,6,6,6, -6,6,0x17,4,5,5,5,5,5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca, -0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0, -0,0,0,0,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4, -4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,5,4,4,2,5, -5,5,5,5,0x1a,0x1a,1,2,1,2,1,2,1,2,1,2, +4,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2, +1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,2,1,2,5, 1,2,1,2,2,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,4,2,2,2,2,2,2,2, -2,1,2,1,2,1,1,2,1,2,1,2,1,2,1,2, -4,0x1a,0x1a,1,2,1,2,5,1,2,1,2,2,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,1,1,1,0,0, -1,1,1,1,1,2,1,2,0,0,0,0,0,0,0,0, -5,5,6,5,5,5,6,5,5,5,5,6,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -8,8,8,8,6,0,0,0,0,0,0,0,0,0,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -8,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -8,8,8,8,8,8,8,8,8,8,8,8,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5, -5,5,5,5,0x17,0x17,0x17,5,0x17,5,0,0,5,5,5,5, -5,5,6,6,6,6,6,6,6,6,0x17,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, -6,6,6,6,6,6,6,6,6,6,8,8,0,0,0,0, -0,0,0,0,0,0,0,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,8,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0,4,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,6,8,8,6,6, -6,6,8,8,6,8,8,8,5,5,5,5,5,6,4,5, -5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,5,5,5,5,5,0,5,5,5,5,5,5,5,5, -5,6,6,6,6,6,6,8,8,6,6,8,8,6,6,0, -0,0,0,0,0,0,0,0,5,5,5,6,5,5,5,5, -5,5,5,5,6,8,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,0x1b, -0x1b,0x1b,5,8,6,8,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,6,5,6,6,6,5,5,6, -6,5,5,5,5,5,6,6,5,6,5,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,5,5,4,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,8,6,6,8,8,0x17,0x17,5,4,4,8,6,0, -0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0, +1,2,1,1,1,1,1,0,1,1,1,1,1,2,1,2, +0,0,0,0,0,0,0,0,5,5,6,5,5,5,6,5, +5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,8, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b, +0x19,0x1b,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,8,8,8,8,6,6,0,0, +0,0,0,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,8,8,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8, +8,8,8,8,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,5,5,5,5,5,5,0x17,0x17,0x17,5, +0x17,5,0,0,5,5,5,5,5,5,6,6,6,6,6,6, +6,6,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6, +6,6,8,8,0,0,0,0,0,0,0,0,0,0,0,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,6,8,8,6,6,6,6,8,8,6,8,8,8, +5,5,5,5,5,6,4,5,5,5,5,5,5,5,5,5, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,0, +5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,8, +8,6,6,8,8,6,6,0,0,0,0,0,0,0,0,0, +5,5,5,6,5,5,5,5,5,5,5,5,6,8,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0x17,0x17,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +4,5,5,5,5,5,5,0x1b,0x1b,0x1b,5,8,6,8,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,5,6,6,6,5,5,6,6,5,5,5,5,5,6,6, +5,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,5,5,4,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,8,6,6,8,8, +0x17,0x17,5,4,4,8,6,0,0,0,0,0,0,0,0,0, 0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0, -5,5,5,5,5,5,5,0,2,2,2,2,2,2,2,2, +0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,0x1a,4,4,4,4,2,2,2,2,2,2,0,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,5,5,5,8,8,6,8,8, -6,8,8,0x17,8,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5, +2,2,2,2,2,2,2,2,2,2,2,0x1a,4,4,4,4, +2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +5,5,5,8,8,6,8,8,6,8,8,0x17,8,6,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, -0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5,5,5,5,0x605, -5,5,5,5,5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,0x18,5,5, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5, +5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,0x7c5, +5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x18,5,5, 5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, 5,0,5,0,5,5,0,5,5,0,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -945,7 +964,7 @@ static const uint16_t propsTrie_index[19820]={ 0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b, 0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a, 0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a, 0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a, @@ -970,259 +989,300 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, 0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0x17, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,5,5,0,0,0,5,0,0,5, -5,5,5,5,5,5,0,0,5,0,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0, -0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x17,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5, +5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5, +5,5,0,0,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17, +0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1b, +0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0,0,0,0,0x58b, +0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,0, +0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x7cb, +0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b, +0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b, +0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, +0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b, +0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b, +0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,5,6,6,6,0,6,6,0, +0,0,0,0,6,6,6,6,5,5,5,5,0,5,5,5, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,6,6,6,0, +0,0,0,6,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b, -0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb, -0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5, +5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b, -0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b, -0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb, -0x7cb,0xa4b,0x1e4b,0x784b,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,5,6,6,6, -0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5, -0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -6,6,6,0,0,0,0,6,5,5,5,5,5,5,5,5, +5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0,0,0,0,0x58b, +0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,0x1b,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0, -0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -0x1b,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b, -0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, -0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0,0,0x17,0x17,0x17, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b, -0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0,0,0,0,0,0,0,0x58b,0x68b, -0x7cb,0x11cb,0x1e4b,0x784b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b, -0x34cb,0x348b,0x388b,0,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,6,8,6,8,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb, -0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,8,8,8,6,6,6,6,8,8,6,6,0x17, -0x17,0x10,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5, -5,5,5,6,6,6,6,6,8,6,6,6,6,6,6,6, -6,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5, +5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, -0x17,0x17,5,0,0,0,0,0,0,0,0,0,8,5,5,5, -5,0x17,0x17,0x17,0x17,0x17,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, -8,8,6,6,6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b, -0x784b,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,8,8, -6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -5,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,0x17,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,8,8,0,0,6,6, -6,6,6,6,6,0,0,0,6,6,6,6,6,0,0,0, -0,0,0,0,0,0,0,0,6,6,8,8,0,5,5,5, -5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5, -5,5,5,5,5,5,5,5,6,8,8,8,8,0,0,8, -8,0,0,8,8,8,0,0,5,0,0,0,0,0,0,8, -0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,8,6,8,8,8,8,6,6,8,6,6,5,5,0x17,5, -0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,8,8,8,6,6,6,6,0,0, -8,8,8,8,6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -5,5,5,5,6,6,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,5,0,0,0, -0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,6,8,6,8,8,6,6,6,6,6,6,8,6, -0,0,0,0,0,0,0,0,8,8,6,6,6,6,8,6, -6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,0,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0, -0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a, -0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0, -0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a, -0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a, -0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a, -0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a, -0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a, -0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a, -0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5,0,0,0,0, +5,5,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0, +0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,0,0,0,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b, +0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb, +0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0, +0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +8,6,8,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0, +0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +8,8,8,6,6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17, +0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,6, +6,6,6,6,8,6,6,6,6,6,6,6,6,0,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,6,0x17,0x17,5,0, +0,0,0,0,0,0,0,0,8,5,5,5,5,0x17,0x17,0x17, +0x17,0x17,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6, +6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b, +0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,8,8,6,8,6,6, +0x17,0x17,0x17,0x17,0x17,0x17,6,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,0,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,5,0x17,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,8,8,0,0,6,6,6,6,6,6, +6,0,0,0,6,6,6,6,6,0,0,0,0,0,0,0, +0,0,0,0,6,6,8,8,0,5,5,5,5,5,5,5, +5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,6,8,8,8,8,0,0,8,8,0,0,8, +8,8,0,0,5,0,0,0,0,0,0,8,0,0,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,8,8,8,6,6,6,6, +6,6,6,6,8,8,6,6,6,8,6,5,5,5,5,0x17, +0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17, +0,0x17,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,8,6,8, +8,8,8,6,6,8,6,6,5,5,0x17,5,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,8,8,8,6,6,6,6,0,0,8,8,8,8, +6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5, +6,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,8, +8,6,8,6,6,0x17,0x17,0x17,5,0,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,6, +8,6,8,8,6,6,6,6,6,6,8,6,0,0,0,0, +0,0,0,0,8,8,6,6,6,6,8,6,6,6,6,6, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, +0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -6,6,6,6,6,0x17,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0, +0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,5,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb, +0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb, +0x1e4b,0,0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, +6,6,6,6,6,6,6,0,6,6,6,6,6,6,8,6, +6,6,6,6,6,6,6,6,0,8,6,6,6,6,6,6, +6,8,6,6,8,6,6,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0, +0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a, +0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca, +0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a, +0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a, +0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a, +0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,6,6,6,6,6,0x17,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,0x17, +0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4,0x17,0x1b,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b, -4,4,4,4,0x17,0x1b,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b, -0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, +0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,6,6,6,6,4,4,4,4,4,4,4,4,4, -4,4,4,4,5,5,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0, +8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b, -0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6, -6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0,0,0x1b,6,6,0x17, +0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,8,8,6,6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b, +0x1b,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6, +6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,6,6, +6,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, +0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +2,0,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1, +1,0,1,1,1,1,1,1,1,1,2,2,2,2,0,2, +0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,2,2,2,2,2,2,2,0,2,2,2,2,2,2, +1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, +1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1, +1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1, +1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,0,1,1,0,0,1,0, -0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1, -1,1,2,2,2,2,0,2,0,2,2,2,2,2,2,2, -0,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1, -1,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,1,1,0,1,1,1,1,0,1,1,1,1, -1,0,1,0,0,0,1,1,1,1,1,1,1,0,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x18, +2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x18, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,0x18, +2,2,2,2,2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,6, +6,6,0,6,6,0,6,6,6,6,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b, +6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0, +2,2,2,2,6,6,6,6,6,6,6,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0x18,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,0x18,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,2,2,2,0x18,2,2,2,2,2,2,1,2, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,6,6,6,6,6,5,5,5,5, -5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6, -6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x18,0x18,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,5,5,0,5,0,0,5,0,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,0,5,0,5, -0,0,0,0,0,0,5,0,0,0,0,5,0,5,0,5, -0,5,5,5,0,5,5,0,5,0,0,5,0,5,0,5, -0,5,0,5,0,5,5,0,5,0,0,5,5,5,5,0, -5,5,5,5,5,5,5,0,5,5,5,5,0,5,5,5, -5,0,5,0,5,5,5,5,5,5,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0,0,0,0,0,5,5,5,0,5,5,5,5,5,0,5, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b, -0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b, +0,5,5,0,5,0,0,5,0,5,5,5,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,0,5,0,0,0,0, +0,0,5,0,0,0,0,5,0,5,0,5,0,5,5,5, +0,5,5,0,5,0,0,5,0,5,0,5,0,5,0,5, +0,5,5,0,5,0,0,5,5,5,5,0,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,5,5,5,0,5,0, +5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0,5,5,5,0,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b, +0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b, +0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,0x705,5,5,5,5,5,5, +0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,5,0x705,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -1241,6 +1301,8 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,5, 5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x785,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, @@ -1255,2141 +1317,2228 @@ static const uint16_t propsTrie_index[19820]={ static const UTrie2 propsTrie={ propsTrie_index, - propsTrie_index+4216, + propsTrie_index+4408, NULL, - 4216, - 15604, + 4408, + 16372, 0xa40, - 0x10f8, + 0x11b8, 0x0, 0x0, 0x110000, - 0x4d68, + 0x5128, NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint16_t propsVectorsTrie_index[27452]={ -0x488,0x490,0x498,0x4a0,0x4b8,0x4c0,0x4c8,0x4d0,0x4d8,0x4e0,0x4e8,0x4f0,0x4f8,0x500,0x508,0x510, -0x517,0x51f,0x527,0x52f,0x532,0x53a,0x542,0x54a,0x552,0x55a,0x562,0x56a,0x572,0x57a,0x582,0x58a, -0x592,0x59a,0x5a1,0x5a9,0x5b1,0x5b9,0x5c1,0x5c9,0x5d1,0x5d9,0x5de,0x5e6,0x5ed,0x5f5,0x5fd,0x605, -0x60d,0x615,0x61d,0x625,0x62c,0x634,0x63c,0x644,0x64c,0x654,0x65c,0x664,0x66c,0x674,0x67c,0x684, -0x180c,0xce8,0xdd3,0x4a8,0x4a8,0xe52,0xe58,0xe60,0x10fc,0x1114,0x1104,0x110c,0x71c,0x722,0x72a,0x732, -0x73a,0x740,0x748,0x750,0x758,0x75e,0x766,0x76e,0x776,0x77c,0x784,0x78c,0x794,0x79c,0x7a4,0x7ab, -0x7b3,0x7b9,0x7c1,0x7c9,0x7d1,0x7d7,0x7df,0x7e7,0x7ef,0x7f5,0x7fd,0x805,0x80d,0x814,0x81c,0x824, -0x82c,0x830,0x838,0x83f,0x847,0x84f,0x857,0x85f,0x141c,0x1424,0x867,0x86f,0x877,0x87f,0x887,0x88e, -0x1482,0x1472,0x147a,0x174f,0x1757,0x1124,0x896,0x111c,0x1366,0x1366,0x1368,0x1138,0x1139,0x112c,0x112e,0x1130, -0x148a,0x148c,0x89e,0x148c,0x8a6,0x8ab,0x8b3,0x1491,0x8b9,0x148c,0x8bf,0x8c7,0xbc1,0x1499,0x1499,0x8cf, -0x14a9,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa, -0x14aa,0x14aa,0x14aa,0x14a1,0x8d7,0x14b2,0x14b2,0x8df,0xad6,0xade,0xae6,0xaee,0x14c2,0x14ba,0x8e7,0x8ef, -0x8f7,0x14ca,0x14d2,0x8ff,0x14ca,0x907,0x1814,0xcf0,0xaf6,0xafe,0xb06,0xb0b,0x16c5,0xbf4,0xbfb,0x162d, -0xb91,0x181c,0xcf8,0xd00,0xd08,0xd10,0xf10,0xf10,0x1715,0x171a,0xc2c,0xc34,0x178b,0x1793,0x18b5,0xddb, -0x179b,0xc7c,0xc84,0x17a3,0x4a8,0x4a8,0xef0,0xd18,0x164d,0x1635,0x1645,0x163d,0x16dd,0x16d5,0x169d,0xba1, -0x1141,0x1141,0x1141,0x1141,0x1144,0x1141,0x1141,0x114c,0x90f,0x1154,0x913,0x91b,0x1154,0x923,0x92b,0x933, -0x1164,0x115c,0x116c,0x93b,0x943,0x94b,0x953,0x95b,0x1174,0x117c,0x1184,0x118c,0x963,0x1194,0x119b,0x11a3, -0x11ab,0x11b3,0x11bb,0x11c3,0x11cb,0x11d2,0x11da,0x11e2,0x11ea,0x11f2,0x11f5,0x11f7,0x14da,0x15c0,0x15c6,0x96b, -0x11ff,0x973,0x97b,0x1319,0x131e,0x1321,0x1329,0x1207,0x1331,0x1331,0x1217,0x120f,0x121f,0x1227,0x122f,0x1237, -0x123f,0x1247,0x124f,0x1257,0x15ce,0x1625,0x175f,0x189d,0x1267,0x126e,0x1276,0x127e,0x125f,0x1286,0x15d6,0x15dd, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x15e5,0x15e8,0x15e5,0x15e5,0x15f0,0x15f7,0x15f9,0x1600, -0x1608,0x160c,0x160c,0x160f,0x160c,0x160c,0x1615,0x160c,0x1655,0x170d,0x1767,0xb13,0xb19,0xb1f,0xb27,0xb2c, -0x16b5,0xbd1,0xbd5,0x1722,0x16a5,0x16a5,0x16a5,0xba9,0x16ad,0xbc9,0x16f5,0xc1c,0xbb1,0xbb9,0xbb9,0x17ab, -0x16e5,0x176f,0xc0b,0xc0c,0x983,0x14ea,0x14ea,0x98b,0x14f2,0x14f2,0x14f2,0x14f2,0x14f2,0x14f2,0x993,0x68c, -0x134e,0x1370,0x99b,0x1378,0x9a3,0x1380,0x1388,0x1390,0x9ab,0x9b0,0x1398,0x139f,0x9b5,0x9bd,0x1705,0xb99, -0x9c5,0x13f6,0x13fd,0x13a7,0x1405,0x140c,0x13af,0x9cd,0x13c8,0x13c8,0x13ca,0x13b7,0x13bf,0x13bf,0x13c0,0x1414, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x10b3,0x165d,0x165d, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d9,0x10bb,0x10c1, -0x1502,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508, -0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508, -0x1508,0x1508,0x1508,0x1508,0x9d5,0x1510,0x9dd,0x1824,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7, -0x17b3,0xc8c,0x17c7,0x17bf,0x17c9,0x182c,0x182c,0xd20,0x16bd,0x172a,0x177f,0x1783,0x1777,0xc3c,0xc42,0xc45, -0x16ed,0xc14,0x1732,0xc4d,0x17d1,0x17d4,0xc94,0xd28,0x17e4,0x17dc,0xc9c,0xd30,0x1834,0x1838,0xd38,0xfb6, -0x17ec,0xca4,0xcac,0x1840,0x1850,0x1848,0xd40,0xeb3,0xde3,0xdeb,0x19e9,0xf6e,0x1a8e,0x1a8e,0x1858,0xd48, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x9e5,0xd50,0xd53, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c, -0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1, -0x13e6,0x13ee,0x161d,0x10c9,0x16fd,0x16fd,0x10cd,0x10d4,0x9ed,0x9f5,0x9fd,0x12a6,0x12ad,0x12b5,0xa05,0x12bd, -0x12ee,0x12ee,0x1296,0x129e,0x12c5,0x12e5,0x12e6,0x12f6,0x12cd,0x128e,0xa0d,0x12d5,0xa15,0x12dd,0xa1d,0xa21, -0xc24,0x12fe,0xa29,0xa31,0x1306,0x130c,0x1311,0xa39,0xa49,0x1356,0x135e,0x1341,0x1346,0xa51,0xa59,0xa41, -0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c, -0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x1434,0x1434,0x1434,0x1434, -0x12a0,0x12a0,0x12e0,0x1320,0x1360,0x13a0,0x13e0,0x1420,0x145c,0x149c,0x14c8,0x1508,0x1548,0x1588,0x15c8,0x1608, -0x1648,0x1684,0x16c4,0x1704,0x1744,0x1778,0x17b4,0x17f4,0x1834,0x1874,0x18b0,0x18f0,0x1930,0x1970,0x19b0,0x19f0, -0xa80,0xac0,0xb00,0xe48,0xb40,0xa40,0xb80,0xa40,0xe68,0xa40,0xa40,0xa40,0xa40,0xbc0,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xdcd,0xbfd,0xa40,0xa40,0xc3d,0xc7d,0xa40,0xe0d,0xd8d,0xcbd, -0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e, -0x115e,0x115e,0x115e,0x115e,0xea8,0x119e,0xfde,0x101e,0x11de,0xee8,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf5e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf9e, +static const uint16_t propsVectorsTrie_index[28540]={ +0x4bb,0x4c3,0x4cb,0x4d3,0x4eb,0x4f3,0x4fb,0x503,0x50b,0x513,0x51b,0x523,0x52b,0x533,0x53b,0x543, +0x54a,0x552,0x55a,0x562,0x565,0x56d,0x575,0x57d,0x585,0x58d,0x595,0x59d,0x5a5,0x5ad,0x5b5,0x5bd, +0x5c5,0x5cd,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc,0x604,0x60c,0x611,0x619,0x620,0x628,0x630,0x638, +0x640,0x648,0x650,0x658,0x65f,0x667,0x66f,0x677,0x67f,0x687,0x68f,0x697,0x69f,0x6a7,0x6af,0x6b7, +0x18ce,0xd31,0xe19,0x4db,0x4db,0xe89,0xe91,0x1a56,0x11bd,0x11d5,0x11c5,0x11cd,0x75c,0x762,0x76a,0x772, +0x77a,0x780,0x788,0x790,0x798,0x79e,0x7a6,0x7ae,0x7b6,0x7bc,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x7eb, +0x7f3,0x7f9,0x801,0x809,0x811,0x817,0x81f,0x827,0x82f,0x835,0x83d,0x845,0x84d,0x854,0x85c,0x864, +0x86c,0x870,0x878,0x87f,0x887,0x88f,0x897,0x89f,0x14dd,0x14e5,0x8a7,0x8af,0x8b7,0x8bf,0x8c7,0x8ce, +0x1543,0x1533,0x153b,0x1811,0x1819,0x11e5,0x8d6,0x11dd,0x1427,0x1427,0x1429,0x11f9,0x11fa,0x11ed,0x11ef,0x11f1, +0x154b,0x154d,0x8de,0x154d,0x8e6,0x8eb,0x8f3,0x1552,0x8f9,0x154d,0x8ff,0x907,0xc09,0x155a,0x155a,0x90f, +0x156a,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b, +0x156b,0x156b,0x156b,0x1562,0x917,0x1573,0x1573,0x91f,0xb16,0xb1e,0xb26,0xb2e,0x1583,0x157b,0x927,0x92f, +0x937,0x158d,0x1595,0x93f,0x158b,0x947,0x18d6,0xd39,0xb36,0xb3e,0xb46,0xb4b,0x1787,0xc3c,0xc43,0x16ef, +0xbd9,0x18de,0xd41,0xd49,0xd51,0xd59,0xf41,0xf41,0x17d7,0x17dc,0xc75,0xc7d,0x184d,0x1855,0x197f,0xe21, +0x185d,0xcc5,0xccd,0x1865,0x6bf,0x4db,0xf21,0xd61,0x170f,0x16f7,0x1707,0x16ff,0x179f,0x1797,0x175f,0xbe9, +0x1202,0x1202,0x1202,0x1202,0x1205,0x1202,0x1202,0x120d,0x94f,0x1215,0x953,0x95b,0x1215,0x963,0x96b,0x973, +0x1225,0x121d,0x122d,0x97b,0x983,0x98b,0x993,0x99b,0x1235,0x123d,0x1245,0x124d,0x9a3,0x1255,0x125c,0x1264, +0x126c,0x1274,0x127c,0x1284,0x128c,0x1293,0x129b,0x12a3,0x12ab,0x12b3,0x12b6,0x12b8,0x159d,0x1682,0x1688,0x9ab, +0x12c0,0x9b3,0x9bb,0x13da,0x13df,0x13e2,0x13ea,0x12c8,0x13f2,0x13f2,0x12d8,0x12d0,0x12e0,0x12e8,0x12f0,0x12f8, +0x1300,0x1308,0x1310,0x1318,0x1690,0x16e7,0x1821,0x195f,0x1328,0x132f,0x1337,0x133f,0x1320,0x1347,0x1698,0x169f, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x16a7,0x16aa,0x16a7,0x16a7,0x16b2,0x16b9,0x16bb,0x16c2, +0x16ca,0x16ce,0x16ce,0x16d1,0x16ce,0x16ce,0x16d7,0x16ce,0x1717,0x17cf,0x1829,0xb53,0xb59,0xb5f,0xb67,0xb6c, +0x1777,0xc19,0xc1d,0x17e4,0x1767,0x1767,0x1767,0xbf1,0x176f,0xc11,0x17b7,0xc65,0xbf9,0xc01,0xc01,0x186d, +0x17a7,0x1831,0xc53,0xc55,0x9c3,0x15ad,0x15ad,0x9cb,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x9d3,0x6c3, +0x140f,0x1431,0x9db,0x1439,0x9e3,0x1441,0x1449,0x1451,0x9eb,0x9f0,0x1459,0x1460,0x9f5,0x9fd,0x17c7,0xbe1, +0xa05,0x14b7,0x14be,0x1468,0x14c6,0x14cd,0x1470,0xa0d,0x1489,0x1489,0x148b,0x1478,0x1480,0x1480,0x1481,0x14d5, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x1174,0x171f,0x171f, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x149a,0x117c,0x1182, +0x15c5,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, +0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, +0x15cb,0x15cb,0x15cb,0x15cb,0xa15,0x15d3,0xa1d,0x18e6,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879, +0x1875,0xcd5,0x1889,0x1881,0x188b,0x18ee,0x18ee,0xd69,0x177f,0x17ec,0x1841,0x1845,0x1839,0xc85,0xc8b,0xc8e, +0x17af,0xc5d,0x17f4,0xc96,0x1893,0x1896,0xcdd,0xd71,0x18a6,0x189e,0xce5,0xd79,0x18f6,0x18fa,0xd81,0xfe7, +0x18ae,0xced,0xcf5,0x1902,0x1912,0x190a,0xd89,0xee4,0xe29,0xe31,0x1ac9,0xf9f,0x1b6e,0x1b6e,0x191a,0xd91, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0xa25,0xd99,0xd9c, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2, +0x14a7,0x14af,0x16df,0x118a,0x17bf,0x17bf,0x118e,0x1195,0xa2d,0xa35,0xa3d,0x1367,0x136e,0x1376,0xa45,0x137e, +0x13af,0x13af,0x1357,0x135f,0x1386,0x13a6,0x13a7,0x13b7,0x138e,0x134f,0xa4d,0x1396,0xa55,0x139e,0xa5d,0xa61, +0xc6d,0x13bf,0xa69,0xa71,0x13c7,0x13cd,0x13d2,0xa79,0xa89,0x1417,0x141f,0x1402,0x1407,0xa91,0xa99,0xa81, +0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed, +0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14f5,0x14f5,0x14f5,0x14f5, +0x136c,0x136c,0x13ac,0x13ec,0x142c,0x146c,0x14ac,0x14ec,0x1528,0x1568,0x1594,0x15d4,0x1614,0x1654,0x1694,0x16d4, +0x1714,0x1750,0x1790,0x17d0,0x1810,0x1844,0x1880,0x18c0,0x1900,0x1940,0x197c,0x19bc,0x19fc,0x1a3c,0x1a7c,0x1abc, +0xa80,0xac0,0xb00,0xe4d,0xb40,0xa40,0xb80,0xa40,0xe73,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12a9,0x12a9, +0xeb3,0xef3,0xa40,0xa40,0xa40,0xa40,0xdd2,0xc00,0xa40,0xa40,0xc40,0xc80,0xcc0,0xe12,0xd92,0xd02, +0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9, +0x11e9,0x11e9,0x11e9,0x11e9,0xf33,0x1229,0x1069,0x10a9,0x1269,0xf73,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfe9, +0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9, +0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0x1029, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, -0xd3d,0xd4d,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, -0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de, -0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x105e, -0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e, -0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x109e, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0xb34,0xb3b,0xb43,0xb4b,0x1665,0x1665,0x1665,0xb53,0xb5b,0xb5e,0x1695,0x168d,0xb89,0xcb4,0xcb8,0xcbc, -0x4a8,0x4a8,0x4a8,0x4a8,0xcc4,0x17f4,0xccc,0xf08,0x1518,0xa61,0xa67,0xfc6,0xb66,0x16cd,0xc03,0x4a8, -0x152d,0x1520,0x1525,0x166d,0xb6e,0x694,0x4a8,0x4a8,0x19d1,0xf25,0x19c1,0x69c,0x4a8,0x4a8,0x4a8,0x4a8, -0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0xf76,0xf7e,0xf86,0x4a8,0x4a8,0x4a8,0x4a8, -0xb76,0xb79,0xd5b,0x1a39,0xfbe,0x6a4,0x4a8,0x1057,0xc55,0xcd4,0x4a8,0x4a8,0x198d,0xebb,0xec3,0x1a79, -0xbdd,0xbe4,0xbec,0x1860,0x1a19,0x4a8,0x19f9,0xf96,0x1868,0xd63,0xd6b,0xd73,0xfe6,0x6ac,0x4a8,0x4a8, -0x1870,0x1870,0x6b4,0x4a8,0x1aa6,0x106f,0x1a9e,0x1077,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0xd7b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x18bd,0x18bf,0xdf3,0xdfa,0x1880,0x1878,0xd83,0xee8,0x1985,0xea3,0xeab,0xf8e,0x199d,0x19a1,0xee0,0x1006, -0xf59,0xf5e,0x6bc,0x4a8,0x105f,0x1067,0x19e1,0xf66,0xf3b,0xf41,0xf49,0xf51,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x1a61,0x1a59,0x102d,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a49,0xfee,0xff6,0xffe, -0x1a11,0x1a09,0xfa6,0x4a8,0x19a9,0xef8,0x6c4,0x4a8,0x103d,0x1045,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173f,0xc5d,0xc64,0xc64,0xc64, -0x1747,0x1747,0x1747,0xc6c,0x1a96,0x1a96,0x1a96,0x1a96,0x1a96,0x1a96,0x6cc,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888, -0x1888,0x1888,0x188a,0x1888,0x1892,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1895,0x1888,0x1888,0x1888,0x1888, -0x1888,0x6d4,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7, -0x18c7,0xe02,0xfae,0x6dc,0x4a8,0x4a8,0x6e0,0xf00,0x1a31,0x1a29,0xfce,0xfd6,0x6e8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1995,0x1995,0xecb,0xed0,0xed8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x19c9,0x19c9,0x19c9, -0xf18,0xf1d,0x6f0,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1535,0x1535,0x1535, -0x1535,0x1535,0x1535,0x1535,0xa6f,0x1545,0xa77,0x1546,0x153d,0x154e,0x1554,0x155c,0xa7f,0x1685,0x1685,0x6f8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1675,0x1675,0xb81,0xc74,0x4a8,0x4a8,0x4a8,0x4a8,0x158d,0x1594,0xa87, -0x1597,0xa8f,0xa97,0xa9f,0x1591,0xaa7,0xaaf,0xab7,0x1596,0x159e,0x158d,0x1594,0x1590,0x1597,0x159f,0x158e, -0x1595,0x1591,0xabe,0x1564,0x156c,0x1573,0x157a,0x1567,0x156f,0x1576,0x157d,0xac6,0x1585,0x1abe,0x1abe,0x1abe, -0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1aae,0x1ab1,0x1aae, -0x1ab8,0x1097,0x700,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x100e,0x1a51,0x1014, -0x1a51,0x101c,0x1021,0x1025,0x1025,0x107f,0x1086,0x1086,0x1086,0x108e,0x1086,0x108f,0x1086,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x704,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x704,0xace,0x15a7,0x15a7, -0x15a8,0x70c,0x70c,0x70c,0x70c,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x714,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x17fc,0xcdc,0x1804, -0x1804,0xce0,0xe13,0xe1b,0xe23,0xd8b,0xd91,0x18a5,0xd99,0xda1,0xda8,0xda8,0xdaf,0xdb7,0xdbe,0xdc6, -0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0x18ee,0x18f6,0x18ee,0x18fc,0x1904,0x18cf,0x190c,0x1914,0x18ee,0x191c,0x1924, -0x192b,0x1933,0x18d7,0x18ee,0x1935,0x18df,0x18e6,0x193d,0xe2b,0x19b9,0xe32,0x19b1,0x1945,0x194d,0x1955,0x195d, -0x1a21,0x1965,0x196d,0xe3a,0xe42,0x1975,0x1975,0x1975,0xe4a,0x19d9,0x19d9,0xf2d,0xf33,0xe0a,0xe0b,0xe0b, -0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a01,0x1a01,0x1a01, -0x1a01,0x1a01,0x1a01,0xf9e,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0xe68,0xe70,0xe78, -0xe80,0xe88,0xe90,0xe97,0xe9b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a71,0x1a69,0x1035, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a41,0xfde, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81, -0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a86,0x1a81,0x1a81,0x1a81,0x104d,0x104f,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x10dc,0x109f, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x10a7,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x15b8,0x15b8, -0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x10e4,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x10ab,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x10ab,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x10ec,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x10f4,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1444,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x144c,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x487,0x487, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x255,0x25e,0x258,0x258,0x25b,0x252,0x252, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, -0x786,0x780,0x765,0x75c,0x753,0x750,0x747,0x762,0x74d,0x759,0x75c,0x777,0x76e,0x75f,0x783,0x756, -0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x76b,0x768,0x771,0x771,0x771,0x780, -0x747,0x792,0x792,0x792,0x792,0x792,0x792,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, -0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x74d,0x753,0x759,0x77d,0x741, -0x77a,0x78f,0x78f,0x78f,0x78f,0x78f,0x78f,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789, -0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x74d,0x774,0x74a,0x771,0x252, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x261,0x261,0x261,0x261,0x261,0x270,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, -0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, -0x264,0x5df,0x79b,0x79e,0x5e5,0x79e,0x798,0x5dc,0x5d3,0x26a,0x5f1,0x26d,0x7a1,0x5ca,0x5e8,0x795, -0x5e2,0x5ee,0x5d0,0x5d0,0x5d6,0x267,0x5dc,0x5d9,0x5d3,0x5d0,0x5f1,0x26d,0x5cd,0x5cd,0x5cd,0x5df, -0x276,0x276,0x276,0x276,0x276,0x276,0x5fa,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, -0x5fa,0x276,0x276,0x276,0x276,0x276,0x276,0x5eb,0x5fa,0x276,0x276,0x276,0x276,0x276,0x5fa,0x5f4, -0x5f7,0x5f7,0x273,0x273,0x273,0x273,0x5f4,0x273,0x5f7,0x5f7,0x5f7,0x273,0x5f7,0x5f7,0x273,0x273, -0x5f4,0x273,0x5f7,0x5f7,0x273,0x273,0x273,0x5eb,0x5f4,0x5f7,0x5f7,0x273,0x5f7,0x273,0x5f4,0x273, -0x282,0x600,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279, -0x27f,0x5fd,0x282,0x600,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x5fd,0x609,0x603,0x282,0x279,0x282,0x279,0x5fd,0x282,0x279,0x282,0x279,0x282,0x279,0x609, -0x603,0x606,0x5fd,0x282,0x600,0x282,0x279,0x282,0x600,0x60c,0x606,0x5fd,0x282,0x600,0x282,0x279, -0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x282,0x279,0x282,0x279,0x282,0x279,0x27c, -0x285,0x291,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x291,0x291,0x291,0x285,0x285,0x291,0x291, -0x291,0x291,0x285,0x291,0x291,0x285,0x291,0x291,0x291,0x285,0x285,0x285,0x291,0x291,0x285,0x291, -0x294,0x288,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x291,0x285,0x285,0x291,0x285,0x291,0x294, -0x288,0x291,0x291,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x285,0x28e,0x291,0x285,0x285,0x285, -0x28e,0x28e,0x28e,0x28e,0x297,0x297,0x28b,0x297,0x297,0x28b,0x297,0x297,0x28b,0x294,0x60f,0x294, -0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x285,0x294,0x288, -0x294,0x288,0x294,0x288,0x291,0x285,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288, -0x288,0x297,0x297,0x28b,0x294,0x288,0x969,0x969,0x96c,0x966,0x294,0x288,0x294,0x288,0x294,0x288, -0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288, -0x294,0x288,0x294,0x288,0x96c,0x966,0x96c,0x966,0x969,0x963,0x96c,0x966,0xb25,0xc27,0x969,0x963, -0x969,0x963,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966, -0xc27,0xc27,0xc27,0xd1d,0xd1d,0xd1d,0xd20,0xd20,0xd1d,0xd20,0xd20,0xd1d,0xd1d,0xd20,0xe61,0xe64, -0xe64,0xe64,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0x29a,0x612,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x612,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29d,0x29a,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, -0x29a,0x96f,0x96f,0x96f,0x96f,0x96f,0xc2a,0xc2a,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5, -0x2b5,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2a9,0x2a9,0x2a0,0x2a0,0x618,0x2a0,0x2ac,0x61b, -0x2af,0x61b,0x61b,0x61b,0x2af,0x61b,0x2ac,0x2ac,0x61e,0x2b2,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a6, -0x615,0x615,0x615,0x615,0x2a3,0x615,0x2a0,0xa9e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2a0,0x2a0,0x2a0, -0x2a0,0x2a0,0x978,0x978,0x975,0x972,0x975,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d, -0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x624,0x624,0x8d0,0x624,0x624,0x8d3,0xaa1,0xaa1, -0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xbe2,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, -0xe2e,0xe2e,0xe2e,0xe2e,0xe31,0xcf6,0xcf6,0xcf6,0x627,0x627,0xaa4,0xc24,0xc24,0xc24,0xc24,0xc24, -0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xf0f,0xf0c,0xf0f,0xf0c,0x2c1,0x2ca,0xf0f,0xf0c, -6,6,0x2d0,0xe67,0xe67,0xe67,0x2b8,0x1452,6,6,6,6,0x2cd,0x2bb,0x2df,0x2be, -0x2df,0x2df,0x2df,6,0x2df,6,0x2df,0x2df,0x2d6,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d, -0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,6,0x62d,0x62d,0x62d,0x62d,0x62d, -0x62d,0x62d,0x2df,0x2df,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a, -0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x2d3,0x62a,0x62a,0x62a,0x62a,0x62a, -0x62a,0x62a,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0xf0f,0x2e2,0x2e2,0x2e5,0x2df,0x2df,0x2e2,0x2d9,0x97b, -0xb2e,0xb2b,0x2dc,0x97b,0x2dc,0x97b,0x2dc,0x97b,0x2dc,0x97b,0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4, -0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4,0x2e2,0x2e2,0x2d9,0x2d3,0xadd,0xada,0xb28,0xc33, -0xc30,0xc36,0xc33,0xc30,0xd23,0xd26,0xd26,0xd26,0x98a,0x639,0x2f4,0x2f7,0x2f4,0x2f4,0x2f4,0x2f7, -0x2f4,0x2f4,0x2f4,0x2f4,0x2f7,0x98a,0x2f7,0x2f4,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636, -0x636,0x639,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636, -0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630, -0x630,0x633,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630, -0x630,0x630,0x630,0x630,0x984,0x633,0x2ee,0x2f1,0x2ee,0x2ee,0x2ee,0x2f1,0x2ee,0x2ee,0x2ee,0x2ee, -0x2f1,0x984,0x2f1,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f7,0x2f1,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2eb,0x8dc,0x2e8,0x8c1,0x8c1,0x10b9,0x97e,0x97e,0xb34,0xb31, -0x987,0x981,0x987,0x981,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2f7,0x2f1,0x2f4,0x2ee,0xb34,0xb31,0x2f4,0x2ee,0xb34,0xb31,0x2f4, -0x2ee,0xb34,0xb31,0xe6a,0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1, -0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1, -0x98a,0x984,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0xd2c,0xd29,0x2f7,0x2f1,0xe6d,0xe6a, -0xe6d,0xe6a,0xe6d,0xe6a,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0, -0xba3,0xba0,0xba3,0xba0,0xe9a,0xe97,0xe9a,0xe97,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a, -0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0x10f5,0x10f2,0x12d5,0x12d2,0x148b,0x1488,0x148b,0x1488, -0x148b,0x1488,0x148b,0x1488,9,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306, -0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,9, -9,0x309,0x2fa,0x2fa,0x2fa,0x2fd,0x2fa,0x2fa,9,0x300,0x300,0x300,0x300,0x300,0x300,0x300, -0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300, -0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x303,9,0x849,0x98d,9, -9,0x1455,0x1455,0x1371,0xc,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd, -0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0xd2f,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd, -0x8fd,0x8fd,0x8fd,0x8fd,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0xe70,0x30c, -0x30c,0x30c,0x318,0x30c,0x30f,0x30c,0x30c,0x31b,0x900,0xd32,0xd35,0xd32,0xc,0xc,0xc,0xc, -0xc,0xc,0xc,0xc,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, -0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0xc, -0xc,0xc,0xc,0xc,0x31e,0x31e,0x31e,0x315,0x312,0xc,0xc,0xc,0xc,0xc,0xc,0xc, -0xc,0xc,0xc,0xc,0xc39,0xc39,0xc39,0xc39,0x1374,0x1458,0xf18,0xf18,0xf18,0xf15,0xf15,0xd3e, -0x84f,0xc48,0xc45,0xc45,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xf12,0xf12,0xf12,0xf12,0xf12,0x84c, -0x144c,0xf,0xd3b,0x852,0x1290,0x339,0x33c,0x33c,0x33c,0x33c,0x33c,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0xf1b, -0xf1b,0xf1b,0xf1b,0xf1b,0x855,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x8c7, -0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0xad4,0xad4,0xad4,0xc3c,0xc42,0xc3f,0xd38,0xd38,0xd38, -0xd38,0xd38,0xd38,0x128d,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x333,0x330, -0x32d,0x32a,0xb37,0xb37,0x8c4,0x339,0x339,0x345,0x339,0x33f,0x33f,0x33f,0x33f,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x993,0x993,0x339,0x339,0x339,0x339,0x339,0x993, -0x33c,0x339,0x33c,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x993, -0x339,0x339,0x339,0x33c,0x348,0x339,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x321,0x32a,0x327, -0x327,0x324,0x324,0x324,0x324,0x342,0x342,0x324,0x324,0x32a,0x327,0x327,0x327,0x324,0xc4b,0xc4b, -0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x993,0x993,0x993,0x990,0x990,0xc4b, -0x9ab,0x9ab,0x9ab,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a2,0x9a5,0x9a2,0x12,0x996, -0x9a8,0x999,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8, -0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0xc4e,0xc4e,0xc4e, -0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f, -0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x12,0x12,0xc4e,0xc4e,0xc4e, -0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4, -0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xfa2,0xfa2, -0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, -0x9ae,0xb3a,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, -0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xea9,0xea9,0xea9,0xea9,0xea9, -0xea9,0xea9,0xea9,0xea9,0xeb8,0xeb8,0xeac,0xeac,0xeaf,0xebe,0xebb,0x10e,0x10e,0x10e,0x10e,0x10e, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xab0,0xab0,0xab3,0xab3,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0x72,0x72,0x72,0x72, -0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1518,0x1518,0x1518,0x1518,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1515, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xd42,0xd52,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169, +0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x10e9, +0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9, +0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x1129, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0xb74,0xb7b,0xb83,0xb8b,0x1727,0x1727,0x1727,0xb93,0xb9b,0xb9e,0x1757,0x174f,0xbd1,0xcfd,0xd01,0xd05, +0x4db,0x4db,0x4db,0x4db,0xd0d,0x18b6,0xd15,0xf39,0x15db,0xaa1,0xaa7,0xff7,0xba6,0x178f,0xc4b,0x4db, +0x15f0,0x15e3,0x15e8,0x172f,0xbae,0xbb6,0x1142,0x1148,0x1ab1,0xf56,0x1aa1,0x6cb,0x4db,0x4db,0x4db,0x4db, +0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0xfa7,0xfaf,0xfb7,0x4db,0x4db,0x4db,0x4db, +0xbbe,0xbc1,0xda4,0x1b19,0xfef,0x6d3,0x4db,0x1088,0xc9e,0xd1d,0x4db,0x4db,0x1a66,0xeec,0xef4,0x1b59, +0xc25,0xc2c,0xc34,0x1922,0x1af9,0x4db,0x1ad9,0xfc7,0x192a,0xdac,0xdb4,0xdbc,0x1017,0x6db,0x4db,0x4db, +0x1932,0x1932,0x6e3,0x4db,0x1b86,0x10a0,0x1b7e,0x10a8,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0xdc4,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1987,0x1989,0xe39,0xe40,0x1942,0x193a,0xdcc,0xf19,0x1a5e,0xed4,0xedc,0xfbf,0x1a76,0x1a7a,0xf11,0x1037, +0xf8a,0xf8f,0x6eb,0x4db,0x1090,0x1098,0x1ac1,0xf97,0xf6c,0xf72,0xf7a,0xf82,0x4db,0x4db,0x4db,0x4db, +0x1bc6,0x1bbe,0x1132,0x113a,0x1b41,0x1b39,0x105e,0x4db,0x4db,0x4db,0x4db,0x4db,0x1b29,0x101f,0x1027,0x102f, +0x1af1,0x1ae9,0xfd7,0x112a,0x1a82,0xf29,0x6f3,0x4db,0x106e,0x1076,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc, +0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x1801,0xca6,0xcad,0xcad,0xcad, +0x1809,0x1809,0x1809,0xcb5,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x6fb,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a, +0x194a,0x194a,0x194c,0x194a,0x1954,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x1957,0x194a,0x194a,0x194a,0x194a, +0x194a,0x703,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991, +0x1991,0xe48,0xfdf,0x70b,0x4db,0x4db,0x70f,0xf31,0x1b11,0x1b09,0xfff,0x1007,0x717,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x1a6e,0x1a6e,0xefc,0xf01,0xf09,0x4db,0x4db,0x1114, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1aa9,0x1aa9,0x1aa9,0xf49,0xf4e,0x71f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0xaaf,0x1608,0xab7,0x1609,0x1600,0x1611,0x1617,0x161f,0xabf, +0x1747,0x1747,0x727,0x4db,0x4db,0x4db,0x4db,0x4db,0x1737,0x1737,0xbc9,0xcbd,0x4db,0x4db,0x4db,0x4db, +0x1650,0x1657,0xac7,0x165a,0xacf,0xad7,0xadf,0x1654,0xae7,0xaef,0xaf7,0x1659,0x1661,0x1650,0x1657,0x1653, +0x165a,0x1662,0x1651,0x1658,0x1654,0xafe,0x1627,0x162f,0x1636,0x163d,0x162a,0x1632,0x1639,0x1640,0xb06,0x1648, +0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e, +0x1b8e,0x1b91,0x1b8e,0x1b98,0x10e0,0x72f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x110c,0x737,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x73b,0x103f,0x1b31,0x1045,0x1b31,0x104d,0x1052,0x1056,0x1056,0x10b0,0x10b8,0x10c0,0x10c8,0x10d0,0x10c8, +0x10d8,0x10c8,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x744,0xb0e,0x166a,0x166a,0x166a,0x74c,0x74c,0x74c,0x74c,0x173f,0x173f,0x173f,0x173f,0x173f,0x173f, +0x173f,0x754,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x18be,0xd25,0x18c6,0x18c6,0xd29,0xe59,0xe61,0xe69,0xdd4,0xdda,0x196f,0xde2,0x1967,0xdea, +0xdee,0xdf5,0xdfd,0xe04,0xe0c,0xe11,0xe11,0xe11,0xe11,0xe11,0x19c0,0x19c8,0x19c0,0x19ce,0x19d6,0x19a1, +0x19de,0x19e6,0x19c0,0x19ee,0x19f6,0x19fd,0x1a05,0x19a9,0x19c0,0x1a08,0x19b1,0x19b8,0x1a10,0x1a16,0x1a92,0x1a99, +0x1a8a,0x1a1e,0x1a26,0x1a2e,0x1a36,0x1b01,0x1a3e,0x1a46,0xe71,0xe79,0x1999,0x1999,0x1999,0xe81,0x1ab9,0x1ab9, +0xf5e,0xf64,0xe50,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0xfcf,0x4db,0x1bb6,0x1bae,0x10e8,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0xe99,0xea1,0xea9,0xeb1,0xeb9,0xec1,0xec8,0xecc,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x1b51,0x1b49,0x1066,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1b21,0x100f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x10f0,0x10f5,0x10fd, +0x1104,0x111c,0x1122,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61, +0x1b61,0x1b66,0x1b61,0x1b61,0x1b61,0x107e,0x1080,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1150,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6, +0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1158,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x119d,0x1160,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1168,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a, +0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x11a5,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x11ad,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x11b5,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1505,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x150d,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x4ba,0x4ba,0x4ba,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x276,0x27f,0x279,0x279,0x27c,0x273,0x273,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x7a1,0x79b,0x780,0x777, +0x76e,0x76b,0x762,0x77d,0x768,0x774,0x777,0x792,0x789,0x77a,0x79e,0x771,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x786,0x783,0x78c,0x78c,0x78c,0x79b,0x762,0x7ad,0x7ad,0x7ad, +0x7ad,0x7ad,0x7ad,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x768,0x76e,0x774,0x798,0x75c,0x795,0x7aa,0x7aa,0x7aa, +0x7aa,0x7aa,0x7aa,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x768,0x78f,0x765,0x78c,0x273,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0,0,0,0,0,0,0,0,0,0,0,0,0x282,0x282,0x282,0x282, +0x282,0x291,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x285,0x5fa,0x7b6,0x7b9, +0x600,0x7b9,0x7b3,0x5f7,0x5ee,0x28b,0x60c,0x28e,0x7bc,0x5e5,0x603,0x7b0,0x5fd,0x609,0x5eb,0x5eb, +0x5f1,0x288,0x5f7,0x5f4,0x5ee,0x5eb,0x60c,0x28e,0x5e8,0x5e8,0x5e8,0x5fa,0x297,0x297,0x297,0x297, +0x297,0x297,0x615,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x615,0x297,0x297,0x297, +0x297,0x297,0x297,0x606,0x615,0x297,0x297,0x297,0x297,0x297,0x615,0x60f,0x612,0x612,0x294,0x294, +0x294,0x294,0x60f,0x294,0x612,0x612,0x612,0x294,0x612,0x612,0x294,0x294,0x60f,0x294,0x612,0x612, +0x294,0x294,0x294,0x606,0x60f,0x612,0x612,0x294,0x612,0x294,0x60f,0x294,0x2a3,0x61b,0x2a3,0x29a, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a0,0x618,0x2a3,0x61b, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x618,0x624,0x61e, +0x2a3,0x29a,0x2a3,0x29a,0x618,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x624,0x61e,0x621,0x618,0x2a3, +0x61b,0x2a3,0x29a,0x2a3,0x61b,0x627,0x621,0x618,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x621,0x618, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x29d,0x2a6,0x2b2,0x2b2,0x2a6, +0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2b2,0x2b2,0x2b2,0x2b2,0x2a6,0x2b2, +0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2a6, +0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2a6,0x2a6,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2b2,0x2b2, +0x2a6,0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2a6,0x2af,0x2b2,0x2a6,0x2a6,0x2a6,0x2af,0x2af,0x2af,0x2af, +0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5, +0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x2b2,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2a9,0x2b8,0x2b8,0x2ac, +0x2b5,0x2a9,0x990,0x990,0x993,0x98d,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x993,0x98d,0x993,0x98d,0x990,0x98a,0x993,0x98d,0xb4f,0xc51,0x990,0x98a,0x990,0x98a,0x993,0x98d, +0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0xc51,0xc51,0xc51,0xd4a, +0xd4a,0xd4a,0xd4d,0xd4d,0xd4a,0xd4d,0xd4d,0xd4a,0xd4a,0xd4d,0xe8e,0xe91,0xe91,0xe91,0xe91,0xe8e, +0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2be,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x996,0x996,0x996, +0x996,0x996,0xc54,0xc54,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2cd,0x2cd,0x2cd, +0x2cd,0x2cd,0x2cd,0x2cd,0x2ca,0x2ca,0x2c1,0x2c1,0x633,0x2c1,0x2cd,0x636,0x2d0,0x636,0x636,0x636, +0x2d0,0x636,0x2cd,0x2cd,0x639,0x2d3,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c7,0x630,0x630,0x630,0x630, +0x2c4,0x630,0x2c1,0xac8,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x99f,0x99f, +0x99c,0x999,0x99c,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57, +0xc57,0xc57,0xc57,0xc57,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63f,0x63f,0x8f4,0x63f,0x63f,0x8f7,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb, +0xacb,0xacb,0xacb,0xc09,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xe55,0xe55,0xe55,0xe55, +0xe58,0xd1d,0xd1d,0xd1d,0x642,0x642,0xace,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e, +0xc4e,0xc4e,0xc4e,0xc4e,0xf3c,0xf39,0xf3c,0xf39,0x2e2,0x2eb,0xf3c,0xf39,9,9,0x2f1,0xe94, +0xe94,0xe94,0x2d9,0x1491,9,9,9,9,0x2ee,0x2dc,0x300,0x2df,0x300,0x300,0x300,9, +0x300,9,0x300,0x300,0x2f7,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648, +0x648,0x648,0x648,0x648,0x648,0x648,9,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x300,0x300, +0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645, +0x645,0x645,0x645,0x645,0x645,0x645,0x2f4,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0xf3c,0x303,0x303,0x306,0x300,0x300,0x303,0x2fa,0x9a2,0xb58,0xb55,0x2fd,0x9a2, +0x2fd,0x9a2,0x2fd,0x9a2,0x2fd,0x9a2,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5, +0x2e8,0x2e5,0x2e8,0x2e5,0x303,0x303,0x2fa,0x2f4,0xb07,0xb04,0xb52,0xc5d,0xc5a,0xc60,0xc5d,0xc5a, +0xd50,0xd53,0xd53,0xd53,0x9b1,0x654,0x312,0x315,0x312,0x312,0x312,0x315,0x312,0x312,0x312,0x312, +0x315,0x9b1,0x315,0x312,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x654,0x651,0x651, +0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651, +0x651,0x651,0x651,0x651,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64e,0x64b,0x64b, +0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, +0x9ab,0x64e,0x30c,0x30f,0x30c,0x30c,0x30c,0x30f,0x30c,0x30c,0x30c,0x30c,0x30f,0x9ab,0x30f,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x309,0x900,0x903,0x8e5,0x8e5,0x10e6,0x9a5,0x9a5,0xb5e,0xb5b,0x9ae,0x9a8,0x9ae,0x9a8, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x315,0x30f,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0xe97, +0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f, +0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x9b1,0x9ab,0x315,0x30f, +0x315,0x30f,0x315,0x30f,0x315,0x30f,0xd59,0xd56,0x315,0x30f,0xe9a,0xe97,0xe9a,0xe97,0xe9a,0xe97, +0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7, +0xec7,0xec4,0xec7,0xec4,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7, +0xfba,0xfb7,0xfba,0xfb7,0x111f,0x111c,0x12f9,0x12f6,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7, +0xc,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324, +0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0xc,0xc,0x327,0x318,0x318, +0x318,0x31b,0x318,0x318,0xc,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, +0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, +0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x321,0xc,0x86a,0x9b4,0xc,0xc,0x1494,0x1494,0x13ad, +0xf,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +0x924,0x924,0xd5c,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0xe9d,0x32a,0x32a,0x32a,0x336,0x32a, +0x32d,0x32a,0x32a,0x339,0x927,0xd5f,0xd62,0xd5f,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c, +0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0xf,0xf,0xf,0xf,0xf, +0x33c,0x33c,0x33c,0x333,0x330,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xc63,0xc63,0xc63,0xc63,0x13b0,0x1497,0xf45,0xf45,0xf45,0xf42,0xf42,0xd6b,0x870,0xc72,0xc6f,0xc6f, +0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0x86d,0x148b,0x12,0xd68,0x873, +0x12c0,0x357,0x35a,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0xf48,0xf48,0xf48,0xf48,0xf48, +0x876,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0xafe,0xafe,0xafe,0xc66,0xc6c,0xc69,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0x12bd, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x351,0x34e,0x34b,0x348,0xb61,0xb61, +0x8e8,0x357,0x357,0x363,0x357,0x35d,0x35d,0x35d,0x35d,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x9ba,0x9ba,0x357,0x357,0x357,0x357,0x357,0x9ba,0x35a,0x357,0x35a,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x9ba,0x357,0x357,0x357,0x35a, +0x366,0x357,0x342,0x342,0x342,0x342,0x342,0x342,0x342,0x33f,0x348,0x345,0x345,0x342,0x342,0x342, +0x342,0x360,0x360,0x342,0x342,0x348,0x345,0x345,0x345,0x342,0xc75,0xc75,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x354,0x354,0x354,0x9ba,0x9ba,0x9ba,0x9b7,0x9b7,0xc75,0x9d2,0x9d2,0x9d2,0x9cc, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9c9,0x9cc,0x9c9,0x15,0x9bd,0x9cf,0x9c0,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xc78,0xc78,0xc78,0x9c6,0x9c6,0x9c6,0x9c6, +0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3, +0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x15,0x15,0xc78,0xc78,0xc78,0xdcb,0xdcb,0xdcb,0xdcb, +0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb, +0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc, +0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0xb64,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xedf,0xedf,0xedf,0xedf, +0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6, +0xee5,0xee5,0xed9,0xed9,0xedc,0xeeb,0xee8,0x111,0x111,0x111,0x111,0x111,0x17d3,0x17d3,0x17d3,0x17d3, +0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xada,0xada,0xadd,0xadd, +0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0x75,0x75,0x75,0x75,0x1551,0x1551,0x1551,0x1551, +0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x154e,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1fe,0x1fe,0x1fe,0x1fe, +0x1fe,0x1fe,0x1fe,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x20a,0x20a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x20a,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1467,0x1467,0x1467,0x1467, +0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x173d,0x173d,0x173d,0x173d, +0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x186,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1f8,0x1f8,0x1f8,0x1f8,0x15fc,0x15fc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1548,0x1548,0x1548,0x1548, +0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x16aa,0x16aa,0x16aa,0x16aa, +0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xdc2,0xdc2,0xdbf,0xdbf, +0xdbf,0xdc2,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x234,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x17d6,0x17d6,0x240,0x17d6, +0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x240,0x240,0x240,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x16fb,0x16fb,0x16fb,0x16fb,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x183, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x1f8,0x1f8,0x1f8,0x1f8,0x15c3,0x15c3, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1662,0x1662,0x1662,0x1662,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xd9b,0xd9b,0xd98,0xd98,0xd98,0xd9b,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x234,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x8fa,0x8fa, +0,0,0,0,0,0,0,0,0,0,0x921,0x921,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -0x145e,0x360,0x36f,0x36f,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x18,0x18,0x375, -0x375,0x18,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, -0x375,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x18,0x375,0x18,0x18,0x18,0x375,0x375, -0x375,0x375,0x18,0x18,0x363,0xc54,0x360,0x36f,0x36f,0x360,0x360,0x360,0x360,0x18,0x18,0x36f, -0x36f,0x18,0x18,0x372,0x372,0x366,0xd44,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x360, -0x18,0x18,0x18,0x18,0x378,0x378,0x18,0x378,0x375,0x375,0x360,0x360,0x18,0x18,0x8e5,0x8e5, -0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x375,0x375,0x36c,0x36c,0x369,0x369,0x369,0x369, -0x369,0x36c,0x369,0x10c8,0x18,0x18,0x18,0x18,0x1b,0xc57,0x37b,0xc5a,0x1b,0x387,0x387,0x387, -0x387,0x387,0x387,0x1b,0x1b,0x1b,0x1b,0x387,0x387,0x1b,0x1b,0x387,0x387,0x387,0x387,0x387, -0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x1b,0x387,0x387,0x387,0x387,0x387,0x387, -0x387,0x1b,0x387,0x38a,0x1b,0x387,0x38a,0x1b,0x387,0x387,0x1b,0x1b,0x37e,0x1b,0x384,0x384, -0x384,0x37b,0x37b,0x1b,0x1b,0x1b,0x1b,0x37b,0x37b,0x1b,0x1b,0x37b,0x37b,0x381,0x1b,0x1b, -0x1b,0xf24,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x38a,0x38a,0x38a,0x387,0x1b,0x38a,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, -0x37b,0x37b,0x387,0x387,0x387,0xf24,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1e,0x38d,0x38d,0x396,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0xc63,0x399,0x1e,0x399, -0x399,0x399,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399, -0x399,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x1e,0x399,0x399,0x1e,0x399,0x399,0x399, -0x399,0x399,0x1e,0x1e,0x390,0x399,0x396,0x396,0x396,0x38d,0x38d,0x38d,0x38d,0x38d,0x1e,0x38d, -0x38d,0x396,0x1e,0x396,0x396,0x393,0x1e,0x1e,0x399,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x399,0xc63,0xc5d,0xc5d,0x1e,0x1e,0x8eb,0x8eb, -0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x1377,0xc60,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x166b,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0x39c,0x3ab,0x3ab,0x21,0x3b1,0x3b1,0x3b1, -0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x21,0x3b1,0x3b1,0x21,0x21,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, -0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, -0x3b1,0x21,0x3b1,0x3b1,0x21,0xc66,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x21,0x39f,0x3b1,0x39c,0x39c, -0x3ab,0x39c,0x39c,0x39c,0xf27,0x21,0x21,0x3ab,0x3ae,0x21,0x21,0x3ae,0x3ae,0x3a2,0x21,0x21, -0x21,0x21,0x21,0x21,0x21,0x21,0x39c,0x39c,0x21,0x21,0x21,0x21,0x3b4,0x3b4,0x21,0x3b1, -0x3b1,0x3b1,0xf27,0xf27,0x21,0x21,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, -0x3a5,0xc66,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, -0x24,0x24,0x3b7,0x3c3,0x24,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3, -0x3c3,0x24,0x3c3,0x3c3,0x3c6,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3,0x24,0x3c3,0x24,0x3c3,0x3c3, -0x24,0x24,0x24,0x3c3,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3,0x8f4,0x24,0x24,0x24,0x3c3,0x3c3, -0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x8f4,0xd47,0x3c3,0x3c3,0x3c3,0x24,0x24,0x24,0x24,0x3b7,0x3bd, -0x3b7,0x3bd,0x3bd,0x24,0x24,0x24,0x3bd,0x3bd,0x3bd,0x24,0x3c0,0x3c0,0x3c0,0x3ba,0x24,0x24, -0xf2a,0x24,0x24,0x24,0x24,0x24,0x24,0x3b7,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, -0x24,0x24,0xe5e,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8ee,0x8ee,0x8ee,0xc69, -0xc69,0xc69,0xc69,0xc69,0xc69,0xc6c,0xc69,0x24,0x24,0x24,0x24,0x24,0x1461,0x3d5,0x3d5,0x3d5, -0x27,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x1464,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x27, -0x27,0xf33,0x3c9,0x3c9,0x3c9,0x3d5,0x3d5,0x3d5,0x3d5,0x27,0x3c9,0x3c9,0x3cc,0x27,0x3c9,0x3c9, -0x3c9,0x3cf,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x3c9,0x3c9,0x27,0xf33,0xf33,0x166e,0x27, -0x27,0x27,0x27,0x27,0x3d8,0x3d8,0xf2d,0xf2d,0x27,0x27,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2, -0x3d2,0x3d2,0x3d2,0x3d2,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xf30,0xf30,0xf30,0xf30, -0xf30,0xf30,0xf30,0xf30,0x2a,0x1467,0x3e4,0x3e4,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x2a,0x2a,0xc6f,0xc72,0x3e4,0x3db,0x3e7,0x3e4,0x3db,0x3e4, -0x3e4,0x2a,0x3db,0x3e7,0x3e7,0x2a,0x3e7,0x3e7,0x3db,0x3de,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, -0x2a,0x3db,0x3db,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3ea,0x2a,0x3ea,0x3ea,0xe76,0xe76, -0x2a,0x2a,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x2a,0xe79,0xe79,0x2a, -0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x146a,0x3f6,0x3f6, -0x2d,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x2d,0x3fc,0x3fc,0x3fc,0x2d,0x3fc,0x3fc, -0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x129f,0x3fc,0x3fc, -0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x129f,0x2d, -0x2d,0xf3f,0x3ed,0x3f6,0x3f6,0x3ed,0x3ed,0x3ed,0xf36,0x2d,0x3f6,0x3f6,0x3f6,0x2d,0x3f9,0x3f9, -0x3f9,0x3f0,0x129f,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x3ed,0x2d,0x2d,0x2d,0x2d, -0x2d,0x2d,0x2d,0x1671,0x3fc,0x3fc,0xf36,0xf36,0x2d,0x2d,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3, -0x3f3,0x3f3,0x3f3,0x3f3,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0x2d,0x2d,0x2d,0xf3c,0xf3f,0xf3f, -0xf3f,0xf3f,0xf3f,0xf3f,0x30,0x30,0x9bd,0x9bd,0x30,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x30,0x30,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x30,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x9c3,0x30,0x30, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x30,0x30,0x9b7,0x30,0x30,0x30,0x30,0x9b4, -0x9bd,0x9bd,0x9b4,0x9b4,0x9b4,0x30,0x9b4,0x30,0x9bd,0x9bd,0x9c0,0x9bd,0x9c0,0x9c0,0x9c0,0x9b4, -0x30,0x30,0x30,0x30,0x30,0x30,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d, -0x30,0x30,0x9bd,0x9bd,0x9ba,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, -0x33,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417, -0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417, -0x417,0x402,0x417,0x414,0x402,0x402,0x402,0x402,0x402,0x402,0x408,0x33,0x33,0x33,0x33,0x3ff, -0x41d,0x41d,0x41d,0x41d,0x41d,0x417,0x41a,0x405,0x405,0x405,0x405,0x405,0x405,0x402,0x405,0x40b, -0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x40e,0x40e,0x33,0x33,0x33,0x33, -0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, -0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x42c,0x42c,0x36, -0x42c,0x36,0x36,0x42c,0x42c,0x36,0x42c,0x36,0x36,0x42c,0x36,0x36,0x36,0x36,0x36,0x36, -0x42c,0x42c,0x42c,0x42c,0x36,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x36,0x42c,0x42c,0x42c, -0x36,0x42c,0x36,0x42c,0x36,0x36,0x42c,0x42c,0x36,0x42c,0x42c,0x42c,0x42c,0x420,0x42c,0x429, -0x420,0x420,0x420,0x420,0x420,0x420,0x36,0x420,0x420,0x42c,0x36,0x36,0x435,0x435,0x435,0x435, -0x435,0x36,0x432,0x36,0x423,0x423,0x423,0x423,0x423,0x420,0x36,0x36,0x426,0x426,0x426,0x426, -0x426,0x426,0x426,0x426,0x426,0x426,0x36,0x36,0x42f,0x42f,0x137a,0x137a,0x36,0x36,0x36,0x36, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,0x921,0x921, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x149d,0x37e,0x38d,0x38d,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x1b,0x393, +0x393,0x1b,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x393,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x393,0x1b,0x1b,0x1b,0x393,0x393, +0x393,0x393,0x1b,0x1b,0x381,0xc7e,0x37e,0x38d,0x38d,0x37e,0x37e,0x37e,0x37e,0x1b,0x1b,0x38d, +0x38d,0x1b,0x1b,0x390,0x390,0x384,0xd71,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x37e, +0x1b,0x1b,0x1b,0x1b,0x396,0x396,0x1b,0x396,0x393,0x393,0x37e,0x37e,0x1b,0x1b,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x393,0x393,0x38a,0x38a,0x387,0x387,0x387,0x387, +0x387,0x38a,0x387,0x10f5,0x1b,0x1b,0x1b,0x1b,0x1e,0xc81,0x399,0xc84,0x1e,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x1e,0x1e,0x1e,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x39c,0x1e,0x3a2,0x3a2, +0x3a2,0x399,0x399,0x1e,0x1e,0x1e,0x1e,0x399,0x399,0x1e,0x1e,0x399,0x399,0x39f,0x1e,0x1e, +0x1e,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3a8,0x3a8,0x3a8,0x3a5,0x1e,0x3a8,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f, +0x399,0x399,0x3a5,0x3a5,0x3a5,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x21,0x3ab,0x3ab,0x3b4,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0xc8d,0x3b7,0x21,0x3b7, +0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7, +0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7, +0x3b7,0x3b7,0x21,0x21,0x3ae,0x3b7,0x3b4,0x3b4,0x3b4,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x21,0x3ab, +0x3ab,0x3b4,0x21,0x3b4,0x3b4,0x3b1,0x21,0x21,0x3b7,0x21,0x21,0x21,0x21,0x21,0x21,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x3b7,0xc8d,0xc87,0xc87,0x21,0x21,0x912,0x912, +0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x13b3,0xc8a,0x21,0x21,0x21,0x21,0x21,0x21, +0x21,0x16b9,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x3ba,0x3c9,0x3c9,0x24,0x3cf,0x3cf,0x3cf, +0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, +0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, +0x3cf,0x24,0x3cf,0x3cf,0x24,0xc90,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3bd,0x3cf,0x3ba,0x3ba, +0x3c9,0x3ba,0x3ba,0x3ba,0xf54,0x24,0x24,0x3c9,0x3cc,0x24,0x24,0x3cc,0x3cc,0x3c0,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x3ba,0x3ba,0x24,0x24,0x24,0x24,0x3d2,0x3d2,0x24,0x3cf, +0x3cf,0x3cf,0xf54,0xf54,0x24,0x24,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, +0x3c3,0xc90,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, +0x27,0x27,0x3d5,0x3e1,0x27,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1, +0x3e1,0x27,0x3e1,0x3e1,0x3e4,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x3e1,0x27,0x3e1,0x3e1, +0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x91b,0x27,0x27,0x27,0x3e1,0x3e1, +0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x91b,0xd74,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x27,0x3d5,0x3db, +0x3d5,0x3db,0x3db,0x27,0x27,0x27,0x3db,0x3db,0x3db,0x27,0x3de,0x3de,0x3de,0x3d8,0x27,0x27, +0xf57,0x27,0x27,0x27,0x27,0x27,0x27,0x3d5,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, +0x27,0x27,0xe8b,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x915,0x915,0x915,0xc93, +0xc93,0xc93,0xc93,0xc93,0xc93,0xc96,0xc93,0x27,0x27,0x27,0x27,0x27,0x14a0,0x3f3,0x3f3,0x3f3, +0x2a,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x14a3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x2a, +0x2a,0xf60,0x3e7,0x3e7,0x3e7,0x3f3,0x3f3,0x3f3,0x3f3,0x2a,0x3e7,0x3e7,0x3ea,0x2a,0x3e7,0x3e7, +0x3e7,0x3ed,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3e7,0x3e7,0x2a,0xf60,0xf60,0x16bc,0x2a, +0x2a,0x2a,0x2a,0x2a,0x3f6,0x3f6,0xf5a,0xf5a,0x2a,0x2a,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0, +0x3f0,0x3f0,0x3f0,0x3f0,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xf5d,0xf5d,0xf5d,0xf5d, +0xf5d,0xf5d,0xf5d,0xf5d,0x1779,0x14a6,0x402,0x402,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x408,0x2d,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x408,0x408,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x2d,0x408,0x408,0x408,0x408,0x408,0x2d,0x2d,0xc99,0xc9c,0x402,0x3f9,0x405,0x402,0x3f9,0x402, +0x402,0x2d,0x3f9,0x405,0x405,0x2d,0x405,0x405,0x3f9,0x3fc,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x3f9,0x3f9,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x408,0x2d,0x408,0x408,0xea3,0xea3, +0x2d,0x2d,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x2d,0xea6,0xea6,0x2d, +0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x30,0x14a9,0x414,0x414, +0x30,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x30,0x41a,0x41a,0x41a,0x30,0x41a,0x41a, +0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x41a,0x41a, +0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x30, +0x30,0xf6c,0x40b,0x414,0x414,0x40b,0x40b,0x40b,0xf63,0x30,0x414,0x414,0x414,0x30,0x417,0x417, +0x417,0x40e,0x12d2,0x177c,0x30,0x30,0x30,0x30,0x177f,0x177f,0x177f,0x40b,0x177c,0x177c,0x177c,0x177c, +0x177c,0x177c,0x177c,0x16bf,0x41a,0x41a,0xf63,0xf63,0x30,0x30,0x411,0x411,0x411,0x411,0x411,0x411, +0x411,0x411,0x411,0x411,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0x177c,0x177c,0x177c,0xf69,0xf6c,0xf6c, +0xf6c,0xf6c,0xf6c,0xf6c,0x33,0x33,0x9e4,0x9e4,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x9ea,0x33,0x33, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9de,0x33,0x33,0x33,0x33,0x9db, +0x9e4,0x9e4,0x9db,0x9db,0x9db,0x33,0x9db,0x33,0x9e4,0x9e4,0x9e7,0x9e4,0x9e7,0x9e7,0x9e7,0x9db, +0x33,0x33,0x33,0x33,0x33,0x33,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac, +0x33,0x33,0x9e4,0x9e4,0x9e1,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, +0x36,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, +0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, +0x435,0x420,0x435,0x432,0x420,0x420,0x420,0x420,0x420,0x420,0x426,0x36,0x36,0x36,0x36,0x41d, +0x43b,0x43b,0x43b,0x43b,0x43b,0x435,0x438,0x423,0x423,0x423,0x423,0x423,0x423,0x420,0x423,0x429, +0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42c,0x42c,0x36,0x36,0x36,0x36, 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, -0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x936,0x936,0x936,0x939, -0x936,0x936,0x936,0x936,0x39,0x936,0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x939,0x936, -0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x936,0x936,0x936, -0x936,0x936,0x936,0x936,0x936,0x939,0x9d2,0xf4b,0xf4b,0x39,0x39,0x39,0x39,0x903,0x903,0x906, -0x903,0x906,0x906,0x90f,0x906,0x90f,0x903,0x903,0x903,0x903,0x903,0x930,0x903,0x906,0x909,0x909, -0x90c,0x915,0x909,0x909,0x936,0x936,0x936,0x936,0x12a8,0x12a2,0x12a2,0x12a2,0x903,0x903,0x903,0x906, -0x903,0x903,0x9c6,0x903,0x39,0x903,0x903,0x903,0x903,0x906,0x903,0x903,0x903,0x903,0x906,0x903, -0x903,0x903,0x903,0x906,0x903,0x903,0x903,0x903,0x906,0x903,0x9c6,0x9c6,0x9c6,0x903,0x903,0x903, -0x903,0x903,0x903,0x903,0x9c6,0x906,0x9c6,0x9c6,0x9c6,0x39,0x9cf,0x9cf,0x9cc,0x9cc,0x9cc,0x9cc, -0x9cc,0x9cc,0x9c9,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x39,0xf42,0x9cc,0xd4a,0xd4a,0xf45,0xf48, -0xf42,0x10cb,0x10cb,0x10cb,0x10cb,0x12a5,0x12a5,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, +0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x44a,0x44a,0x39, +0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x39,0x39,0x39,0x39,0x39,0x39, +0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a, +0x39,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x43e,0x44a,0x447, +0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x39,0x43e,0x43e,0x44a,0x39,0x39,0x453,0x453,0x453,0x453, +0x453,0x39,0x450,0x39,0x441,0x441,0x441,0x441,0x441,0x43e,0x39,0x39,0x444,0x444,0x444,0x444, +0x444,0x444,0x444,0x444,0x444,0x444,0x39,0x39,0x44d,0x44d,0x13b6,0x13b6,0x39,0x39,0x39,0x39, 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x3c,0x1380, -0x3c,0x3c,0x3c,0x3c,0x3c,0x1380,0x3c,0x3c,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x3f,0x9fc,0x9fc, -0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x9fc,0x3f,0x9fc,0x9fc, -0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x12ab,0x12ab,0xd53,0xd56,0x9f6,0x9ff,0x9f3, -0x9f3,0x9f3,0x9f3,0x9ff,0x9ff,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f0,0x9f0, -0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x3f,0x3f,0x3f,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0x1677,0x42,0x42,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x42,0x42,0xa14,0xa17,0xa17,0xa17, -0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17, -0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa11,0xa0e,0x45,0x45,0x45,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1a,0xa1a,0xa1a,0xa1d,0xa1d,0xa1d,0x1470,0x1470,0x1470, -0x1470,0x1470,0x1470,0x1470,0x1470,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa3e,0xa3e,0xa3e,0xa3e, -0xa3e,0xa3e,0xa20,0xa3e,0xa3e,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa26,0xa23, -0xa35,0xa35,0xa38,0xa41,0xa2f,0xa2c,0xa35,0xa32,0xa41,0xc75,0x4b,0x4b,0xa3b,0xa3b,0xa3b,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xc78,0xc78,0xc78,0xc78, -0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa4d,0xa4d,0xacb,0xace, -0xa53,0xac8,0xa50,0xa4d,0xa56,0xa65,0xa59,0xa68,0xa68,0xa68,0xa47,0x4e,0xa5c,0xa5c,0xa5c,0xa5c, -0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa4a,0xf6c,0x4e,0x4e,0x4e,0x4e,0x4e,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x51,0x51,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x51,0x51,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x51,0x45f,0x51,0x45f,0x51,0x45f,0x51,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x51,0x51,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x456,0x45c,0x456,0x456,0x453,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x453,0x453,0x453,0x45c,0x45c,0x45c,0x45c, -0x51,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x51,0x453,0x453,0x453,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x453,0x453,0x453,0x51,0x51,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x459,0x456,0x51,0xb40,0xb43,0xb43,0xb43, -0xf75,0x54,0x144f,0x144f,0x144f,0x144f,0x468,0x468,0x468,0x468,0x468,0x468,0x4b0,0xb55,0x57,0x57, -0x66f,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b6,0x4c8,0x4b6,0x4c2,0x4bc,0x672,0x4ad,0x66c,0x66c,0x66c, -0x66c,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4b3,0x4c5,0x4b3,0x4bf,0x4b9,0x57,0xd62,0xd62,0xd62,0xd62, -0xd62,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x57,0x57,0x57,0x4ce,0x4ce,0x4ce,0x4ce, -0x4ce,0x4ce,0x4ce,0x4cb,0x4d1,0x6e7,0x4ce,0x93f,0x960,0xa77,0xa77,0xa77,0xb58,0xb58,0xd65,0xd65, -0xd65,0xd65,0x10e3,0x10e6,0x10e6,0x12b1,0x1449,0x1473,0x1476,0x1476,0x167a,0x5a,0x5a,0x5a,0x5a,0x5a, -0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x4d7,0x4d7,0x4d7,0x4d7, -0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d4,0x4d4,0x4d4,0x4d4,0x4d7,0xa7a,0xa7a, -0xb5b,0xb61,0xb61,0xb5e,0xb5e,0xb5e,0xb5e,0xd68,0xe7c,0xe7c,0xe7c,0xe7c,0x10b6,0x5d,0x5d,0x5d, -0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x507,0x507,0x507,0xa83, -0xe85,0xf7b,0xf7b,0xf7b,0xf7b,0x1215,0x167d,0x167d,0x60,0x60,0x60,0x60,0x699,0x699,0x699,0x699, -0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x513,0x513,0x510,0x510,0x510,0x510,0xe8b,0xe8b,0xe8b,0xe88, -0xe88,0xe88,0xe88,0xe88,0x10ec,0x12ba,0x12ba,0x12ba,0x12ba,0x12b4,0x12b4,0x12b4,0x12bd,0x12b7,0x12b7,0x12bd, -0x1479,0x1479,0x1479,0x1479,0x147c,0x147c,0x147c,0x63,0x63,0x63,0x63,0x63,0x53d,0x53d,0x53d,0x53d, -0x53d,0xa8c,0xa8c,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, -0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x540,0x540,0x540,0x540, -0x540,0x540,0x540,0x540,0x540,0x540,0x540,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, -0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0x6c,0xaa7,0xaa7,0xaa7,0xaa7,0xaaa,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaaa, -0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x7c8,0x7c2,0x7c8, -0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2, -0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c2,0x7c2,0x7c2,0x7c8, -0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c8,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, -0x7c5,0xc03,0xc03,0x75,0x75,0x8d9,0x8d9,0x8a3,0x8a3,0x7cb,0x7ce,0xc00,0x78,0x78,0x78,0x78, -0x78,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0, -0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x10aa,0x78,0x78, -0x7b,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7b,0x8ac,0x8ac,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af, -0x8af,0x8af,0x8af,0x8af,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9, -0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0x135c,0x135c,0x135c,0x7e, -0x7e,0x7e,0x7e,0x7e,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0xd05,0xd05,0x81,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x81,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0x84,0x84,0x84,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, -0xac5,0xac5,0xac5,0xac5,0xac5,0xc0c,0xac5,0xac5,0xac5,0xc0c,0xac5,0x87,0x87,0x87,0x87,0x87, -0x87,0x87,0x87,0x87,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, -0x1149,0x1149,0x1149,0x1149,0x95a,0x95a,0x95a,0x95a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, -0x8a,0x8a,0x8a,0x8a,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be, -0x11be,0x11be,0x11be,0x11be,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x588,0x588,0x588,0x588,0x588,0x8d,0x8d,0x8d,0x8d, -0x8d,0xa98,0x58b,0x591,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x58e,0x591,0x591, -0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x8d,0x591,0x591,0x591,0x591, -0x591,0x8d,0x591,0x8d,0x591,0x591,0x8d,0x591,0x591,0x8d,0x591,0x591,0x591,0x591,0x591,0x591, -0x591,0x591,0x591,0x594,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x12cf,0x12cf,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac, -0x5a6,0x5ac,0x5ac,0x5a6,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0x5a9,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a6,0x5a9,0x5a6,0x5a6, -0x5a9,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a9,0x5a9,0x5a6, -0x5a9,0x5a9,0x5a9,0x5a9,0x90,0x90,0x5a9,0x5a9,0x5a9,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a6,0x5a6,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0, -0xae0,0xae0,0xae0,0xae0,0x5ac,0x5ac,0x8f7,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a3,0x5a3, -0xb9a,0xd1a,0x90,0x90,0x804,0x816,0x813,0x816,0x813,0xc21,0xc21,0xd11,0xd0e,0x807,0x807,0x807, -0x807,0x819,0x819,0x819,0x831,0x834,0x843,0x93,0x837,0x83a,0x846,0x846,0x82e,0x825,0x81f,0x825, -0x81f,0x825,0x81f,0x822,0x822,0x83d,0x83d,0x840,0x83d,0x83d,0x83d,0x93,0x83d,0x82b,0x828,0x822, -0x93,0x93,0x93,0x93,0x5b8,0x5c4,0x5b8,0xb9d,0x5b8,0x96,0x5b8,0x5c4,0x5b8,0x5c4,0x5b8,0x5c4, -0x5b8,0x5c4,0x5b8,0x5c4,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x96,0x96,0x5b5,0x708,0x70b,0x720,0x723,0x702,0x70b,0x70b,0x9c,0x6ea,0x6ed,0x6ed,0x6ed, -0x6ed,0x6ea,0x6ea,0x9c,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xa9b,0xa9b,0xa9b, -0x95d,0x6e4,0x5c7,0x5c7,0x9c,0x732,0x711,0x702,0x70b,0x708,0x702,0x714,0x705,0x6ff,0x702,0x720, -0x717,0x70e,0x72f,0x702,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x71d,0x71a, -0x720,0x720,0x720,0x732,0x6f3,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x9c,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0, -0x6f0,0x9c,0x9c,0x9c,0xae3,0xae3,0xae3,0xae3,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, -0x9f,0x9f,0x9f,0x9f,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xa2,0xa2,0xa2,0xa2,0xa2,0x15e1,0x15e1,0x15e1,0x15e1, -0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xa8,0xa8,0xf87,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0x1683,0x1683,0x1683,0x1683, -0x1683,0x1683,0x1683,0x1683,0x1683,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, -0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xab,0xb16,0xb16,0xab,0xab,0xb16,0xab, -0xab,0xb16,0xb16,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb13,0xb13,0xb13,0xb13,0xab,0xb13,0xab,0xb13,0xb13,0xb13,0xb13,0xc99,0xb13,0xb13, -0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb13, -0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16, -0xb16,0xab,0xb16,0xab,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xab,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xd83,0xd83,0xab,0xab, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xe94,0xe91,0xab,0xab,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xae,0xb1c,0xae,0xae,0xae,0xae,0xae,0xae, -0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, -0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, -0xbac,0xbac,0xbac,0xbac,0xbac,0xb1,0xbac,0xbac,0xbac,0xbac,0xba6,0xba6,0xba9,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5, -0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbaf,0xbaf,0xbb2,0xc15,0xc15,0xb4, -0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, -0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbb8,0xbb8,0xb7,0xb7,0xb7,0xb7, -0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1, -0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xba,0xbc1,0xbc1,0xbc1,0xba,0xbbe,0xbbe,0xba,0xba,0xba,0xba, -0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab, -0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab, -0xcab,0xcab,0xcab,0xcab,0xcab,0x148e,0x148e,0xbd,0xc9c,0xc9c,0xc9c,0xca8,0xca8,0xca8,0xca8,0xc9c, -0xc9c,0xca8,0xca8,0xca8,0xbd,0xbd,0xbd,0xbd,0xca8,0xca8,0xc9c,0xca8,0xca8,0xca8,0xca8,0xca8, -0xca8,0xc9f,0xc9f,0xc9f,0xbd,0xbd,0xbd,0xbd,0xca2,0xbd,0xbd,0xbd,0xcae,0xcae,0xca5,0xca5, -0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1, -0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xc0,0xc0,0xcb1,0xcb1,0xcb1,0xcb1, -0xcb1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0xc3,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x1686,0x1686,0x1686,0x1686, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xc6,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x95d,0x95d,0x95d,0x960, +0x95d,0x95d,0x95d,0x95d,0x3c,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d, +0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x960,0x9f9,0xf78,0xf78,0x3c,0x3c,0x3c,0x3c,0x92a,0x92a,0x92d, +0x92a,0x92d,0x92d,0x936,0x92d,0x936,0x92a,0x92a,0x92a,0x92a,0x92a,0x957,0x92a,0x92d,0x930,0x930, +0x933,0x93c,0x930,0x930,0x95d,0x95d,0x95d,0x95d,0x12db,0x12d5,0x12d5,0x12d5,0x92a,0x92a,0x92a,0x92d, +0x92a,0x92a,0x9ed,0x92a,0x3c,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a, +0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x9ed,0x9ed,0x9ed,0x92a,0x92a,0x92a, +0x92a,0x92a,0x92a,0x92a,0x9ed,0x92d,0x9ed,0x9ed,0x9ed,0x3c,0x9f6,0x9f6,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f0,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x3c,0xf6f,0x9f3,0xd77,0xd77,0xf72,0xf75, +0xf6f,0x10f8,0x10f8,0x10f8,0x10f8,0x12d8,0x12d8,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x459,0x459,0x459,0x459,0x459,0x459,0x3f,0x13bc, +0x3f,0x3f,0x3f,0x3f,0x3f,0x13bc,0x3f,0x3f,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, +0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23, +0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0xa23,0x42,0xa23,0xa23, +0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0x12de,0x12de,0xd80,0xd83,0xa1d,0xa26,0xa1a, +0xa1a,0xa1a,0xa1a,0xa26,0xa26,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa17,0xa17, +0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x42,0x42,0x42,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0x16c5,0x45,0x45,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x45,0x45,0xa3b,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa38,0xa35,0x48,0x48,0x48,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa41,0xa41,0xa41,0xa44,0xa44,0xa44,0x14af,0x14af,0x14af, +0x14af,0x14af,0x14af,0x14af,0x14af,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa65,0xa65,0xa65,0xa65, +0xa65,0xa65,0xa47,0xa65,0xa65,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4d,0xa4a, +0xa5c,0xa5c,0xa5f,0xa68,0xa56,0xa53,0xa5c,0xa59,0xa68,0xc9f,0x4e,0x4e,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xca2,0xca2,0xca2,0xca2, +0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa77,0xa77,0xaf5,0xaf8, +0xa7d,0xaf2,0xa7a,0xa77,0xa80,0xa8f,0xa83,0xa92,0xa92,0xa92,0xa6e,0x51,0xa86,0xa86,0xa86,0xa86, +0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa71,0xf99,0x51,0x51,0x51,0x51,0x51,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x54,0x54,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x54,0x54,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x54,0x54,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x471,0x477,0x471,0x471,0x46e,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, +0x54,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x54,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x54,0x54,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x474,0x471,0x54,0xb6a,0xb6d,0xb6d,0xb6d, +0xfa2,0x57,0x148e,0x148e,0x148e,0x148e,0x483,0x483,0x483,0x483,0x483,0x483,0x4ce,0xb7f,0x5a,0x5a, +0x68a,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4d4,0x4e6,0x4d4,0x4e0,0x4da,0x68d,0x4cb,0x687,0x687,0x687, +0x687,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4d1,0x4e3,0x4d1,0x4dd,0x4d7,0x5a,0xd8f,0xd8f,0xd8f,0xd8f, +0xd8f,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x5a,0x5a,0x5a,0x4ec,0x4ec,0x4ec,0x4ec, +0x4ec,0x4ec,0x4ec,0x4e9,0x4ef,0x702,0x4ec,0x966,0x987,0xaa1,0xaa1,0xaa1,0xb82,0xb82,0xd92,0xd92, +0xd92,0xd92,0x1110,0x1113,0x1113,0x12e4,0x1488,0x14b2,0x14b5,0x14b5,0x16c8,0x5d,0x5d,0x5d,0x5d,0x5d, +0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f2,0x4f2,0x4f2,0x4f2,0x4f5,0xaa4,0xaa4, +0xb85,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xd95,0xea9,0xea9,0xea9,0xea9,0x10e3,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x525,0x525,0x525,0xaad, +0xeb2,0xfa8,0xfa8,0xfa8,0xfa8,0x123f,0x16cb,0x16cb,0x63,0x63,0x63,0x63,0x6b4,0x6b4,0x6b4,0x6b4, +0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x531,0x531,0x52e,0x52e,0x52e,0x52e,0xeb8,0xeb8,0xeb8,0xeb5, +0xeb5,0xeb5,0xeb5,0xeb5,0x1119,0x1365,0x1365,0x1365,0x1365,0x12e7,0x12e7,0x12e7,0x1368,0x12ea,0x12ea,0x1368, +0x14b8,0x14b8,0x14b8,0x14b8,0x14bb,0x14bb,0x14bb,0x1782,0x1782,0x1782,0x1782,0x66,0x558,0x558,0x558,0x558, +0x558,0xab6,0xab6,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, +0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x55b,0x55b,0x55b,0x55b, +0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, +0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0x6f,0xad1,0xad1,0xad1,0xad1,0xad4,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad4, +0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x78,0x7e9,0x7e3,0x7e9, +0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3, +0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9, +0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, +0x7e6,0xc2d,0xc2d,0x78,0x78,0x8fd,0x8fd,0x8c7,0x8c7,0x7ec,0x7ef,0xc2a,0x7b,0x7b,0x7b,0x7b, +0x7b,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801, +0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x10d1,0x7b,0x7b, +0x7e,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x7e,0x8d0,0x8d0,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3, +0x8d3,0x8d3,0x8d3,0x8d3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, +0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0x1374,0x1374,0x1374,0x81, +0x81,0x81,0x81,0x81,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0xd2f,0xd2f,0x84,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x813,0x813,0x813,0x84,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0x87,0x87,0x87,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xc36,0xaef,0xaef,0xaef,0xc36,0xaef,0x8a,0x8a,0x8a,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x981,0x981,0x981,0x981,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8, +0x11e8,0x11e8,0x11e8,0x11e8,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x90,0x90,0x90,0x90, +0x90,0xac2,0x5a6,0x5ac,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5a9,0x5ac,0x5ac, +0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac, +0x5ac,0x90,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, +0x5ac,0x5ac,0x5ac,0x5af,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x12f3,0x12f3,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7, +0x5c1,0x5c7,0x5c7,0x5c1,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1, +0x5c4,0x5c4,0x5c4,0x5c4,0x93,0x93,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb0a,0x5c7,0x5c7,0x91e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be, +0xbc1,0xd47,0x93,0x93,0x825,0x837,0x834,0x837,0x834,0xc4b,0xc4b,0xd3b,0xd38,0x828,0x828,0x828, +0x828,0x83a,0x83a,0x83a,0x852,0x855,0x864,0x96,0x858,0x85b,0x867,0x867,0x84f,0x846,0x840,0x846, +0x840,0x846,0x840,0x843,0x843,0x85e,0x85e,0x861,0x85e,0x85e,0x85e,0x96,0x85e,0x84c,0x849,0x843, +0x96,0x96,0x96,0x96,0x5d3,0x5df,0x5d3,0xbc4,0x5d3,0x99,0x5d3,0x5df,0x5d3,0x5df,0x5d3,0x5df, +0x5d3,0x5df,0x5d3,0x5df,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc, +0x5d6,0x99,0x99,0x5d0,0x723,0x726,0x73b,0x73e,0x71d,0x726,0x726,0x9f,0x705,0x708,0x708,0x708, +0x708,0x705,0x705,0x9f,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0xac5,0xac5,0xac5, +0x984,0x6ff,0x5e2,0x5e2,0x9f,0x74d,0x72c,0x71d,0x726,0x723,0x71d,0x72f,0x720,0x71a,0x71d,0x73b, +0x732,0x729,0x74a,0x71d,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x738,0x735, +0x73b,0x73b,0x73b,0x74d,0x70e,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x70b,0x70b,0x70b,0x9f,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, +0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, +0x70b,0x9f,0x9f,0x9f,0xb0d,0xb0d,0xb0d,0xb0d,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, +0xa2,0xa2,0xa2,0xa2,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xa5,0xa5,0xa5,0xa5,0xa5,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xab,0xab,0xfb4,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0x16d1,0x16d1, +0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab, +0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xae,0xb40,0xb40,0xae,0xae,0xb40,0xae, +0xae,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xae,0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xcc0,0xb3d,0xb3d, +0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d, +0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40, +0xb40,0xae,0xb40,0xae,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xdaa,0xdaa,0xae,0xae, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xec1,0xebe,0xae,0xae,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb1,0xb46,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, +0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xb4,0xbd3,0xbd3,0xbd3,0xbd3,0xbcd,0xbcd,0xbd0,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc, +0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbd6,0xbd6,0xbd9,0xc3f,0xc3f,0xb7, +0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2, +0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbdf,0xbdf,0xba,0xba,0xba,0xba, +0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbd,0xbe8,0xbe8,0xbe8,0xbd,0xbe5,0xbe5,0xbd,0xbd,0xbd,0xbd, +0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, +0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, +0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0x14cd,0x14cd,0xc0,0xcc3,0xcc3,0xcc3,0xccf,0xccf,0xccf,0xccf,0xcc3, +0xcc3,0xccf,0xccf,0xccf,0xc0,0xc0,0xc0,0xc0,0xccf,0xccf,0xcc3,0xccf,0xccf,0xccf,0xccf,0xccf, +0xccf,0xcc6,0xcc6,0xcc6,0xc0,0xc0,0xc0,0xc0,0xcc9,0xc0,0xc0,0xc0,0xcd5,0xcd5,0xccc,0xccc, +0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, +0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc3,0xc3,0xcd8,0xcd8,0xcd8,0xcd8, +0xcd8,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x16d4,0x16d4,0x16d4,0x16d4, 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xc9,0xc9,0xc9,0xc9,0xc9,0xd17,0xd17,0xd17,0xcc, -0xcc,0xcc,0xcc,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xcc,0xcc,0xcc,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1, -0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1, -0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xcf,0xcde,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xd2,0xd2,0xced,0xced,0xced,0xced,0xced,0xced,0xd5,0xd5, -0xced,0xd5,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced, -0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xd5,0xced,0xced,0xd5,0xd5,0xd5, -0xced,0xd5,0xd5,0xced,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xd8,0xd8,0xd8,0xd8,0xd8, -0xd8,0xd8,0xd8,0xd8,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0x1494, -0x1494,0xde,0xde,0xde,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086, -0x135,0x135,0x135,0x135,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0, -0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xda7,0xda7,0xdad,0xdad,0xda7, -0xe1,0xe1,0xdaa,0xdaa,0x10b3,0x10b3,0x10b3,0x10b3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, -0xe4,0xe4,0xe4,0xe4,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0x1497,0x1497,0x1497,0x1497,0x1497, -0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x149a,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, -0x12db,0x10f8,0xea3,0xea3,0xdc2,0xdbf,0xdc2,0xdbf,0xdbf,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0x1101, -0x10fe,0x1101,0x10fe,0x10fb,0x10fb,0x10fb,0x1389,0x1386,0xea,0xea,0xea,0xea,0xea,0xdbc,0xdb9,0xdb9, -0xdb9,0xdb6,0xdbc,0xdb9,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xed,0xed,0xed,0xed, -0xed,0xed,0xed,0xed,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xed,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb, -0xdcb,0xdcb,0xdcb,0xdcb,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xf3,0x138c,0xf3,0xf3,0xf3,0xf3, -0xf3,0x138c,0xf3,0xf3,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xf6,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, -0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, -0xdd1,0xdd1,0xdd1,0xf6,0xde6,0xdda,0xdda,0xdda,0xf9,0xdda,0xdda,0xf9,0xf9,0xf9,0xf9,0xf9, -0xdda,0xdda,0xdda,0xdda,0xde6,0xde6,0xde6,0xde6,0xf9,0xde6,0xde6,0xde6,0xf9,0xde6,0xde6,0xde6, -0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6, -0xde6,0xde6,0xde6,0xde6,0xf9,0xf9,0xf9,0xf9,0xdd7,0xdd7,0xdd7,0xf9,0xf9,0xf9,0xf9,0xddd, -0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, -0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde9,0xde9,0xde0,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0x1107,0x1107,0xfc,0xfc,0xfc,0xfc, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf8,0xdf8,0xdf8,0xdf5,0xdf5,0xdf8,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdf2,0xdf2,0xdf2,0xdf2, -0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0x1104,0xfc,0xfc,0xfc,0xdef,0xdef,0xdfe,0xdfe,0xdfe,0xdfe, -0xff,0xff,0xff,0xff,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfb,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14a3,0x14a9,0x14a6,0x102, -0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, -0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, -0xe25,0xe25,0xe25,0xe22,0xe22,0xe19,0xe19,0xe22,0xe1f,0xe1f,0xe1f,0xe1f,0x105,0x105,0x105,0x105, -0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1278,0x1275,0x159,0x159,0x159,0x159,0x159,0x159, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0x1398,0x1398,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0xe2b, -0x12e1,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x12de, -0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, -0xe52,0xe43,0xe3d,0xe4f,0xe4c,0xe46,0xe46,0xe55,0xe40,0xe49,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b, -0xed6,0xed6,0xec1,0xed6,0xed9,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0x111,0x111,0x111,0x111, -0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xee2,0xee2,0xec7,0xecd,0xee2,0xee2, -0xeca,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec4,0xec4,0xec4,0xec4,0xec4, -0xec4,0xec4,0xec4,0xec4,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0x111,0x111,0x111, -0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x139e,0x14b5,0x14b5,0x14b5,0x114,0x114, -0x14b5,0x14b5,0x168f,0x168f,0x168f,0x1689,0x168f,0x1689,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x14b2,0x13a1,0x13a1,0x12e4,0xfe1, -0xfe1,0xfe1,0xfe1,0xfe1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xeee,0xeee,0xef4,0xef4,0x117,0x117,0x117,0x117, -0x117,0x117,0x117,0x117,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd, -0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xef7,0xef7,0xef7,0xef7,0x1110,0x1110, -0x11a,0x11a,0x11a,0xefa,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, -0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x1692,0x11d,0x11d, -0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, -0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, -0xf06,0xf06,0xf06,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x120, -0xf03,0xf03,0xf03,0xf03,0x14bb,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, -0xf09,0xf09,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123, -0x1008,0x1008,0x1008,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0xff6,0xff6,0xff6,0xff6, -0xff6,0xff6,0xff6,0xff6,0x1005,0x1005,0xffc,0xff9,0x126,0x126,0x126,0x100b,0x100b,0xfff,0xfff,0xfff, -0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x126,0x126,0x126,0x1008,0x1008,0x1008, -0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011, -0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1026,0x1026,0x129,0x129,0x129,0x129, -0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129, -0x104d,0x104d,0x104d,0x104d,0x1047,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x1053,0x1053, -0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, -0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1065,0x1065,0x106b,0x106e,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x1068, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x107d, -0x107d,0x1074,0x1074,0x107d,0x107d,0x1074,0x1074,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, -0x1080,0x1080,0x1080,0x1074,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1074,0x107d,0x132,0x132, -0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x132,0x132,0x1077,0x1083,0x1083,0x1083, -0x14ca,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, -0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, -0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, -0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x108c,0x138,0x138, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x13b,0x13b,0x13b, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x1092,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, -0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098, -0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x141,0x141,0x141,0x141,0x141,0x1095, -0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x144,0x144,0x144,0x144, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, -0x1116,0x1116,0x1116,0x1116,0x111f,0x1116,0x1116,0x1116,0x111f,0x1116,0x1116,0x1116,0x1116,0x1113,0x14a,0x14a, -0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x14a, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113a,0x1125,0x113a,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x150, -0x112e,0x1137,0x1125,0x1137,0x1137,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x113a,0x113a,0x113a, -0x113a,0x113a,0x113a,0x1125,0x1125,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x150,0x150,0x1128, -0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x150,0x150,0x150,0x150,0x150,0x150, -0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x150,0x150,0x150,0x150,0x150,0x150, -0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1140,0x1143,0x1143,0x1143,0x1143,0x1131,0x1131,0x150,0x150, -0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151b,0x1d1, -0x1284,0x1269,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x126c,0x126c,0x126c,0x126c,0x127e,0x126c,0x126c, -0x126c,0x126c,0x1272,0x1440,0x1446,0x1443,0x143d,0x153,0x1665,0x1665,0x153,0x153,0x153,0x153,0x153,0x153, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x114f,0x114f,0x1152,0x115b,0x1155,0x1155,0x1155,0x115b,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, -0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e, -0x115e,0x115e,0x1164,0x128a,0x1164,0x1164,0x1164,0x1164,0x1161,0x1161,0x1161,0x1164,0x1698,0x169b,0x15c,0x15c, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x15f,0x15f,0x15f, -0x1179,0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,0x1170,0x117f,0x117f,0x116d,0x116d,0x116d,0x116d,0x162,0x127b, -0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x162,0x162,0x162,0x162,0x116d,0x116d, -0x119d,0x1191,0x119d,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165, -0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x119a,0x119a,0x11a0,0x1194,0x1197, -0x11b5,0x11b5,0x11b5,0x11af,0x11af,0x11a6,0x11af,0x11af,0x11a6,0x11af,0x11af,0x11b8,0x11b2,0x11a9,0x168,0x168, -0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x168,0x168,0x168,0x168,0x168,0x168, -0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x16b,0x16b,0x16b,0x16b,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x16b,0x16b,0x16b,0x16b,0x11c7,0x11c7,0x11c7,0x11c7, -0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7, -0x11c7,0x11c7,0x16e,0x11c4,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x171,0x171,0x171,0x11d0,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11dc,0x11dc,0x11dc,0x11dc, -0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc, -0x11dc,0x11dc,0x174,0x174,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11e2,0x11e2,0x11e2,0x11e2, -0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x177, -0x177,0x177,0x177,0x177,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11e8,0x11e8,0x11e8,0x11e8, -0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8, -0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x17d,0x1206,0x1206,0x180,0x180, -0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x141f,0x141f,0x141f,0x141f, -0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1239,0x1239,0x1239,0x1239, -0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x14d6,0x14d6,0x186,0x186,0x186,0x1239,0x1239,0x1239,0x1239, -0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x123c, -0x123c,0x123c,0x1212,0x186,0x1356,0x1245,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356, -0x1356,0x1245,0x1356,0x1245,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x13b0,0x13b0, -0x186,0x186,0x186,0x186,0x1359,0x1359,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1242,0x1353,0x1242, -0x1242,0x1353,0x1359,0x1248,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1236,0x1236, -0x1236,0x1236,0x1350,0x134a,0x123f,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x186, -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, -0x186,0x186,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0, -0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x1263,0x1365,0x135f,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x125d,0x125d,0x125d,0x125d, -0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1260,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, -0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1260,0x125d,0x125d,0x1365,0x1365,0x1365,0x1365,0x1365,0x135f, -0x1365,0x1365,0x1365,0x189,0x189,0x189,0x189,0x189,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, -0x125a,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1362,0x1362,0x189,0x189,0x189,0x189,0x189,0x189, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, +0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, +0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xcc,0xcc,0xcc,0xcc,0xcc,0xd44,0xd44,0xd44,0xcf, +0xcf,0xcf,0xcf,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xcf,0xcf,0xcf,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, +0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, +0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd2,0xd05,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, +0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, +0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd5,0xd5,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, +0xd0e,0xd0e,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd8, +0xd14,0xd8,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, +0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd14,0xd14,0xd8,0xd8,0xd8, +0xd14,0xd8,0xd8,0xd14,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xdb,0xdb,0xdb,0xdb,0xdb, +0xdb,0xdb,0xdb,0xdb,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0x14d3, +0x14d3,0x1785,0x1785,0xe1,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0, +0x138,0x138,0x138,0x138,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7, +0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdce,0xdce,0xdd4,0xdd4,0xdce, +0xe4,0xe4,0xdd1,0xdd1,0x10e0,0x10e0,0x10e0,0x10e0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, +0xe7,0xe7,0xe7,0xe7,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, +0xc3c,0xc3c,0xc3c,0xc3c,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6, +0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d9,0xea,0xea,0xea,0xea,0xea,0x1788, +0x12ff,0x1122,0xed0,0xed0,0xde9,0xde6,0xde9,0xde6,0xde6,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0x112b, +0x1128,0x112b,0x1128,0x1125,0x1125,0x1125,0x13c5,0x13c2,0xed,0xed,0xed,0xed,0xed,0xde3,0xde0,0xde0, +0xde0,0xddd,0xde3,0xde0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xf0,0xf0,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xf0,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2, +0xdf2,0xdf2,0xdf2,0xdf2,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xf3,0xf3, +0xf3,0xf3,0xf3,0xf3,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xf6,0x13c8,0xf6,0xf6,0xf6,0xf6, +0xf6,0x13c8,0xf6,0xf6,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xf9,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, +0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, +0xdf8,0xdf8,0xdf8,0xf9,0xe0d,0xe01,0xe01,0xe01,0xfc,0xe01,0xe01,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe01,0xe01,0xe01,0xe01,0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xfc,0xfc,0xfc,0xdfe,0xdfe,0xdfe,0xfc,0xfc,0xfc,0xfc,0xe04, +0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe10,0xe10,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0x1131,0x1131,0xff,0xff,0xff,0xff, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1c,0xe1c,0xe1f,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xff,0xff,0xff,0xff,0xff,0xff,0xe19,0xe19,0xe19,0xe19, +0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x112e,0xff,0xff,0xff,0xe16,0xe16,0xe25,0xe25,0xe25,0xe25, +0x102,0x102,0x102,0x102,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe22,0xe25,0xe25,0xe25, +0xe25,0xe25,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x14e2,0x14e8,0x14e5,0x1830, +0x178b,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, +0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, +0x105,0x105,0x105,0x105,0xe4c,0xe4c,0xe4c,0xe49,0xe49,0xe40,0xe40,0xe49,0xe46,0xe46,0xe46,0xe46, +0x108,0x108,0x108,0x108,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129f,0x129f,0x12a2,0x129f,0x15c,0x15c, +0x15c,0x15c,0x15c,0x15c,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0x13d4,0x13d4,0x10b,0x10b,0x10b,0x10b, +0x10b,0x10b,0x10b,0xe52,0x1305,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b, +0x10b,0x10b,0x10b,0x1302,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, +0xc0f,0xc0f,0xc0f,0xc0f,0xe7f,0xe70,0xe6a,0xe7c,0xe79,0xe73,0xe73,0xe82,0xe6d,0xe76,0x10e,0x10e, +0x10e,0x10e,0x10e,0x10e,0xf03,0xf03,0xeee,0xf03,0xf06,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, +0x114,0x114,0x114,0x114,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xf0f,0xf0f, +0xef4,0xefa,0xf0f,0xf0f,0xef7,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef1, +0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4, +0xef4,0x114,0x114,0x114,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x13da,0x14f4, +0x14f4,0x14f4,0x178e,0x117,0x14f4,0x14f4,0x16dd,0x16dd,0x16dd,0x16d7,0x16dd,0x16d7,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x14f1, +0x13dd,0x13dd,0x1308,0x100b,0x100b,0x100b,0x100b,0x100b,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1b,0xf1b,0xf21,0xf21, +0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a, +0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf24,0xf24, +0xf24,0xf24,0x113a,0x113a,0x11d,0x11d,0x11d,0xf27,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x16e0,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0x120,0x120,0x120,0x120,0xf33,0xf33,0xf33,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x14fd,0x14fd,0x14fd,0x123,0xf30,0xf30,0xf30,0xf30,0x14fa,0x123,0x123,0x123,0x123,0x123,0x123,0x123, +0x123,0x123,0x123,0x123,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36, +0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126, +0x126,0x126,0x126,0x126,0x1032,0x1032,0x1032,0x1032,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f, +0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x102f,0x102f,0x1026,0x1023,0x129,0x129,0x129,0x1035, +0x1035,0x1029,0x1029,0x1029,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x129,0x129, +0x129,0x1032,0x1032,0x1032,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x103b,0x103b, +0x103b,0x103b,0x103b,0x103b,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x1050,0x1050, +0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, +0x12c,0x12c,0x12c,0x12c,0x1077,0x1077,0x1077,0x1077,0x1071,0x1791,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0x12f,0x12f,0x107d,0x107d,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x12f,0x12f, +0x12f,0x12f,0x12f,0x12f,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x108f,0x108f,0x108f,0x108f,0x108f, +0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1095,0x1098,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0x132,0x132,0x132,0x1092,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x109e,0x109e,0x109e, +0x109e,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x135,0x135,0x135,0x135,0x135, +0x135,0x135,0x135,0x135,0x10aa,0x10aa,0x10aa,0x109e,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x109e,0x10a7,0x135,0x135,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x135,0x135, +0x10a1,0x10ad,0x10ad,0x10ad,0x1509,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, +0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, +0x138,0x138,0x138,0x138,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, +0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, +0x10b3,0x10b6,0x13b,0x13b,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, +0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, +0x10b9,0x13e,0x13e,0x13e,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141, +0x141,0x141,0x141,0x141,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2, +0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x144,0x144, +0x144,0x144,0x144,0x10bf,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, +0x147,0x147,0x147,0x147,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, +0x14a,0x14a,0x14a,0x14a,0x1140,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140, +0x1140,0x113d,0x14d,0x14d,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146, +0x1146,0x1146,0x1146,0x14d,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x150,0x150,0x150,0x150,0x150,0x150, +0x150,0x150,0x150,0x150,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1164,0x114f,0x1164,0x114f,0x114f,0x114f,0x114f, +0x114f,0x114f,0x114f,0x153,0x1158,0x1161,0x114f,0x1161,0x1161,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f, +0x114f,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x114f,0x114f,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155, +0x1155,0x153,0x153,0x1152,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, +0x153,0x153,0x153,0x153,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, +0x153,0x153,0x153,0x153,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x116a,0x116d,0x116d,0x116d,0x116d, +0x115b,0x115b,0x153,0x153,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557, +0x1557,0x1557,0x1554,0x1d1,0x12b1,0x1290,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x1293,0x1293,0x1293, +0x1293,0x12ab,0x1293,0x1293,0x1293,0x1293,0x1299,0x147f,0x1485,0x1482,0x147c,0x156,0x16ad,0x16ad,0x156,0x156, +0x156,0x156,0x156,0x156,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1179,0x1179,0x117c,0x1185,0x117f,0x117f,0x117f,0x1185,0x159,0x159,0x159,0x159, +0x159,0x159,0x159,0x159,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, +0x1188,0x1188,0x1188,0x1188,0x1188,0x12b7,0x118e,0x12ba,0x118e,0x118e,0x118e,0x118e,0x118b,0x118b,0x118b,0x118e, +0x16e6,0x16e9,0x15f,0x15f,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x162,0x162,0x162,0x11a3,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x119a,0x11a9,0x11a9,0x1197,0x1197, +0x1197,0x1197,0x165,0x12a5,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x165,0x165, +0x165,0x165,0x1197,0x1197,0x11c7,0x11bb,0x11c7,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, +0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x11c4, +0x11c4,0x11ca,0x11be,0x11c1,0x11df,0x11df,0x11df,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11e2, +0x11dc,0x11d3,0x16b,0x16b,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x16b,0x16b, +0x16b,0x16b,0x16b,0x16b,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x16e,0x16e,0x16e,0x16e,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x16e,0x16e,0x16e,0x16e, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x171,0x11ee,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x174,0x174,0x174,0x11fa,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, +0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206, +0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x177,0x177,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203, +0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, +0x120c,0x120c,0x120c,0x17a,0x17a,0x17a,0x17a,0x17a,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, +0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212, +0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x180, +0x1230,0x1230,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183, +0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x1515,0x1515,0x189,0x189,0x189, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, +0x125a,0x125a,0x125a,0x125d,0x125d,0x125d,0x123c,0x189,0x135f,0x1266,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f, +0x135f,0x135f,0x135f,0x135f,0x135f,0x1266,0x135f,0x1266,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x13ec,0x13ec,0x189,0x189,0x189,0x189,0x1362,0x1362,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, +0x135c,0x1263,0x135c,0x1263,0x1263,0x135c,0x1362,0x1269,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f, +0x180f,0x180f,0x180f,0x180f,0x180f,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, 0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x12f9,0x12f9,0x12f9,0x12f9, -0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9, -0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f3,0x12f3,0x12f3,0x18c,0x18c,0x12f6,0x18c,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x12fc,0x1305,0x12ff,0x12ff,0x1305,0x1305,0x1305,0x12ff,0x1305,0x12ff,0x12ff,0x12ff,0x1308,0x1308, -0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x1302,0x1302,0x1302,0x1302,0x192,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x192,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x192,0x192,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x130e,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x192,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x1311,0x1311,0x1311,0x1311, -0x1311,0x1311,0x1314,0x1326,0x1326,0x131a,0x131a,0x131a,0x131a,0x131a,0x195,0x195,0x195,0x195,0x1317,0x1317, -0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x131d,0x131d, -0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195, -0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x14d9,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x136b,0x1368,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x132c,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x19e,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x14dc,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132f,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x14dc,0x14dc,0x14dc,0x14dc, -0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc, -0x14dc,0x14dc,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e2,0x14e8, -0x14e8,0x14ee,0x14e8,0x14e8,0x14e8,0x14e8,0x1a1,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x1a1,0x14e8,0x14e2,0x14e2, -0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341,0x14f7,0x14f7, -0x14f7,0x14f7,0x14f7,0x14fa,0x14fd,0x14fa,0x14fa,0x14fa,0x16aa,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14f7,0x14f7, -0x14f7,0x14fa,0x14f7,0x14fd,0x14fd,0x1a4,0x1a4,0x1a4,0x14fa,0x14f7,0x14f7,0x14fa,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, -0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1a7,0x1a7,0x1a7,0x1a7, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x13bf,0x1503,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf, -0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x1503,0x1503,0x1503,0x1503,0x1503,0x1503,0x16b0,0x16b0,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x16ad,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9, -0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x1500, -0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x1ad,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, +0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, +0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, +0x1314,0x1314,0x1314,0x1314,0x128a,0x137d,0x137a,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287,0x1284, +0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287, +0x1284,0x1284,0x137d,0x137d,0x137d,0x137d,0x137d,0x137a,0x137d,0x137d,0x137d,0x1812,0x18c,0x18c,0x18c,0x18c, +0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x13aa,0x13aa,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d, +0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x1317,0x1317,0x1317, +0x18f,0x18f,0x131a,0x18f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1320,0x1329,0x1323,0x1323,0x1329,0x1329, +0x1329,0x1323,0x1329,0x1323,0x1323,0x1323,0x132c,0x132c,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192, +0x1326,0x1326,0x1326,0x1326,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332, +0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x195,0x195,0x195, +0x195,0x195,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x1332,0x1332,0x1332,0x1332, +0x1332,0x1332,0x1332,0x195,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, +0x15b4,0x15b4,0x15b4,0x15b4,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x134a,0x134a,0x133e,0x133e,0x133e, +0x133e,0x133e,0x198,0x198,0x198,0x198,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, +0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, +0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x1518, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, +0x1383,0x1380,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1a1,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x151b,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1386,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1350,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b, +0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, +0x1a1,0x1a1,0x1a1,0x1a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1533,0x1533,0x1533,0x1533,0x1533,0x1536, +0x16a4,0x1536,0x1536,0x1536,0x176d,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1533,0x1533,0x1533,0x1536,0x1533,0x16a1, +0x16a1,0x1a4,0x1a4,0x1a4,0x1536,0x1533,0x1533,0x1536,0x181b,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, +0x1a7,0x1a7,0x1a7,0x1a7,0x13f8,0x153c,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, +0x13f8,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x16f2,0x16f2,0x1aa,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, +0x179d,0x179d,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, +0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, +0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, 0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13c2,0x13c2,0x1ad,0x1ad, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13d7,0x13c8,0x13cb,0x13cb,0x13c8,0x13c8,0x13c8,0x13ce, -0x13ce,0x1b0,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d1,0x13dd,0x13dd,0x13dd, -0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x158d,0x158d,0x158d,0x158d, -0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x13e9,0x13e9,0x13e9,0x13e9, -0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e6,0x13e0,0x13e0,0x13e6,0x13e6,0x13ef,0x13ef,0x13e9,0x13ec, -0x13ec,0x13e6,0x13e3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x13f2,0x13f2,0x13f2,0x13f2, -0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2, -0x13f2,0x13f2,0x13f2,0x13f2,0x1b6,0x1b6,0x1b6,0x1b6,0x16b3,0x16b3,0x13f2,0x13f2,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x1b6,0x1b6,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x13fe,0x13fb,0x13fb,0x13fb, -0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb, -0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x13f8, -0x13f8,0x13f8,0x13f8,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401, -0x1413,0x1416,0x1416,0x1416,0x1416,0x1419,0x1419,0x1407,0x140a,0x16b9,0x16b6,0x16b6,0x16b6,0x1509,0x1bc,0x1bc, -0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x1506,0x16bf,0x16c2,0x16bc,0x16c5,0x16c5, -0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, -0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, -0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, -0x1281,0x127e,0x1281,0x126f,0x127e,0x127e,0x127e,0x1284,0x127e,0x1284,0x1287,0x127e,0x1284,0x1284,0x127e,0x127e, -0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1425,0x142e,0x1425,0x142e,0x142e, -0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1431,0x1428,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, -0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x1c8,0x1c8, -0x150c,0x150c,0x150c,0x150c,0x150c,0x1512,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, -0x1668,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f, -0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1ce,0x1ce,0x1ce,0x1ce, -0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, +0x13fb,0x13fb,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1401,0x1401,0x1401,0x1401,0x1401,0x1410,0x1401,0x1404,0x1404, +0x1401,0x1401,0x1401,0x1407,0x1407,0x1b0,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d, +0x140a,0x1416,0x1416,0x1416,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, +0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x141f,0x1419,0x1419,0x141f,0x141f, +0x1428,0x1428,0x1422,0x1425,0x1425,0x141f,0x141c,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, +0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b, +0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x1b6,0x1b6,0x1b6,0x1b6,0x16f5,0x16f5,0x142b,0x142b, +0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x1b6,0x1b6,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1437,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, +0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, +0x1434,0x1434,0x1434,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1b9,0x1b9,0x1b9,0x1431,0x1431,0x1431,0x1431,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a, +0x143a,0x143a,0x143a,0x143a,0x144c,0x144f,0x1452,0x1452,0x144f,0x1455,0x1455,0x1440,0x1443,0x16fb,0x16f8,0x16f8, +0x16f8,0x1542,0x1bc,0x1bc,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x153f,0x1701, +0x1704,0x16fe,0x1707,0x1707,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1bf,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x1c2,0x1c2,0x1c2,0x1c2, +0x1c2,0x1c2,0x1c2,0x1c2,0x12ae,0x12ab,0x12ae,0x1296,0x12ab,0x12ab,0x12ab,0x12b1,0x12ab,0x12b1,0x12b4,0x12ab, +0x12b1,0x12b1,0x12ab,0x12ab,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1461, +0x146a,0x1461,0x146a,0x146a,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x146d,0x1464,0x1c5,0x1c5,0x1c5,0x1c5, +0x1c5,0x1c5,0x1c5,0x1c5,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, +0x1548,0x1548,0x1c8,0x1c8,0x1545,0x1545,0x1545,0x1545,0x1545,0x154b,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +0x1c8,0x1c8,0x1c8,0x1c8,0x16b0,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x1ce,0x1ce,0x1ce,0x1ce,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, 0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4,0x1d4, -0x1d4,0x1d4,0x1d4,0x1d4,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4, -0x1527,0x1521,0x1524,0x152d,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1d7,0x1d7,0x1d7,0x1d7, -0x1d7,0x1d7,0x1d7,0x1d7,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x1d1,0x1d1,0x1d1,0x1d1,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1d4, +0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1d4,0x1d4,0x1560,0x155a,0x155d,0x1566,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x1da,0x1da,0x1da, 0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, -0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x16c8,0x1536,0x153c,0x153c, -0x1dd,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1dd,0x1545,0x1545,0x1dd,0x1dd,0x1545, -0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1545,0x1545, -0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1545,0x1545,0x1dd,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1dd, -0x1539,0x1545,0x1536,0x153c,0x1536,0x153c,0x153c,0x153c,0x153c,0x1dd,0x1dd,0x153c,0x153c,0x1dd,0x1dd,0x153f, -0x153f,0x1542,0x1dd,0x1dd,0x16cb,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1536,0x1dd,0x1dd,0x1dd,0x1dd, -0x1dd,0x1548,0x1545,0x1545,0x1545,0x1545,0x153c,0x153c,0x1dd,0x1dd,0x1539,0x1539,0x1539,0x1539,0x1539,0x1539, -0x1539,0x1dd,0x1dd,0x1dd,0x1539,0x1539,0x1539,0x1539,0x1539,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd, -0x1dd,0x1dd,0x1dd,0x1dd,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x1e0,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x155d,0x155d,0x155d,0x155d,0x1557,0x1557,0x1557,0x154b,0x154b,0x154b,0x1557,0x1557,0x154b,0x155a,0x154e,0x154b, -0x1560,0x1560,0x1554,0x1560,0x1560,0x1551,0x1e0,0x1e0,0x156f,0x156f,0x156f,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1566,0x1569,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x16ce,0x16ce,0x16ce,0x16ce,0x157b,0x1578,0x1e6,0x1e6, -0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1e9,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, -0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x1584,0x1587,0x158a,0x158d,0x1ec, -0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x159c,0x159c,0x159c,0x159c,0x159c,0x1590,0x1590,0x1ef, -0x1ef,0x1ef,0x1ef,0x1593,0x1593,0x1593,0x1593,0x1593,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1596,0x1ef, -0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1f2,0x1f2,0x15a2, -0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x1f2, -0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x15a8,0x15ba,0x15ba,0x15ae,0x15b7,0x1f5,0x1f5,0x1f5, -0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b1,0x15b1,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, -0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, -0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1f8,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15c6,0x15cf,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9, -0x15c9,0x15c9,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1fb,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x1fe,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1, -0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15de,0x15de, -0x15de,0x15de,0x15de,0x201,0x201,0x201,0x201,0x201,0x15f9,0x15f9,0x15fc,0x15fc,0x15ff,0x15f0,0x204,0x204, -0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6, -0x15f6,0x15f6,0x204,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x204,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x170a,0x156f,0x1575,0x16b6,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x1dd,0x157e, +0x157e,0x1dd,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, +0x157e,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x157e,0x157e,0x1dd,0x157e,0x157e,0x157e, +0x157e,0x157e,0x1dd,0x1dd,0x16b3,0x157e,0x156f,0x1575,0x156f,0x1575,0x1575,0x1575,0x1575,0x1dd,0x1dd,0x1575, +0x1575,0x1dd,0x1dd,0x1578,0x1578,0x157b,0x1dd,0x1dd,0x170d,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x156f, +0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1581,0x157e,0x157e,0x157e,0x157e,0x1575,0x1575,0x1dd,0x1dd,0x1572,0x1572, +0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd,0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd, +0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, +0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1e0,0x1596,0x1596,0x1596,0x1596,0x1596, +0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,0x1584,0x1584,0x1584,0x1590,0x1590, +0x1584,0x1593,0x1587,0x1584,0x1599,0x1599,0x158d,0x1599,0x1599,0x158a,0x17a0,0x1e0,0x15a8,0x15a8,0x15a8,0x159c, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159f,0x15a2,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1710,0x1710,0x1710,0x1710, +0x15b4,0x15b1,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15c6,0x15c6,0x15c6,0x15c6, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15bd, +0x15c0,0x15c3,0x15c6,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x15d5,0x15d5,0x15d5,0x15d5, +0x15d5,0x15c9,0x15c9,0x1ef,0x1ef,0x1ef,0x1ef,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15d2,0x15d2,0x15d2,0x15d2, +0x15d2,0x15d2,0x15cf,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15de,0x15de,0x15de,0x15de, +0x15de,0x1f2,0x1f2,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15d8,0x15d8,0x15d8,0x15d8, +0x15d8,0x15d8,0x15d8,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x15e1,0x15f3,0x15f3,0x15e7, +0x15f0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15ea,0x15ea,0x15ea,0x15ea, +0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15f9,0x15f9,0x15f9,0x15f9, 0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x204,0x204,0x204,0x204,0x204,0x15f9,0x15f9,0x15f9,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611, -0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, -0x20a,0x160e,0x160e,0x160e,0x160e,0x20a,0x20a,0x20a,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x1614,0x1626,0x1626,0x1614,0x1614,0x1614,0x1614,0x210,0x210, -0x1626,0x1626,0x1629,0x1629,0x1614,0x1614,0x1626,0x161a,0x1617,0x161d,0x162f,0x162f,0x1620,0x1620,0x1623,0x1623, -0x1623,0x162f,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7, -0x16d4,0x16d4,0x16d4,0x16d4,0x16d1,0x16d1,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, +0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x1f8,0x1605,0x1605,0x1605,0x1605, +0x1605,0x15ff,0x1608,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1602,0x1602,0x1602,0x1602, +0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1605,0x1605,0x1605,0x1605,0x1605,0x1fb,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1fe,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x1617,0x1617,0x1617,0x1617,0x1617,0x201,0x201,0x201,0x201,0x201,0x1632,0x1632,0x1635,0x1635, +0x1638,0x1629,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x162f,0x162f,0x162f,0x162f, +0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x204,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x204,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x204,0x204,0x204,0x204,0x204,0x1632,0x1632,0x1632,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x164a,0x164a,0x164a,0x164a, +0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x20a,0x1647,0x1647,0x1647,0x1647,0x20a,0x20a,0x20a,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x164d,0x165f,0x165f,0x164d,0x164d, +0x164d,0x164d,0x210,0x210,0x165f,0x165f,0x1662,0x1662,0x164d,0x164d,0x165f,0x1653,0x1650,0x1656,0x1668,0x1668, +0x1659,0x1659,0x165c,0x165c,0x165c,0x1668,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, +0x1719,0x1719,0x1719,0x1719,0x1716,0x1716,0x1716,0x1716,0x1713,0x1713,0x210,0x210,0x210,0x210,0x210,0x210, 0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x213,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x213,0x213,0x213, -0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, +0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x213,0x166b,0x166b,0x166b, +0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b, +0x166b,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, 0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x1638,0x1647,0x163e,0x163b,0x164d,0x164d,0x1641,0x164d,0x219,0x219,0x219,0x219, -0x219,0x219,0x219,0x219,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x219,0x219, -0x219,0x219,0x219,0x219,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1650,0x1650, -0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, -0x21c,0x21c,0x21c,0x1659,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, -0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x21f,0x21f, -0x21f,0x16da,0x16da,0x16da,0x16e6,0x16e6,0x16da,0x16da,0x16da,0x16da,0x16e6,0x16da,0x16da,0x16da,0x16da,0x16dd, -0x21f,0x21f,0x21f,0x21f,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e0,0x16e0, -0x16ec,0x16ec,0x16ec,0x16e0,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x222,0x222,0x222,0x222,0x222, +0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x1671,0x1680,0x1677,0x1674,0x1686,0x1686,0x167a,0x1686, +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d, +0x167d,0x167d,0x219,0x219,0x219,0x219,0x219,0x219,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, +0x168c,0x168c,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x21c,0x21c,0x21c,0x21c,0x21c, +0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x1692,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, +0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, +0x172b,0x172b,0x21f,0x21f,0x21f,0x171c,0x171c,0x171c,0x1728,0x1728,0x171c,0x171c,0x171c,0x171c,0x1728,0x171c, +0x171c,0x171c,0x171c,0x171f,0x21f,0x21f,0x21f,0x21f,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725, +0x1725,0x1725,0x1722,0x1722,0x172e,0x172e,0x172e,0x1722,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x222, +0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, 0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, -0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x1701,0x1701,0x1701,0x1701, -0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x228, -0x1701,0x1701,0x228,0x228,0x228,0x228,0x228,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x22b,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x1704,0x1704,0x1707,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x22e, -0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x22e, -0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1713,0x1713,0x1713,0x1713, -0x1713,0x1713,0x1713,0x1713,0x1716,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743, +0x1743,0x1743,0x1743,0x228,0x1743,0x1743,0x228,0x228,0x228,0x228,0x228,0x1740,0x1740,0x1740,0x1740,0x1740, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746,0x22b,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1749,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x174c,0x174c,0x174c,0x174c,0x174c,0x174c, 0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1713,0x1713,0x1713,0x1713,0x1713,0x231,0x231,0x231, +0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1776,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1824,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1824,0x231,0x231,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1821,0x181e,0x1824,0x1824,0x1824,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x181e,0x1821,0x1821,0x1821,0x1821,0x1821,0x231,0x231,0x231,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x231, 0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x171c,0x171c,0x171c,0x171c, -0x1719,0x171c,0x171c,0x171f,0x1722,0x171f,0x171f,0x171c,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234, -0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1719,0x1719,0x1719,0x1719,0x1719,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x1728,0x1728,0x24f,0x24f, -0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x8fa,0x8fa,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x10ad,0x10ad,0x10ad,0x10ad, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1437,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725, -0x1725,0x1725,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -0x23d,0x23d,0x23d,0x23d,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0x1254, -0x1254,0x1254,0x240,0x240,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0x240,0x240, -0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0x246,0x246, -0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x1266,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x24c,0x24c, -0x10bf,0x34b,0x34b,0x357,0xc51,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x357,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x357,0x357,0x357,0x357,0x351,0x10c2,0x1296, -0x35a,0x8ca,0x8cd,0x34e,0x34e,0x10bf,0x1293,0x1293,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, -0x35a,0x35a,0x34b,0x34b,0x858,0x85b,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2, -0x354,0xf21,0xf1e,0x1299,0x1299,0x1299,0x1299,0x1299,0x145b,0x10c5,0x10c5,0xe73,0xe73,0xd41,0xe73,0xe73, -0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35d,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x35a,0x35d,0x35a,0x35a,0x35d,0x35a,0x35a,0x35a,0x35a,0x35a,0x1293,0x1296,0x34e,0x35a,0x357,0x357, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0xb3d,0xb3d,0xd4d,0xd4d,0x438,0xd50,0x137d,0x137d,0x137d, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x444,0x444,0x444,0x10da,0x10da,0x10da,0x10da,0x10da,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441, -0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441, -0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7, -0x447,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x44a,0x44a,0x44a,0x44a,0x44d,0x93c,0xf6f,0xf6f,0xf72,0xf6f, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0xf72,0xf6f,0xf72,0xf6f,0xf72,0xf6f, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x63c,0x63c,0x63f,0x47a,0x64b,0x648,0x648,0x645,0x4a4,0x4a4,0x462,0x462,0x462,0x462,0x462,0xa6b, -0x64e,0x486,0x666,0x669,0x49b,0x64e,0x489,0x489,0x47a,0x495,0x495,0x63c,0x4a1,0x49e,0x642,0x474, -0x46b,0x46b,0x46e,0x46e,0x46e,0x46e,0x46e,0x471,0x46e,0x46e,0x46e,0x465,0x4aa,0x4aa,0x4a7,0x4a7, -0x65a,0x48f,0x48c,0x657,0x654,0x651,0x663,0x47d,0x660,0x660,0x492,0x495,0x65d,0x65d,0x492,0x495, -0x477,0x47a,0x47a,0x47a,0x498,0x483,0x480,0xb52,0xa71,0xa74,0xa6e,0xa6e,0xa6e,0xa6e,0xb49,0xb49, -0xb49,0xb49,0xb4f,0xc7e,0xc7b,0xd5c,0xd5f,0xb4c,0xd5f,0xd5f,0xd5f,0xd5f,0xd5c,0xd5f,0xd5f,0xb46, -0x4dd,0x4dd,0x4f5,0x678,0x4da,0x675,0x4dd,0x4f2,0x4da,0x678,0x4ec,0x4f5,0x4f5,0x4f5,0x4ec,0x4ec, -0x4f5,0x4f5,0x4f5,0x681,0x4da,0x4f5,0x67b,0x4da,0x4e9,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4da,0x4da, -0x4e0,0x675,0x67e,0x4da,0x4f5,0x4da,0x684,0x4da,0x4f5,0x4e3,0x4fb,0x687,0x4f5,0x4f5,0x4e6,0x4ec, -0x4f5,0x4f5,0x4f8,0x4f5,0x4ec,0x4ef,0x4ef,0x4ef,0x4ef,0xa80,0xa7d,0xc81,0xd6e,0xb6d,0xb70,0xb70, -0xb6a,0xb67,0xb67,0xb67,0xb67,0xb70,0xb6d,0xb6d,0xb6d,0xb6d,0xb64,0xb67,0xd6b,0xe7f,0xe82,0xf78, -0x10e9,0x10e9,0x10e9,0x68d,0x68a,0x4fe,0x501,0x501,0x501,0x501,0x501,0x68a,0x68d,0x68d,0x68a,0x501, -0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x50a,0x50a,0x50a,0x50a, -0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x504,0x504,0x504,0x504,0x504,0x504, -0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x50d,0x516,0x516,0x510,0x510,0x510,0x513,0x50d, -0x510,0x510,0x50d,0x50d,0x50d,0x50d,0x510,0x510,0x696,0x696,0x50d,0x50d,0x510,0x510,0x510,0x510, -0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x513,0x513,0x513,0x510,0x510,0x699,0x510, -0x699,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x50d,0x510,0x50d,0x50d,0x50d,0x50d,0x50d,0x50d, -0x510,0x510,0x50d,0x696,0x50d,0x50d,0x50d,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0x69f,0x519,0x69f,0x69f, -0x51c,0x519,0x519,0x69f,0x69f,0x51c,0x519,0x69f,0x51c,0x519,0x519,0x69f,0x519,0x69f,0x528,0x525, -0x519,0x69f,0x519,0x519,0x519,0x519,0x69f,0x519,0x519,0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x69f, -0x51c,0x69f,0x51c,0x69f,0x69f,0x69f,0x69f,0x69f,0x6a5,0x51f,0x69f,0x51f,0x51f,0x519,0x519,0x519, -0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x519,0x519,0x69f,0x69f,0x519,0x519,0x519,0x51c,0x519,0x519, -0x51c,0x519,0x519,0x51c,0x69f,0x51c,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x69f,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x6a2,0x69f,0x51c,0x519, -0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x69f,0x69f,0x519,0x51c,0x6a2,0x6a2,0x51c,0x51c,0x519,0x519, -0x51c,0x51c,0x519,0x519,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x51c,0x51c,0x69f,0x69f, -0x51c,0x51c,0x69f,0x69f,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x69f,0x519,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x69f,0x519,0x519, -0x519,0x519,0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x519,0x519,0x519, -0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x522,0x519,0x519,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, -0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0x52b,0xa89,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x53a,0x537,0x53a,0x537,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x6a8,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x531,0x531,0x52b,0x52b,0x52b,0x52b,0x534,0x534,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52e,0x7ad,0x7aa,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0xa89,0xb7c,0xa89,0xa89,0xa89,0x53d,0x53d,0x53d,0x53d, -0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d, -0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x6b1,0x6b1,0x6b1,0x6b1, -0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x543,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, -0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xcf9,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x546,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x549,0x549,0x549,0x549,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6bd,0x6bd,0x6bd,0x6bd, -0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x54c,0x54c,0x6bd,0x6bd, -0x6bd,0x6bd,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0x6c3,0x6c3,0x54f,0x6c0, -0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x552,0x552,0x54f,0x54f,0x555,0x555,0x555,0x555,0x6c3,0x6c3, -0x555,0x555,0x6c6,0x6c3,0x54f,0x54f,0x54f,0x54f,0x6c3,0x6c3,0x555,0x555,0x6c6,0x6c3,0x54f,0x54f, -0x54f,0x54f,0x6c3,0x6c3,0x6c0,0x54f,0x555,0x6c3,0x54f,0x54f,0x6c0,0x6c3,0x6c3,0x6c3,0x555,0x555, -0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x6c3,0x6c0, -0x6c3,0x6c0,0x54f,0x555,0x555,0x555,0x555,0x555,0x555,0x54f,0x54f,0x6c0,0xa8f,0xa8f,0xa8f,0xa8f, -0xa8f,0xa8f,0xa8f,0xa8f,0xb82,0xb82,0xb82,0xb85,0xb85,0xb88,0xb88,0xb82,0x561,0x561,0x561,0x561, -0x55e,0x6d5,0x6d5,0x558,0x558,0x6c9,0x558,0x558,0x558,0x558,0x6cf,0x6c9,0x558,0x55e,0x558,0x558, -0xcfc,0xcfc,0xb8b,0xb8b,0xd7a,0xa92,0x55b,0x55b,0x6cc,0x567,0x6cc,0x55b,0x55e,0x558,0x55e,0x55e, -0x558,0x558,0x55e,0x558,0x558,0x558,0x55e,0x558,0x558,0x558,0x55e,0x55e,0x558,0x558,0x558,0x558, -0x558,0x558,0x558,0x558,0x55e,0x561,0x561,0x55b,0x558,0x558,0x558,0x558,0x6d5,0x558,0x6d5,0x558, -0x558,0x558,0x558,0x558,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x6d8,0x6d5,0x56a,0x6d8, -0x6c9,0x6cf,0x55e,0x6c9,0x6d2,0x6c9,0x6c9,0x558,0x6c9,0x6d5,0x56a,0x6d5,0xa92,0xa92,0xb8e,0xb8e, -0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb91,0xb8e,0xb8e,0xd74,0xd80,0x56d,0x56d,0x56d,0x56d, -0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d, -0x570,0x12c9,0x12c9,0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x147f,0x576,0x582,0x576, -0x576,0x12c9,0x570,0x570,0x582,0x582,0x12cc,0x12cc,0x585,0x585,0x570,0x57c,0x570,0x570,0x57c,0x570, -0x57c,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570, -0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x57c,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x6de,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x570,0x570,0x57c, -0x570,0x570,0x570,0x570,0x12c9,0x570,0x12c9,0x570,0x570,0x570,0x570,0x12c9,0x12c9,0x12c9,0x570,0x122a, -0x570,0x570,0x570,0x579,0x579,0x579,0x579,0x12c6,0x12c6,0x570,0x573,0x57f,0x57c,0x570,0x570,0x570, -0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0x6db,0x6db, -0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x12c9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5af,0x5af,0x5af,0x5af, -0x5af,0x5af,0x5af,0x5af,0x5a6,0x5ac,0x59d,0x5a0,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6, -0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf, -0x12cf,0x12cf,0x12cf,0x12cf,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5a9,0x5af,0x5ac,0x5a6, -0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5ac,0x5a6,0x5a9, -0x5ac,0x5a6,0x5a9,0x5af,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a6,0x5a9,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a9,0x5a6,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5af,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af, -0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5b2,0x5b2,0x5b2,0x5b2,0xf84,0xf84,0xf84,0x1482, -0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1680,0x1680,0x80a,0x810,0x810,0x81c,0x81c,0x80d,0x804,0x80d, -0x804,0x80d,0x804,0x80d,0x804,0x80d,0x804,0x80d,0x5c1,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, -0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab, -0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab, -0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4, -0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b7,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4, -0x6b4,0x6b4,0x6b4,0x6b4,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1, -0x6b1,0x6b1,0x6b1,0x6b1,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6e1,0x6e1,0xbeb,0x86d,0x867,0x864,0x86a,0x861,0x6f6,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9, -0x6f9,0x6f9,0x6f9,0x6f9,0x873,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, -0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, -0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x870,0x870,0x6fc,0x882,0x885,0x88b,0x7b0,0x7bc,0x8a0,0x7b9, -0x879,0x876,0x879,0x876,0x87f,0x87c,0x87f,0x87c,0x879,0x876,0x7b6,0x88b,0x879,0x876,0x879,0x876, -0x879,0x876,0x879,0x876,0x88e,0x897,0x894,0x894,0x702,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x738, -0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738, -0x738,0x738,0x738,0x705,0x720,0x6ff,0x726,0x729,0x723,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x735, -0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735, -0x735,0x735,0x735,0x705,0x720,0x6ff,0x720,0xbee,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, -0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, -0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x124b,0x124b,0x124b,0x124b,0x124b,0x7a7, -0x7b6,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x8d6,0x8d6,0x8d6,0x8d6,0x7bf,0x7bf, -0x891,0x89d,0x89d,0x89d,0x89d,0x89a,0x7b3,0x888,0xab6,0xab6,0xab6,0xbfd,0xc1b,0xc18,0xad1,0x85e, -0x7c5,0x7c2,0x7c5,0x7c8,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, -0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c2, -0xc1e,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1, -0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1, -0x7d4,0x7d1,0x7d4,0x7d7,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1, -0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d1, -0x7d1,0x7d1,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d7,0x7d1, -0x7d1,0x7d1,0x7d1,0x7d1,0x7d4,0x7d7,0x7d7,0x7d4,0x7d4,0x7d4,0x7d4,0x8a6,0x8a9,0x7da,0x7dd,0xc06, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e6,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7ef,0x7ef,0x7ef,0x7ef, -0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef, -0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0xd08,0xd08,0xe34,0x7e9,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xd02,0xd02,0xd02,0xd02,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x8bb,0x8bb,0x8bb,0x8bb, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0xd0b,0xd0b,0xd0b,0xd0b,0x8be,0x8be,0x8be,0x8be,0x8be,0x7f5,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0xd0b,0xd0b, -0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, -0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, -0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, -0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37, -0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37, -0x10ad,0x10ad,0x10ad,0x10ad,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x801,0x801,0x7fe,0x801,0x7fe,0x801,0x801,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x801,0x7fe,0x801,0x7fe,0x801,0x801,0x7fe,0x7fe,0x801, -0x801,0x801,0x7fe,0x7fe,0x7fe,0x7fe,0x143a,0x143a,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x124e,0x124e,0x124e,0x124e,0x122d,0x122d,0x122d,0x122d, -0x122d,0x122d,0x122d,0x122d,0xd02,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5, -0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b8,0x8b5,0x8b8,0x8b5,0x8b5, -0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5, -0x8b5,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0xd0b, -0x936,0x918,0x918,0x918,0x918,0x912,0x918,0x918,0x92a,0x918,0x918,0x915,0x921,0x927,0x927,0x927, -0x927,0x927,0x92a,0x912,0x91e,0x912,0x912,0x912,0x909,0x909,0x912,0x912,0x912,0x912,0x912,0x912, -0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x912,0x912,0x912,0x912,0x912,0x912, -0x912,0x912,0x912,0x912,0x915,0x909,0x912,0x909,0x912,0x909,0x924,0x91b,0x924,0x91b,0x933,0x933, -0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, -0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, -0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945, -0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945, -0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, -0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x94b,0x94b, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x94e,0x94e, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x9e7,0x9e7,0xf69,0x9e7,0x9e7,0x9e7,0x9ea,0x9e7, -0xf69,0x9e7,0x9e7,0xf60,0x9e1,0x9d5,0x9d5,0x9d5,0x9d5,0x9e4,0x9d5,0xf4e,0xf4e,0xf4e,0x9d5,0x9d8, -0x9e1,0x9db,0xf54,0xf63,0xf63,0xf4e,0xf4e,0xf69,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0x9ed,0x9ed,0x9de,0x9de,0x9de,0x9de,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e4,0x9e4, -0x9d5,0x9d5,0xf69,0xf69,0xf69,0xf69,0xf4e,0xf4e,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, -0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, -0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa05,0xa0b,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0, -0x10e0,0x10e0,0x10e0,0x10e0,0x10dd,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa41,0xa41,0xa41,0xa44,0xa44,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa29,0xa29,0xa3e,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa3e,0xa3e,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa62,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1773,0x1773,0x1773,0x1773,0x1773,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, +0x1821,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1773,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x175b,0x175e,0x175b,0x175b,0x1758,0x234,0x234,0x234,0x234, +0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1755,0x1755,0x1755,0x1755,0x1755, +0x17b2,0x17b2,0x17b2,0x17b2,0x17a9,0x17a9,0x17a9,0x17a3,0x17a6,0x17a6,0x17a6,0x237,0x237,0x237,0x237,0x237, +0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x237,0x237,0x237,0x237,0x17ac,0x17ac, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x23a,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17ca,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x23a,0x17b8,0x17b8,0x17b8,0x17b8, +0x17b8,0x17b8,0x17ca,0x17bb,0x17cd,0x17d0,0x17d0,0x17c4,0x17c1,0x17c1,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, +0x23a,0x23a,0x23a,0x23a,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17be,0x17be, +0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x23a,0x23a,0x23a, +0x17dc,0x17df,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, +0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, +0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, +0x1827,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, +0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, +0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, +0x246,0x246,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9, +0x246,0x17e2,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x246, +0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8, +0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249, +0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x1800,0x1800,0x17f1,0x17eb,0x17eb,0x1800,0x17ee,0x1803, +0x1803,0x1803,0x1803,0x1806,0x1806,0x17fa,0x17f7,0x17f4,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd, +0x17fd,0x17fd,0x24c,0x17fa,0x24c,0x17f4,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x24f,0x24f,0x24f,0x24f, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x24f,0x24f,0x24f,0x24f, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x252,0x252,0x252, +0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x1770,0x1770,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x921,0x921, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b, +0x10d4,0x10d4,0x10d4,0x10d4,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1473,0x1761,0x1761,0x1761, +0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0x1278,0x1278,0x1278,0x261,0x261,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +0x261,0x261,0x261,0x261,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x264,0x264,0x264,0x264,0x264, +0x264,0x264,0x264,0x264,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0x267,0x267,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, +0x26a,0x26a,0x26a,0x26a,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x26d,0x26d,0x10ec,0x369,0x369,0x375,0xc7b,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x375,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x375,0x375,0x375, +0x375,0x36f,0x10ef,0x12c6,0x378,0x8ee,0x8f1,0x36c,0x36c,0x10ec,0x12c3,0x12c3,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x378,0x378,0x369,0x369,0x879,0x87c,0x909,0x909,0x909,0x909,0x909,0x909, +0x909,0x909,0x909,0x909,0x372,0xf4e,0xf4b,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x149a,0x10f2,0x10f2,0xea0, +0xea0,0xd6e,0xea0,0xea0,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378,0x37b,0x378,0x378,0x378,0x378,0x378,0x12c3,0x12c6, +0x36c,0x378,0x375,0x375,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, +0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xb67,0xb67,0xd7a,0xd7a,0x87f, +0xd7d,0x13b9,0x13b9,0x13b9,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, +0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, +0x459,0x459,0x459,0x459,0x45f,0x45f,0x45f,0x1107,0x1107,0x1107,0x1107,0x1107,0x45c,0x45c,0x45c,0x45c, +0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c, +0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x1104,0x1104, +0x1104,0x1104,0x1104,0x1104,0x462,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, +0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, +0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x465,0x465,0x465,0x465,0x468,0x963, +0xf9c,0xf9c,0xf9f,0xf9c,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0xf9f,0xf9c, +0xf9f,0xf9c,0xf9f,0xf9c,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, +0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, +0x47a,0x47a,0x47a,0x47a,0x657,0x657,0x65a,0x495,0x666,0x663,0x663,0x660,0x4bf,0x4bf,0x47d,0x47d, +0x47d,0x47d,0x47d,0xa95,0x669,0x4a1,0x681,0x684,0x4b6,0x669,0x4a4,0x4a4,0x495,0x4b0,0x4b0,0x657, +0x4bc,0x4b9,0x65d,0x48f,0x486,0x486,0x489,0x489,0x489,0x489,0x489,0x48c,0x489,0x489,0x489,0x480, +0x4c8,0x4c5,0x4c2,0x4c2,0x675,0x4aa,0x4a7,0x672,0x66f,0x66c,0x67e,0x498,0x67b,0x67b,0x4ad,0x4b0, +0x678,0x678,0x4ad,0x4b0,0x492,0x495,0x495,0x495,0x4b3,0x49e,0x49b,0xb7c,0xa9b,0xa9e,0xa98,0xa98, +0xa98,0xa98,0xb73,0xb73,0xb73,0xb73,0xb79,0xca8,0xca5,0xd89,0xd8c,0xb76,0xd8c,0xd8c,0xd8c,0xd8c, +0xd89,0xd8c,0xd8c,0xb70,0x4fb,0x4fb,0x513,0x693,0x4f8,0x690,0x4fb,0x510,0x4f8,0x693,0x50a,0x513, +0x513,0x513,0x50a,0x50a,0x513,0x513,0x513,0x69c,0x4f8,0x513,0x696,0x4f8,0x507,0x513,0x513,0x513, +0x513,0x513,0x4f8,0x4f8,0x4fe,0x690,0x699,0x4f8,0x513,0x4f8,0x69f,0x4f8,0x513,0x501,0x519,0x6a2, +0x513,0x513,0x504,0x50a,0x513,0x513,0x516,0x513,0x50a,0x50d,0x50d,0x50d,0x50d,0xaaa,0xaa7,0xcab, +0xd9b,0xb97,0xb9a,0xb9a,0xb94,0xb91,0xb91,0xb91,0xb91,0xb9a,0xb97,0xb97,0xb97,0xb97,0xb8e,0xb91, +0xd98,0xeac,0xeaf,0xfa5,0x1116,0x1116,0x1116,0x6a8,0x6a5,0x51c,0x51f,0x51f,0x51f,0x51f,0x51f,0x6a5, +0x6a8,0x6a8,0x6a5,0x51f,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, +0x528,0x528,0x528,0x528,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x522,0x522, +0x522,0x522,0x522,0x522,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x534,0x534,0x52e, +0x52e,0x52e,0x531,0x52b,0x52e,0x52e,0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x6b1,0x6b1,0x52b,0x52b, +0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x531,0x531,0x531, +0x52e,0x52e,0x6b4,0x52e,0x6b4,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x52e,0x52b,0x52b, +0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x52b,0x6b1,0x52b,0x52b,0x52b,0xab0,0xab0,0xab0,0xab0,0xab0, +0xab0,0xab0,0xab0,0xab0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, +0x6ba,0x537,0x6ba,0x6ba,0x53a,0x537,0x537,0x6ba,0x6ba,0x53a,0x537,0x6ba,0x53a,0x537,0x537,0x6ba, +0x537,0x6ba,0x546,0x543,0x537,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x6ba,0x6ba,0x6ba, +0x6ba,0x537,0x537,0x6ba,0x53a,0x6ba,0x53a,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6c0,0x53d,0x6ba,0x53d, +0x53d,0x537,0x537,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x6ba,0x537,0x537, +0x537,0x53a,0x537,0x537,0x53a,0x537,0x537,0x53a,0x6ba,0x53a,0x537,0x537,0x6ba,0x537,0x537,0x537, +0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, +0x6bd,0x6ba,0x53a,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x6ba,0x6ba,0x537,0x53a,0x6bd,0x6bd, +0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, +0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a, +0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x540,0x537,0x537,0xba0,0xba0, +0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0x549,0xab3,0x549,0x549, +0x549,0x549,0x549,0x549,0x555,0x552,0x555,0x552,0x549,0x549,0x549,0x549,0x549,0x549,0x6c3,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x7c5,0x7c5,0x549,0x549,0x549,0x549,0x54f,0x54f,0x549,0x549, +0x549,0x549,0x549,0x549,0x54c,0x7cb,0x7c8,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xab3,0xba6,0xab3,0xab3,0xab3, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x55e,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c, +0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xd20, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x561,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x564,0x564,0x564,0x564, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8, +0x567,0x567,0x6d8,0x6d8,0x6d8,0x6d8,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0x6de,0x6de,0x56a,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x56d,0x56d,0x56a,0x56a,0x570,0x570, +0x570,0x570,0x6de,0x6de,0x570,0x570,0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x570,0x570, +0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x6db,0x56a,0x570,0x6de,0x56a,0x56a,0x6db,0x6de, +0x6de,0x6de,0x570,0x570,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a, +0x56a,0x56a,0x6de,0x6db,0x6de,0x6db,0x56a,0x570,0x570,0x570,0x570,0x570,0x570,0x56a,0x56a,0x6db, +0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xc24,0xc24,0xbac, +0x57c,0x57c,0x57c,0x57c,0x579,0x6f0,0x6f0,0x573,0x573,0x6e4,0x573,0x573,0x573,0x573,0x6ea,0x6e4, +0x573,0x579,0x573,0x573,0xd29,0xd29,0xbb2,0xbb2,0xda7,0xabc,0x576,0x576,0x6e7,0x57f,0x6e7,0x576, +0x579,0x573,0x579,0x579,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x579, +0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x579,0x57c,0x57c,0x576,0x573,0x573,0x573,0x573, +0x6f3,0x573,0x6f3,0x573,0x573,0x573,0x573,0x573,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce, +0x7ce,0x7ce,0x7ce,0x7ce,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573, +0x6f3,0x6f0,0x582,0x6f3,0x6e4,0x6ea,0x579,0x6e4,0x6ed,0x6e4,0x6e4,0x573,0x6e4,0x6f0,0x582,0x6f0, +0xabc,0xabc,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb8,0xbb5,0xbb5,0xda1,0xe5e, +0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, +0x585,0x585,0x585,0x585,0x588,0x136e,0x136e,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x14be,0x58e,0x59a,0x58e,0x58e,0x136e,0x588,0x588,0x59a,0x59a,0x1371,0x1371,0x5a0,0x5a0,0x588,0x594, +0x588,0x588,0x594,0x588,0x594,0x588,0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x594,0x588,0x588, +0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x594, +0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x6f9,0x588,0x588,0x588,0x588,0x588,0x588, +0x594,0x588,0x588,0x594,0x588,0x588,0x588,0x588,0x136e,0x588,0x136e,0x588,0x588,0x588,0x588,0x136e, +0x136e,0x136e,0x588,0x1272,0x588,0x588,0x588,0x591,0x591,0x591,0x591,0x12f0,0x12f0,0x588,0x58b,0x597, +0x59d,0x588,0x588,0x588,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb, +0xbbe,0xbbb,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x588,0x594,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5c1,0x5c7,0x5b8,0x5bb,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3, +0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c4,0x5c7,0x5c1,0x5c4,0x5c7,0x5c1,0x5c4,0x5ca,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c4, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5ca,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5ca,0x5ca,0x5ca,0x5ca, +0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca, +0x5ca,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5cd,0x5cd,0x5cd,0x5cd, +0xfb1,0xfb1,0xfb1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x16ce,0x16ce,0x82b,0x831,0x831,0x83d, +0x83d,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x5dc,0x5dc,0x5d6,0x5dc, +0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc, +0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc, +0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9, +0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c6,0x6c6,0x6c6,0x6c6, +0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6, +0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6cf,0x6cf, +0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6d2,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf, +0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc, +0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0xc12,0x891,0x88b,0x888,0x88e,0x885,0x711,0x714, +0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x897,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x894,0x894,0x717,0x8a6,0x8a9,0x8af, +0x7d1,0x7dd,0x8c4,0x7da,0x89d,0x89a,0x89d,0x89a,0x8a3,0x8a0,0x8a3,0x8a0,0x89d,0x89a,0x7d7,0x8af, +0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x8b2,0x8bb,0x8b8,0x8b8,0x71d,0x759,0x759,0x759, +0x759,0x759,0x759,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753, +0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x720,0x73b,0x71a,0x741,0x744,0x73e,0x756,0x756,0x756, +0x756,0x756,0x756,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x720,0x73b,0x71a,0x73b,0xc15,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x126c,0x126c, +0x126c,0x126c,0x126c,0x7c2,0x7d7,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x8fa,0x8fa, +0x8fa,0x8fa,0x7e0,0x7e0,0x8b5,0x8c1,0x8c1,0x8c1,0x8c1,0x8be,0x7d4,0x8ac,0xae0,0xae0,0xae0,0xc27, +0xc45,0xc42,0xafb,0x882,0x7e6,0x7e3,0x7e6,0x7e9,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3, +0x7e3,0x7e3,0x7e3,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3, +0x7e6,0x7e6,0x7e3,0x7e3,0xc48,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2, +0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2, +0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f8,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2, +0x7f5,0x7f5,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f8,0x7f8,0x7f5,0x7f5,0x7f5,0x7f5,0x8ca, +0x8cd,0x7fb,0x7fe,0xc30,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x807,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810, +0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0xd32,0xd32,0xe61,0x80a, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0xd2c,0xd2c,0xd2c,0xd2c, +0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x816,0x816,0x816,0x816,0x816,0x816,0xd35,0xd35,0xd35,0xd35,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2, +0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, +0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, +0x816,0x816,0xd35,0xd35,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, +0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, +0x819,0x819,0x819,0x819,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x81c,0x81c,0x81c,0x81c, +0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c, +0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0xe64,0xe64, +0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, +0xe64,0xe64,0xe64,0xe64,0x10d4,0x10d4,0x10d4,0x10d4,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, +0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, +0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x822,0x81f,0x822,0x81f,0x822, +0x822,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x81f,0x822,0x81f,0x822, +0x822,0x81f,0x81f,0x822,0x822,0x822,0x81f,0x81f,0x81f,0x81f,0x1476,0x1476,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x12a8,0x12a8,0x12a8,0x12a8, +0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0xd2c,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, +0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8dc, +0x8d9,0x8dc,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, +0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x8df,0x8df,0xd35,0x95d,0x93f,0x93f,0x93f,0x93f,0x939,0x93f,0x93f,0x951,0x93f,0x93f,0x93c, +0x948,0x94e,0x94e,0x94e,0x94e,0x94e,0x951,0x939,0x945,0x939,0x939,0x939,0x930,0x930,0x939,0x939, +0x939,0x939,0x939,0x939,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x939,0x939, +0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x93c,0x930,0x939,0x930,0x939,0x930,0x94b,0x942, +0x94b,0x942,0x95a,0x95a,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, +0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, +0x969,0x969,0x969,0x969,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, +0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, +0x96c,0x96c,0x96c,0x96c,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, +0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, +0x96f,0x96f,0x96f,0x96f,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x972,0x972,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x975,0x975,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0xa0e,0xa0e,0xf96,0xa0e, +0xa0e,0xa0e,0xa11,0xa0e,0xf96,0xa0e,0xa0e,0xf8d,0xa08,0x9fc,0x9fc,0x9fc,0x9fc,0xa0b,0x9fc,0xf7b, +0xf7b,0xf7b,0x9fc,0x9ff,0xa08,0xa02,0xf81,0xf90,0xf90,0xf7b,0xf7b,0xf96,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xa14,0xa14,0xa05,0xa05,0xa05,0xa05,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0b,0xa0b,0x9fc,0x9fc,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2c,0xa32,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0x110d, +0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110a,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa68,0xa68,0xa68,0xa6b, +0xa6b,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, +0xa50,0xa50,0xa65,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa65,0xa65,0xa68,0xa68,0xa68,0xa68, +0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, +0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa74,0xa74,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, 0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95, -0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95, -0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xac2,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa8c,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3, +0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xba6, +0xba6,0xba6,0xba6,0xba6,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, 0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xac5,0xac5,0xc0c,0xc0c,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, -0xac5,0xac5,0xac5,0xac5,0xc0c,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, +0xabf,0xabf,0xabf,0xabf,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, 0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, -0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0x1485, -0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xc96,0xc96,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, -0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, -0xaec,0xaec,0xc93,0xc93,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xae6,0xae6,0xae6,0xae6,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaec,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaef,0xaef,0xc36,0xc36, 0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, -0xaef,0xaef,0xaef,0xaef,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xb01,0xb01,0xb01,0xb01,0xb01,0xaf8,0xb04,0xb0a,0xb0a,0xb0a,0xafe,0xafe, -0xafe,0xb07,0xafb,0xafb,0xafb,0xafb,0xafb,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb01,0xb01,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xb0a,0xb0a,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb01,0xb01,0xb01,0xb01,0xb01, -0xb01,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0x1683,0x1683, -0xb16,0xb0d,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb0d,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, +0xc36,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xb10,0xb10,0xb10,0xb10, 0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb19,0xb19,0xb19,0xb19, +0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0x14c4,0xb19,0xb19,0xb19,0xb19, +0xb19,0xb19,0xcbd,0xcbd,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, +0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xcba,0xcba, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, +0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, 0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, -0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb1c, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, -0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb79,0xb7c,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, -0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xc84,0xc87,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71, -0xd71,0xd71,0xd71,0xd71,0xe8b,0xe8b,0xe8b,0xe8b,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, -0xb8e,0xb8e,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xd77,0xd7d,0xd77,0xd74,0xd77,0xd77, -0xd74,0xd77,0xd74,0xd77,0xd77,0xf7e,0x1218,0x1218,0xd86,0xd86,0xd86,0xd86,0xd86,0xd8c,0xd89,0xe9d, -0xe9d,0xe9d,0xe9d,0x1383,0xf90,0x1383,0x12d8,0x12d8,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4, -0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbf4,0xbf1,0xbf4,0xbf1,0xbf4,0xbf1, -0x10a7,0x10a4,0xf96,0xf93,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7, -0xbc7,0xbc7,0xbc7,0xbc7,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbca,0xbca,0xbca,0xbca,0xbcd,0xbcd,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbfa,0xbf7,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6, -0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbd6,0xbd3, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbd0,0xbd0, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbdf,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbdf,0xbdf,0xbdf,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbdc,0xbd9,0xbd9,0xbd9,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc8d,0xc90,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd7d,0xd7d, -0xd74,0xd74,0xd74,0xd74,0xd77,0xd77,0xe8e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e, -0xf7e,0x10ef,0x1224,0x121b,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0xcb4,0xcb4,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcba,0xcba,0xcba,0xcba,0xcba,0xcb7, -0xccc,0xccc,0xccc,0xcc6,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcc6, -0xccc,0xccc,0xccc,0xccc,0xcc0,0xcc0,0xcc9,0xcc9,0xcc9,0xcc9,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcc3, -0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd8f,0xd92,0xd92,0xd92, -0xd92,0xd92,0xd92,0xd92,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc, -0xccc,0xccc,0xcc6,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc, -0xccc,0xcc0,0xcc0,0xcc0,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3, -0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3, -0xcc3,0xcc3,0xcc3,0xcc3,0xccf,0xccf,0xccf,0xccf,0xccf,0xcd2,0xcd2,0xcd2,0xccf,0xccf,0xccf,0xccf, -0xccf,0xccf,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xf9c, -0xf9c,0xf99,0xf99,0xf99,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5, -0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5, -0xcd5,0xcd5,0xcd5,0xcd5,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb22,0xb2e,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb31,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb2b,0xb2b,0xb34,0xb34,0xb34,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0xb40,0xb37,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6, +0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba3,0xba6, +0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xcae, +0xcb1,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xeb8,0xeb8,0xeb8,0xeb8, +0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, +0xcb4,0xcb4,0xda4,0xe5b,0xda4,0xda4,0xda4,0xda4,0xda1,0xda4,0xda1,0xda4,0xda4,0xfab,0x1242,0x1242, +0xdad,0xdad,0xdad,0xdad,0xdad,0xdb3,0xdb0,0xeca,0xeca,0xeca,0xeca,0x13bf,0xfbd,0x13bf,0x12fc,0x12fc, +0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb, +0xbeb,0xbeb,0xc1b,0xc18,0xc1b,0xc18,0xc1b,0xc18,0x10ce,0x10cb,0xfc3,0xfc0,0xbee,0xbee,0xbee,0xbee, +0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbf1,0xbf1,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4,0xbf4,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xc21,0xc1e,0xbfd, +0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd, +0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbfd,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbf7,0xbf7,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc06,0xc06,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc03,0xc00,0xc00,0xc00,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xcb7,0xd26,0xda1,0xda1, +0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xe5b,0xe5b,0xda1,0xda1,0xda1,0xda1,0xda4,0xda4,0xebb,0xfab, +0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0x126f,0x126f,0x1245,0xcdb,0xcdb,0xcdb,0xcdb, 0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, -0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, -0xd9b,0xd9b,0xd9b,0xd9b,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e, -0xd9e,0xd9e,0xd9e,0xd9e,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xe5b,0xe5b,0xdb3,0xdb3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xfa8, -0xfa8,0xfa8,0xfa8,0xfa8,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5, -0xfa5,0xfa5,0xfa5,0xfa5,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf, -0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf, -0xdc2,0xdbf,0xdc2,0xdbf,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce, -0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce, -0xdce,0xdce,0xdce,0xdce,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xdd4,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xea6,0xea6,0xea6,0xea6,0xfab, -0xfab,0xfab,0xfab,0xfab,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, +0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xce1,0xce1,0xce1,0xce1,0xce1,0xcde,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xcf0,0xcf0, +0xcf0,0xcf0,0xce4,0xce4,0xce4,0xce4,0xce4,0xcea,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9, +0xdb9,0xdb9,0xdb9,0xdb9,0xdb6,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xce7,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcf6,0xcf6,0xcf6,0xcf6, +0xcf6,0xcf9,0xcf9,0xcf9,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc, +0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0x10d7,0x10d7,0xfc6,0xfc6,0xfc6,0xcfc,0xcfc,0xcfc,0xcfc, +0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc, +0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd0b,0xd0b,0xd0b,0xd0b, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd23,0xd23,0xd23,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xdc2,0xdc2,0xdc2,0xdc2, +0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2, +0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xe88,0xe88,0xdda,0xdda, +0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfcf,0xfcf,0xfcf,0xfcf, +0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xde9,0xde6,0xde9,0xde6, +0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6, +0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xdf5,0xdf5,0xdf5,0xdf5, 0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xdfe,0xdfe,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, -0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, -0xe07,0xe07,0xe07,0xe01,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04, -0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe07, -0xe07,0xe07,0xe07,0xe07,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, -0xe10,0xe10,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0a,0xe13,0xfb7,0xfb1,0xfc0,0xfae, -0xe10,0xe10,0xfae,0xfae,0xe25,0xe25,0xe16,0xe25,0xe25,0xe25,0xe1c,0xe25,0xe25,0xe25,0xe25,0xe16, +0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xed3,0xed3,0xed3,0xed3,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe25,0xe25,0xe25,0xe25, 0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25, -0xe25,0xe25,0xe25,0xe25,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58, -0xe58,0xe58,0xe58,0xe58,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, -0x10b3,0x10b3,0x10b3,0x10b3,0xea0,0xea0,0xea0,0xea0,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99, -0xf99,0xf99,0xf99,0xf99,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f, -0xf9f,0xf9f,0xf9f,0xf9f,0xec1,0xec1,0xec1,0xec1,0xed3,0xedc,0xedf,0xedc,0xedf,0xedc,0xedf,0xedc, -0xedf,0xedc,0xedf,0xedc,0xedc,0xedc,0xedf,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc, -0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xec4,0xed3,0xec1,0xec1, -0xec1,0xec1,0xec1,0xed6,0xec1,0xed6,0xed3,0xed3,0xee8,0xee5,0xee8,0xee8,0xee8,0xee5,0xee5,0xee8, -0xee5,0xee8,0xee5,0xee8,0xee5,0xfd2,0xfd2,0xfd2,0x110d,0xfc9,0xfd2,0xfc9,0xee5,0xee8,0xee5,0xee5, -0xfc9,0xfc9,0xfc9,0xfc9,0xfcc,0xfcf,0x110d,0x110d,0xeeb,0xeeb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfdb,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00, -0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00, -0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, -0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0xf06,0xf06,0xf06,0xf06, -0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06, -0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf4e,0xf69,0xf60,0xf5d, -0xf5d,0xf69,0xf69,0xf60,0xf60,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf69,0xf69,0xf69,0xf4e,0xf4e,0xf4e, -0xf4e,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf4e,0xf60, -0xf63,0xf4e,0xf4e,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf51,0xf69,0xf66,0xf5a,0xf5a,0xf5a,0xf5a, -0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0x10d4,0x10d4,0x10d1,0x10ce,0xf57,0xf57,0xf81,0xf81,0xf81,0xf81, -0x1224,0x1224,0x121b,0x121b,0x1221,0x1218,0x1218,0x1218,0x1218,0x121b,0x12c3,0x1221,0x121b,0x1221,0x1218,0x1221, -0x1224,0x1218,0x1218,0x1218,0x121b,0x121b,0x1218,0x1218,0x121b,0x1218,0x1218,0x121b,0xf9f,0xf9f,0xf9f,0xf9f, -0xf9f,0xf99,0xf99,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0x1491,0x1491,0x1491,0xf9c,0xf99,0xf99,0xf99, -0xf99,0x1233,0x1230,0x1230,0x1230,0x1230,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xfbd,0xfbd,0xfba,0xfb4, -0xfba,0xfb4,0xfba,0xfb4,0xfba,0xfb4,0xfb1,0xfb1,0xfb1,0xfb1,0xfc6,0xfc3,0xfb1,0x110a,0x138f,0x1392, -0x1392,0x138f,0x138f,0x138f,0x138f,0x138f,0x1395,0x1395,0x14ac,0x14a0,0x14a0,0x149d,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfd8,0xfd5,0xfd5,0xfe4,0xfdb,0x12e7,0x12e4,0x168c,0x12e7,0x12e4,0x139e,0x139b, -0x14af,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfde,0xfdb,0xfdb,0xfdb, -0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfe4,0xfdb,0xfe7,0xfe7,0xfed,0xff3, -0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3, -0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xfed,0xfe7,0xfe7, -0xfe7,0xfe7,0xfed,0xfed,0xfe7,0xfe7,0xff0,0x13a7,0x13a4,0x13a4,0xff3,0xff3,0xfea,0xfea,0xfea,0xfea, -0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x1008,0x1008,0x1008,0x1008, -0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008, -0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1011,0x1011,0x1011,0x1011, -0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011, -0x1011,0x1011,0x1011,0x1011,0x1014,0x1014,0x1014,0x1017,0x1014,0x1014,0x101a,0x101a,0x101d,0x101d,0x101d,0x101d, +0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe2e,0xe2e,0xe2e,0xe2e, +0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e, +0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe28,0xe2b,0xe2b,0xe2b,0xe2b, +0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b, +0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe37,0xe37,0xe37,0xe37, +0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34, +0xe34,0xe34,0xe31,0xe3a,0xfe1,0xfdb,0xfea,0xfd8,0xe37,0xe37,0xfd8,0xfd8,0xe4c,0xe4c,0xe3d,0xe4c, +0xe4c,0xe4c,0xe43,0xe4c,0xe4c,0xe4c,0xe4c,0xe3d,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, +0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe85,0xe85,0xe85,0xe85, +0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0x10e0,0x10e0,0x10e0,0x10e0, +0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0xecd,0xecd,0xecd,0xecd, +0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9, +0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xeee,0xeee,0xeee,0xeee, +0xf00,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf09,0xf09,0xf0c,0xf09, +0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, +0xf09,0xf09,0xf09,0xf09,0xef1,0xf00,0xeee,0xeee,0xeee,0xeee,0xeee,0xf03,0xeee,0xf03,0xf00,0xf00, +0xf15,0xf12,0xf15,0xf15,0xf15,0xf12,0xf12,0xf15,0xf12,0xf15,0xf12,0xf15,0xf12,0xffc,0xffc,0xffc, +0x1137,0xff3,0xffc,0xff3,0xf12,0xf15,0xf12,0xf12,0xff3,0xff3,0xff3,0xff3,0xff6,0xff9,0x1137,0x1137, +0xf18,0xf18,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x1005,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, +0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, +0xf2d,0xf2d,0xf2d,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x14f7,0x14f7,0x14f7,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, +0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, +0xf33,0xf33,0xf33,0xf33,0xf7b,0xf96,0xf8d,0xf8a,0xf8a,0xf96,0xf96,0xf8d,0xf8d,0xf8a,0xf8a,0xf8a, +0xf8a,0xf8a,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xf7b,0xf7b,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96, +0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf8d,0xf90,0xf7b,0xf7b,0xf93,0xf93,0xf93,0xf93,0xf93, +0xf93,0xf7e,0xf96,0xf93,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0x1101,0x1101, +0x10fe,0x10fb,0xf84,0xf84,0xfae,0xfae,0xfae,0xfae,0x126f,0x126f,0x1245,0x1245,0x124b,0x1242,0x1242,0x1242, +0x1242,0x1245,0x136b,0x124b,0x1245,0x124b,0x1242,0x124b,0x126f,0x1242,0x1242,0x1242,0x1245,0x1245,0x1242,0x1242, +0x1245,0x1242,0x1242,0x1245,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9, +0xfc9,0x14d0,0x14d0,0x14d0,0x10d7,0xfc6,0xfc6,0xfc6,0xfc6,0x127b,0x1254,0x1254,0x1254,0x1254,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0xfe7,0xfe7,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfdb,0xfdb, +0xfdb,0xfdb,0xff0,0xfed,0xfdb,0x1134,0x13cb,0x13ce,0x13ce,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13d1,0x13d1, +0x14eb,0x14df,0x14df,0x14dc,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x1002,0xfff,0xfff,0x100e, +0x1005,0x130b,0x1308,0x16da,0x130b,0x1308,0x13da,0x13d7,0x14ee,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee, +0x14f4,0x14ee,0x14f4,0x14ee,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x100e,0x1005,0x100e,0x1005,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x100e,0x1005,0x100e, +0x1005,0x100e,0x100e,0x1005,0x1011,0x1011,0x1017,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, 0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, -0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1029,0x1020,0x102f,0x102c,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x12ed,0x12ea,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x103e,0x10bc,0x1032,0x1032,0x1032,0x1038, -0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x1035,0x1035,0x1038,0x1044,0x1041,0x103b,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x14c4,0x14c1,0x14c4,0x14c1, -0x14c7,0x14c7,0x1695,0x13ad,0x104d,0x104d,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, +0x101d,0x101d,0x101d,0x101d,0x101d,0x1017,0x1011,0x1011,0x1011,0x1011,0x1017,0x1017,0x1011,0x1011,0x101a,0x13e3, +0x13e0,0x13e0,0x101d,0x101d,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x13e6,0x13e6, +0x13e6,0x13e6,0x13e6,0x13e6,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, +0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, +0x1032,0x1032,0x1032,0x1032,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b, +0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103e,0x103e,0x103e,0x1041, +0x103e,0x103e,0x1044,0x1044,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, +0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, +0x1047,0x1047,0x1047,0x1047,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, +0x1053,0x104a,0x1059,0x1056,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, 0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d, -0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x1056,0x1056,0x1056,0x1056,0x1056,0x1059,0x1059,0x1059,0x10b0,0x1062, -0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071, -0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f, -0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x109b,0x109b,0x109b,0x109b,0x109e,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f, -0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x1116,0x1116,0x1119,0x1119,0x111f,0x1116,0x1116,0x1116,0x1116,0x1116, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, -0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1146,0x114c, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x1167,0x1167,0x1167,0x1176,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x116a,0x1176,0x1176,0x1167,0x1167,0x1167,0x1167,0x1176,0x1176,0x1167,0x1176,0x1176,0x1176, -0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x118b,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1182,0x1182,0x1182,0x1188,0x1185,0x14cd,0x14d0,0x14d3,0x14d3, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x118e,0x119a,0x118e,0x118e,0x118e,0x11a3,0x11a3,0x118e,0x118e,0x11a3,0x119a,0x11a3,0x11a3,0x119a,0x118e,0x1191, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5, -0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5, -0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd, -0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11ca,0x11ca,0x11ca, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1203,0x1200,0x1200,0x1200,0x1200, -0x11fd,0x11fd,0x11fd,0x11f1,0x11f1,0x11f1,0x11f1,0x11fd,0x11fd,0x11f7,0x11f4,0x11fa,0x11fa,0x11eb,0x1206,0x1206, -0x11ee,0x11ee,0x11fd,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1203,0x1200,0x1203,0x1200,0x1200,0x1200, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x120f,0x120f,0x120f,0x120c,0x120c,0x120c,0x1209,0x1209,0x1209,0x1209,0x120c,0x1209,0x1209,0x1209,0x120f,0x120c, -0x120f,0x120c,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x120f,0x120c,0x120c, -0x1209,0x1209,0x1209,0x1209,0x121b,0x121b,0x12c0,0x1218,0x12c0,0x12c0,0x12c0,0x12c0,0x1218,0x121e,0x1224,0x1218, -0x1218,0x1218,0x1218,0x1218,0x121e,0x1221,0x1224,0x1224,0x1221,0x1224,0x1218,0x1221,0x1221,0x1227,0x1224,0x1218, -0x1218,0x1224,0x121b,0x121b,0x1356,0x1356,0x1245,0x1356,0x1356,0x1356,0x1245,0x1356,0x1356,0x1356,0x123f,0x123f, -0x123f,0x123f,0x123f,0x134d,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1242,0x1353,0x1353,0x1353,0x1353, -0x1353,0x1353,0x1353,0x1242,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x130b,0x130b,0x1320,0x1311,0x1320,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323, -0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323, -0x1323,0x1323,0x1323,0x1323,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1332,0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1335,0x1335,0x1335,0x1332,0x1335,0x1332,0x1335, -0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1332,0x1335,0x1332,0x1332,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x14df,0x14df,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14e8, -0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x16a1,0x16a1,0x16a1,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x16a1,0x16a1, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e8,0x14e8,0x14e8,0x14df,0x14df,0x14e8,0x14e8, -0x1335,0x1335,0x1335,0x1338,0x1338,0x14eb,0x1335,0x1335,0x1335,0x1335,0x1338,0x14ee,0x14e8,0x14e8,0x14e8,0x16a1, -0x16a1,0x16a1,0x16a1,0x16a1,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x14e2,0x14e2,0x14e8,0x14eb,0x14e8,0x14e2,0x14e8,0x16a1,0x16a1,0x16a1,0x16a4,0x16a4,0x16a4,0x16a4,0x16a4, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8, -0x1335,0x14e8,0x1338,0x1338,0x1335,0x1335,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338, -0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1338,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1338,0x1338,0x1338,0x1338, -0x1338,0x1338,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1338,0x1338,0x1338, -0x1335,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14eb,0x1335,0x1335,0x1335, -0x1335,0x14e8,0x14e2,0x16a1,0x13b3,0x13b3,0x13b3,0x13b3,0x14df,0x14df,0x14df,0x14df,0x14df,0x14e5,0x14e8,0x16a1, -0x16a1,0x16a1,0x16a1,0x169e,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e8,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x14e8,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14e8,0x1335, -0x1335,0x1335,0x1335,0x1335,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, -0x133b,0x133b,0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x13b6,0x133b,0x13b6,0x133b,0x13b6,0x133b,0x13b6, -0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x13b6,0x13b6,0x133b,0x133b,0x133b,0x133b, -0x13b6,0x133b,0x13b6,0x13b6,0x133b,0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, -0x133b,0x133b,0x133b,0x133b,0x133b,0x14f4,0x14f4,0x16a7,0x16a7,0x133e,0x133e,0x133e,0x133b,0x133b,0x133b,0x133e, -0x133e,0x133e,0x133e,0x133e,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1344,0x1344,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, +0x1050,0x1050,0x1050,0x1050,0x1311,0x130e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x1068,0x10e9,0x105c,0x105c,0x105c,0x1062,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, +0x105f,0x105f,0x1062,0x106e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x106b,0x1065,0x1503,0x1500,0x1503,0x1500,0x1506,0x1506,0x16e3,0x13e9,0x1077,0x1077,0x107a,0x107a, +0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a, +0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x1077,0x1077,0x1077,0x1077, +0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1080,0x1080, +0x1080,0x1080,0x1080,0x1083,0x1083,0x1083,0x10dd,0x108c,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, +0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086, +0x1086,0x1086,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, +0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10c5,0x10c5,0x10c5,0x10c5,0x10da,0x10c5,0x10c5,0x10c5, +0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, +0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, +0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1140,0x1140, +0x1143,0x1143,0x1149,0x1140,0x1140,0x1140,0x1140,0x1140,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1170,0x1176,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1191,0x1191,0x1191,0x11a0,0x11a6,0x11a6,0x11a6,0x11a6, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x1194,0x11a0,0x11a0,0x1191,0x1191, +0x1191,0x1191,0x11a0,0x11a0,0x1191,0x11a0,0x11a0,0x11a0,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2, +0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b5,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11ac, +0x11ac,0x11ac,0x11b2,0x11af,0x150c,0x150f,0x1512,0x1512,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11b8,0x11c4,0x11b8,0x11b8,0x11b8,0x11cd,0x11cd,0x11b8, +0x11b8,0x11cd,0x11c4,0x11cd,0x11cd,0x11c4,0x11b8,0x11bb,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, +0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, +0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, +0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, +0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f4,0x11f4,0x11f4,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122a,0x122d,0x122a,0x122a,0x122a,0x122a,0x1227,0x1227,0x1227,0x121b,0x121b,0x121b,0x121b,0x1227, +0x1227,0x1221,0x121e,0x1224,0x1224,0x1215,0x1230,0x1230,0x1218,0x1218,0x1227,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122d,0x122a,0x122d,0x122a,0x122a,0x122a,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1239,0x1239,0x1236,0x1236,0x1236,0x1233,0x1233, +0x1233,0x1233,0x1236,0x1233,0x1233,0x1233,0x1239,0x1236,0x1239,0x1236,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1236,0x1236,0x1233,0x1233,0x1233,0x1233,0x1245,0x1245,0x12ed,0x1242, +0x12ed,0x12ed,0x12ed,0x12ed,0x1242,0x1248,0x126f,0x1242,0x1242,0x1242,0x1242,0x1242,0x1248,0x124b,0x126f,0x126f, +0x124b,0x126f,0x1242,0x124b,0x124b,0x124e,0x126f,0x1242,0x1242,0x126f,0x1245,0x1245,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1257,0x1257,0x1257,0x1257,0x1377,0x1356,0x1260,0x1377,0x1377,0x1377, +0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x180f,0x180f,0x180f,0x180f,0x180f,0x135f,0x135f,0x1266,0x135f, +0x135f,0x135f,0x1266,0x135f,0x135f,0x135f,0x1260,0x1260,0x1260,0x1260,0x1260,0x1359,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x135c,0x1263,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1263,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x132f,0x132f,0x132f,0x132f, +0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f, +0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1344,0x1335,0x1344,0x1347, 0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, -0x1347,0x1347,0x1347,0x1347,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x13c8,0x13c8,0x13c8,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13da,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f5,0x13f5,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x1404,0x1404,0x1410,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416, -0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416, -0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1410,0x1410,0x1410,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404, -0x1404,0x1404,0x1404,0x1410,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1434,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df, -0x14e8,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e8,0x14e8, -0x14e8,0x14e8,0x14e2,0x14e2,0x14ee,0x14e2,0x14e2,0x14e2,0x14e2,0x14f1,0x14f1,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a, -0x152a,0x152a,0x152a,0x152a,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530, -0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530, -0x1530,0x1530,0x1530,0x1530,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1563,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x1575, -0x157e,0x157e,0x157e,0x157e,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x1593,0x159c,0x159c,0x159c, -0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c, -0x159c,0x159c,0x159c,0x159c,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a5,0x15a5,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b4,0x15b4,0x15b4,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15b4, -0x15b4,0x15a8,0x15b4,0x15ab,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, -0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, -0x15db,0x15d8,0x15d8,0x15d8,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15ea,0x15ea,0x15ea,0x15e7,0x15e7,0x15e7, -0x15e4,0x15e4,0x15e4,0x15e4,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ff,0x15ff,0x15f3,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605, -0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1602,0x1602,0x1602,0x1602,0x1602, -0x1602,0x1602,0x1602,0x1602,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x1638,0x1647,0x1647,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1647,0x1638,0x164a, -0x164a,0x1638,0x164a,0x1638,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, -0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, -0x1656,0x1656,0x1656,0x1656,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16f5,0x16f2,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb, -0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb, -0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x171c,0x171c,0x171c,0x171c,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x1719,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728, -0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728, -0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0,0,0,0 +0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1335,0x1335,0x1335,0x1335, +0x1335,0x1335,0x1335,0x1335,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, +0x1389,0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x138c,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c, +0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389, +0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x151e,0x151e, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x1527,0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1764,0x1764,0x1764, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x1764,0x1764,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1527, +0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x1527,0x1527,0x138c,0x138c,0x1392,0x1395,0x1395,0x1698,0x138c,0x1392, +0x138c,0x138c,0x1395,0x1530,0x152d,0x1527,0x1527,0x1764,0x1764,0x1764,0x1764,0x1764,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1698,0x1527,0x1521,0x1527, +0x1764,0x1764,0x1764,0x1767,0x1767,0x1767,0x1767,0x1767,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x1527,0x1395,0x1395,0x138c,0x138c,0x1395,0x1395, +0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1398,0x1398,0x1398,0x1398,0x1392,0x1392, +0x1392,0x1392,0x1395,0x1392,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c, +0x1395,0x138c,0x138c,0x138c,0x138c,0x1395,0x1395,0x1395,0x138c,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138f, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1698,0x138c,0x138c,0x138c,0x138c,0x1527,0x1521,0x1764, +0x13ef,0x13ef,0x13ef,0x13ef,0x151e,0x151e,0x151e,0x151e,0x151e,0x1524,0x1527,0x1764,0x1764,0x1764,0x1764,0x16ec, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1527,0x152d,0x1530,0x1527,0x1527, +0x1527,0x1527,0x1818,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1527,0x1521,0x1521,0x1521,0x1521, +0x152a,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521,0x1527,0x151e,0x151e,0x151e,0x151e, +0x151e,0x151e,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479, +0x139b,0x1479,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x1479, +0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479,0x1479,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x169e,0x169e,0x176a,0x176a,0x139e,0x139e,0x139e, +0x139b,0x139b,0x139b,0x139e,0x139e,0x139e,0x139e,0x139e,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, +0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1797,0x1797,0x1794,0x16ef,0x13f5,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x1539,0x1401,0x1401,0x1401,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, +0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, +0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x143d,0x143d,0x1449,0x144f,0x144f,0x144f,0x144f,0x144f, +0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, +0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1449,0x1449,0x1449,0x143d,0x143d, +0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x1449,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, +0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, +0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1521,0x1521,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x151e,0x151e, +0x151e,0x151e,0x151e,0x151e,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527, +0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1521,0x1521,0x1530,0x1521,0x1521,0x1521,0x1521,0x169b,0x169b,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1815,0x1527,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, +0x1527,0x1521,0x1521,0x1521,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1563,0x1563,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x159c,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, +0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15ae, +0x15b7,0x15b7,0x15b7,0x15b7,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15cc,0x15d5,0x15d5,0x15d5, +0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, +0x15d5,0x15d5,0x15d5,0x15d5,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x15ed,0x15ed,0x15ed,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15ed, +0x15ed,0x15e1,0x15ed,0x15e4,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, +0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, +0x1614,0x1611,0x1611,0x1611,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, +0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1623,0x1623,0x1623,0x1620,0x1620,0x1620, +0x161d,0x161d,0x161d,0x161d,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1638,0x1638,0x162c,0x1629,0x1629, +0x1629,0x1629,0x1629,0x1629,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, +0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163b,0x163b,0x163b,0x163b,0x163b, +0x163b,0x163b,0x163b,0x163b,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1671,0x1680,0x1680,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1680,0x1671,0x1683, +0x1683,0x1671,0x1683,0x1671,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, +0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, +0x168f,0x168f,0x168f,0x168f,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x16f5,0x16f5,0x16f5,0x16f5,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1737,0x1734,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, +0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, +0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758,0x1758,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x17b5,0x17b5,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, +0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, +0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1800,0x1800,0x1800, +0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0,0,0,0 }; static const UTrie2 propsVectorsTrie={ propsVectorsTrie_index, - propsVectorsTrie_index+4640, + propsVectorsTrie_index+4844, NULL, - 4640, - 22812, + 4844, + 23696, 0xa40, - 0x12a0, + 0x136c, 0x0, 0x0, 0x110000, - 0x6b38, + 0x6f78, NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint32_t propsVectors[5931]={ -0x67,0,0,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,0,0,0xc67, -0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0,0,0x1267,0, -0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,0x1767,0,0, -0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,0,0,0x1f67, -0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,0,0x2567,0, -0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,0x2b67,0,0, -0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67, -0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4367,0, -0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0, -0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867, -0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000, -0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0, -0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867, -0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0, -0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0, -0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67, -0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0, -0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0, -0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367, -0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0, -0,0xa967,0,0,0xaa67,0,0,0xab67,0,0,0xac67,0,0,0xad67,0,0, -0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367,0,0,0xb467, -0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0, -0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0, -0xc167,0,0,0xc267,0,0,0xc367,0,0,0xc467,0,0,0xc667,0,0,0xc767, -0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0,0,0xcc67,0, -0,0xcd67,0,0,0xcf67,0,0,0xd067,0,0,0xd267,0,0,0xd367,0,0, +static const uint32_t propsVectors[6195]={ +0x67,0,0,0x67,0,0xe00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67, +0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0, +0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0, +0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67, +0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0, +0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000, +0x2b67,0,0,0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67, +0,0,0x3b67,0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0, +0,0x4367,0,0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0, +0x5067,0,0,0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767, +0,0,0x5867,0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0, +0,0x6067,0x80000,0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0, +0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767, +0,0,0x7867,0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0, +0,0x7f67,0,0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0, +0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67, +0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0, +0,0x9267,0,0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0, +0x9867,0,0,0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167, +0,0,0xa367,0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0, +0,0xa867,0,0,0xa967,0,0,0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,0, +0xad67,0,0,0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367, +0,0,0xb467,0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0, +0,0xba67,0,0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0, +0xc067,0,0,0xc167,0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667, +0,0,0xc767,0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0, +0,0xcc67,0,0xe00000,0xcf67,0,0xe00000,0xd067,0,0xe00000,0xd267,0,0,0xd367,0,0, 0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,0xd967,0,0,0xda67, 0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,0, -0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0,0xe467,0,0, +0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0xe00000,0xe467,0,0, 0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,0xea67, 0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,0, 0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,0, -0xf867,0,0,0xf967,0,0,0xfa67,0,0,0xfb67,0,0,0xfc67,0,0,0xfd67, +0xf867,0,0,0xf967,0,0,0xfa67,0,0xe00000,0xfb67,0,0,0xfc67,0,0,0xfd67, 0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,0, -0,0x10567,0,0,0x10667,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0,0xe00000, -0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067, -0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001, -0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008,0x1710000, -0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319, -0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100, -0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400, -0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x201000,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600, -0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010, -0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002, -0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e, -0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x2802400,0x962460,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100, -0x220400,0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000, -0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13, -0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100, -0x2633800,0x11000c00,0,0x218820,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400, -0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02, -0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400, -0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401, -0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004, -0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400, -0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460, -0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f, -0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100, -0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540, -0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524, -0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400, -0x962460,0x11001615,0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460, -0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900, -0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010, -0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000, -0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18, -0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d00,0x4000000,0x200000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100, -0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402, -0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e, -0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001, -0x440002,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002, -0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800, -0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010, -0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e, -0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900, -0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000, -0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002, -0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00, -0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000, -0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000, -0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00, -0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000, -0x10200000,0x11003000,0x24000000,0x30e00000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000, -0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600, -0x24000000,0x200000,0x11003600,0x24000000,0x10200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000, -0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700,0x24000000,0x30200000,0x11003700,0x24000000,0x90e00000,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000, -0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800, -0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x90e00000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020, -0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000, -0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102, -0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100, -0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006, -0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200, -0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020, -0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400, -0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419, -0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00, -0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400, -0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800, -0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000, -0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000, -0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900, -0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000, -0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006, -0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00, -0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000, -0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000, -0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700, -0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000, -0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a, -0x11045712,0x7c00100,0x23040a,0x11045712,0x7c80100,0x23040a,0x11045716,0x7c00100,0x230c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700, -0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006, -0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011, -0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700, -0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140, -0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000, -0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100, -0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010, -0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000, -0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119, -0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000, -0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001, -0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12, -0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900, -0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01, -0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412, -0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300, -0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010, -0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400, -0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002, -0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c, -0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e, -0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f33,0xc000010,0x448000,0x11400f43,0xc000010,0x448000,0x11403d8a,0x4000000, -0xe00000,0x11445784,0x4000004,0x120000a,0x11445784,0x4000008,0x81000a,0x11445784,0x4000008,0x141000a,0x11445784,0x4000010,0x87000a,0x11445784,0xc000010,0x84800a, -0x1144578d,0x3802500,0x126246a,0x1144578d,0x7c00d00,0x2530c0a,0x114a3d84,0x24000000,0x810000,0x114a3d84,0x24000000,0x1410000,0x114a3d84,0x24000008,0x810000,0x114a3d84, -0x24000008,0x1410000,0x114a3d84,0x24000010,0x870000,0x114a3d84,0x2c000010,0x848000,0x114a3d8a,0x4000000,0xe00000,0x114a3d8a,0x24000000,0xe00000,0x114a3d8a,0x24000002, -0x1200000,0x114a3d8a,0x24000002,0x10e00000,0x114a3d8a,0x24000008,0x810000,0x114a3d8a,0x24000008,0x1410000,0x114a3d8d,0x7c00900,0x930c00,0x114a3d8d,0x7c00900,0xe30c00, -0x114a3d8f,0x7c00300,0xe30000,0x114a3e8d,0x7000400,0x1200c02,0x114a3f84,0x4000004,0x1200000,0x114a3f8d,0x7c00d00,0x2530c00,0x114a428f,0x4000000,0xe00000,0x114a428f, -0x4000000,0xe0000f,0x114a448a,0x4000000,0xe00002,0x114a448a,0x4000000,0xe00003,0x114a448a,0x4000000,0x10e00003,0x114a458a,0x4000000,0xe00002,0x114a458a,0x4000000, -0xe0000d,0x11800906,0x2802400,0x962460,0x11800c16,0x2802100,0x962460,0x11800c16,0x2802500,0x962460,0x11800f1c,0x2802400,0x962460,0x11800f28,0x2802400,0x962460, -0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d92,0x2802400,0x962460,0x118a3e8d,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00c1a, -0x6800000,0x1329800,0x11c00f57,0x6800000,0x1329800,0x11c0105c,0x6800000,0x1329800,0x11c01160,0x6800000,0x1329800,0x11c01264,0x6800000,0x1329800,0x11c01468,0x4000000, -0x200000,0x11c01468,0x6800000,0x1329800,0x11c01468,0x7c00100,0x230400,0x11c0511a,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460, -0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27, -0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000, -0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800, -0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00, -0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000, -0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000, -0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519, -0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000, -0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000, -0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218820,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22, -0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500, -0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540, -0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27, -0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000, -0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000, -0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b, -0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000, -0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400, -0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417, -0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100, -0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x4000000,0x200000, -0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b, -0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc4000b,0x30002800,0x24000000, -0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000, -0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600, -0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400, -0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002, -0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829, -0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402573,0x4000010,0x400000,0x30402573,0x4000010,0xb70000,0x30402573,0xc000010, -0xb48000,0x304a3d8a,0x4000000,0xe00000,0x30800c16,0x2802100,0x962460,0x30c01c6d,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402, -0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09, -0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000, -0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005, -0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x80000,0x918820,0x31006000,0x180000,0x918820,0x310a5e11, -0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100, -0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400, -0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800, -0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000, -0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405, -0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500, -0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x10200000,0x32003600,0x24000020,0x30200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000, -0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400, -0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b, -0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100, -0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000, -0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00, -0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000, -0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3d11,0x7c00100,0x1230400, -0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11, -0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x3240636f,0xc000010,0x448000,0x324a3d8f,0x4000000,0x10e00000,0x324a3d8f,0x7c00100,0x1230400,0x324a3f8d,0x4000002, -0x1200c00,0x324a538a,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000, -0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218820,0x40000c02,0x2802100,0x962460,0x40000c02, -0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100, -0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460, -0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615, -0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002, -0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000, -0x40003700,0x24000000,0x30200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30, -0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010, -0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e, -0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300, -0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010, -0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400, -0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40023700,0x24000000,0x30e00000,0x40027d01, -0x12882000,0x962460,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000, -0x810010,0x400a5300,0x4000000,0x1410010,0x404077a6,0x4000000,0x200000,0x404077a6,0x4000000,0x400000,0x40c0511a,0x4000000,0x200000,0x41000419,0x7c00100,0x220400, -0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13, -0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000, -0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400, -0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800, -0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120, -0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10e00000,0x41003700,0x24000000,0x30200000, -0x41003700,0x24000000,0x30e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208, -0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000, -0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540, -0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407, -0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100, -0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460, -0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b, -0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100, -0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000, -0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a, -0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000, -0x962460,0x41020701,0x2802000,0xc62460,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010, -0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100, -0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a828a,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01468,0x6800000, -0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400, -0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00, -0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000, -0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000, -0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257, -0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010, -0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000, -0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e, -0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000, -0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400, -0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a93,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e, -0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100, -0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460, -0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a, -0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100, -0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400, -0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619, -0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000, -0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400, -0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000000,0x30200000,0x51007300, -0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000, -0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000, -0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419, -0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100, -0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540, -0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52, -0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000, -0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460, -0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63, -0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100, -0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540, -0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f, -0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400, -0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540, -0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b, -0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100aa00,0x4000000, -0x30e00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000, -0x5140a2a1,0x4000400,0x400000,0x514a828a,0x4000000,0xe00000,0x51802b81,0x2802000,0x962460,0x51c0090a,0x2802400,0x962460,0x51c0a00a,0x2802400,0x962460,0x52000f0a, -0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100, -0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000, -0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52003700, -0x24000000,0x30e00000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100, -0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400, -0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e, -0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000, -0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000, -0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182, -0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400, -0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000, -0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e, -0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100, -0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000, -0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873, -0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100, -0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400, -0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a, -0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218820,0x5200c178,0x2802000, -0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540, -0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247, -0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000, -0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000,0x30e00000,0x52023700,0x24000000,0x90e00000,0x52023800,0x24000000,0x30100000,0x52024400,0x4000000,0x100000, -0x52027300,0x24000000,0x100000,0x52027300,0x24000000,0x30100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300, -0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a4400,0x4000000, -0xe00003,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d, -0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af75,0x6800400,0x962540,0x5240af75,0x7c00100,0x230400,0x5240af76, -0x4000400,0x200000,0x5240af76,0x6800100,0x962540,0x5240b294,0x4000000,0x200000,0x5240b294,0x4000000,0x1500000,0x5240b5a4,0x7c00900,0x230400,0x5280af75,0x2802400, -0x962460,0x5280af76,0x2802400,0x962460,0x5280af78,0x2802400,0x962460,0x5280af7a,0x2802400,0x962460,0x52c0b39f,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460, +0,0x10567,0,0xe00000,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,0,0, +0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,0x10f67, +0,0,0x11067,0,0,0x11167,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0, +0xe00000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000, +0xb0067,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100, +0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008, +0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402, +0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419, +0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100, +0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x201000,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400, +0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800, +0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400, +0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400, +0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908, +0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100, +0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000, +0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00, +0,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000, +0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402, +0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a, +0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100, +0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540, +0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110, +0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400, +0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460, +0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f, +0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100, +0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460, +0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615, +0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400, +0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000, +0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926, +0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100, +0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002, +0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12, +0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400, +0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820, +0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800, +0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000, +0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000, +0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800, +0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000, +0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e, +0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00, +0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000, +0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402, +0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00, +0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020, +0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002, +0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x10200000,0x11003000, +0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000, +0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x10200000, +0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000,0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700, +0x24000000,0x928045a0,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000, +0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800,0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x10e05200, +0x11003800,0x24000000,0x928045a0,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013, +0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100, +0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460, +0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502, +0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400, +0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000, +0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219, +0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100, +0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400, +0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701, +0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100, +0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002, +0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800, +0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020, +0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f, +0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e, +0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100, +0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001, +0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300, +0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020, +0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000, +0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600, +0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100, +0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011, +0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700, +0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400, +0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011, +0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100, +0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000, +0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00, +0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100, +0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010, +0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400, +0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12, +0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000, +0x30200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400, +0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14, +0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900, +0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002, +0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11, +0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000, +0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10, +0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400, +0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020, +0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000, +0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f34,0xc000010,0x448000,0x11400f44,0xc000010,0x448000,0x11401d70, +0x4000000,0x200000,0x11403d92,0x4000000,0xe00000,0x11445787,0x4000004,0x120000a,0x11445787,0x4000008,0x81000a,0x11445787,0x4000008,0x141000a,0x11445787,0x4000010, +0x87000a,0x11445787,0xc000010,0x84800a,0x11445790,0x3802500,0x126246a,0x11445790,0x7c00d00,0x2530c0a,0x114a3d87,0x24000000,0x810000,0x114a3d87,0x24000000,0x1410000, +0x114a3d87,0x24000008,0x810000,0x114a3d87,0x24000008,0x1410000,0x114a3d87,0x24000010,0x870000,0x114a3d87,0x2c000010,0x848000,0x114a3d8d,0x4000000,0xe00000,0x114a3d8d, +0x24000000,0xe00000,0x114a3d8d,0x24000002,0x1200000,0x114a3d8d,0x24000002,0x10e00000,0x114a3d8d,0x24000008,0x810000,0x114a3d8d,0x24000008,0x1410000,0x114a3d90,0x7c00900, +0x930c00,0x114a3d90,0x7c00900,0xe30c00,0x114a3d92,0x7c00300,0xe30000,0x114a3e90,0x7000400,0x1200c02,0x114a3f87,0x4000004,0x1200000,0x114a3f90,0x7c00d00,0x2530c00, +0x114a4292,0x4000000,0xe00000,0x114a4292,0x4000000,0xe0000f,0x114a4492,0x4000000,0xe00002,0x114a4492,0x4000000,0xe00003,0x114a4492,0x4000000,0x10e00003,0x114a4592, +0x4000000,0xe00002,0x114a4592,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c17,0x2802100,0x962460,0x11800c17,0x2802500,0x962460,0x11800f1d,0x2802400, +0x962460,0x11800f29,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d93,0x2802400,0x962460,0x118a3e90,0x2802400,0x962460, +0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1b,0x6800000,0x1329800,0x11c00f58,0x6800000,0x1329800,0x11c0105d,0x6800000,0x1329800,0x11c01161, +0x6800000,0x1329800,0x11c01265,0x6800000,0x1329800,0x11c01469,0x4000000,0x200000,0x11c01469,0x6800000,0x1329800,0x11c01469,0x7c00100,0x230400,0x11c0511b,0x7c00100, +0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461, +0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27, +0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010, +0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400, +0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67, +0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100, +0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401, +0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605, +0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100, +0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218960, +0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22, +0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400, +0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460, +0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c, +0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100, +0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000, +0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128, +0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100, +0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460, +0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417, +0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000, +0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000, +0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b, +0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010, +0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400, +0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e, +0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400, +0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000, +0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929, +0x4000000,0xe00000,0x30402576,0x4000010,0x400000,0x30402576,0x4000010,0xb70000,0x30402576,0xc000010,0xb48000,0x304a3d92,0x4000000,0xe00000,0x30800c17,0x2802100, +0x962460,0x30c01c6e,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000, +0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00, +0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000, +0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405, +0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419, +0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100, +0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820, +0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919, +0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000, +0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000, +0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600, +0x24000020,0x10200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000, +0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460, +0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c, +0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020, +0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000, +0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01, +0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020, +0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000, +0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406372, +0xc000010,0x448000,0x324a3d95,0x4000000,0x10e00000,0x324a3d95,0x7c00100,0x1230400,0x324a3f90,0x4000002,0x1200c00,0x324a538d,0x24000000,0xe00000,0x32820701,0x2802000, +0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400, +0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218960,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02, +0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100, +0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400, +0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417, +0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000, +0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400, +0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30, +0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100, +0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400, +0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531, +0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000, +0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460, +0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412, +0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077b8,0x4000000, +0x200000,0x404077bb,0x4000000,0x200000,0x404077bb,0x4000000,0x400000,0x40c0511b,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400, +0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13, +0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100, +0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f, +0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919, +0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000, +0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000, +0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e, +0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100, +0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000, +0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b, +0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000, +0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400, +0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b, +0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100, +0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460, +0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c, +0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x30200000,0x410a3700,0x24000000, +0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010, +0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100, +0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8292,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01469,0x6800000,0x1329800,0x50000419,0x7c00100, +0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460, +0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19, +0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120, +0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000, +0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257, +0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100, +0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800, +0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e, +0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100, +0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400, +0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a92,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02, +0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500, +0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000, +0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27, +0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400, +0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400, +0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619, +0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000, +0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000, +0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301, +0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000, +0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400, +0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500, +0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100, +0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400, +0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52, +0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500, +0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800, +0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008, +0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500, +0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000, +0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e, +0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100, +0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000, +0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c, +0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020, +0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x30200000,0x510aaa00,0x4000000,0x30e00000,0x5140a2b3,0x4000400,0x400000, +0x514a8292,0x4000000,0xe00000,0x51802b84,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a, +0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100, +0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400, +0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108, +0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000, +0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460, +0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a, +0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000, +0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000, +0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182, +0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100, +0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800, +0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c, +0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000, +0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000, +0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873, +0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010, +0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000, +0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58, +0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218960,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400, +0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401, +0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00, +0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000, +0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003, +0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700, +0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x30100000,0x520ab412,0x7c00100, +0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000, +0x5240af78,0x6800400,0x962540,0x5240af78,0x7c00100,0x230400,0x5240af79,0x4000400,0x200000,0x5240af79,0x6800100,0x962540,0x5240b298,0x4000000,0x200000,0x5240b2a2, +0x4000000,0x200000,0x5240b2a2,0x4000000,0x1500000,0x5240b5b6,0x7c00900,0x230400,0x524a4492,0x4000000,0xe00003,0x5280af78,0x2802400,0x962460,0x5280af79,0x2802400, +0x962460,0x5280af7b,0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x52c0b3ad,0x2802400,0x962460,0x52c0b3b1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460, 0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a, -0x7c00100,0x230400,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000,0x962460,0x60002919,0x7c00100, -0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003000,0x24000000,0x30200000,0x60003000,0x24000000,0x30e00000, -0x60003700,0x24000000,0x200000,0x60003700,0x24000000,0x30200000,0x60003800,0x24000000,0x1710000,0x60003800,0x24000000,0x30200000,0x60003800,0x24000000,0xb0e00000,0x60005102, -0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000, -0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400, -0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f, -0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100, -0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800, -0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0xe00000,0x6000cc00, -0x4000000,0x30e00000,0x6000cd00,0x4000000,0x30200000,0x6000cd00,0x4000000,0x30e00000,0x6000cd00,0x4000000,0xb0e00000,0x6000ce00,0x4000000,0x30e00000,0x6000ce00,0x4000000, -0xb0e00000,0x6000cf00,0x4000000,0x30e00000,0x6000cf00,0x4000000,0xb0e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d, -0x6002c300,0x4000000,0x30100000,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a4305,0x7c00100,0xe30400,0x600ac400, -0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e00003,0x600ac400,0x4000000,0x30e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600ad111,0x7c40300, -0xe30000,0x61000a03,0x4000000,0x1600000,0x61000c02,0,0x218820,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400, -0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00, -0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100, -0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460, -0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100ce00,0x4000000,0x30e00000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202, -0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400, -0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000, -0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573, -0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100, -0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800, -0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98, -0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100, -0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x6140af75,0x7c00100,0x230400, -0x6140af76,0x6800100,0x962540,0x6140af7f,0x7c00100,0x230400,0x6180af76,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800, -0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0,0x218820,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100, -0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800, -0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800, -0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100, -0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000, -0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519, -0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100, -0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460, -0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00, -0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x30e00000,0x7000cd00,0x4000000, -0x90e00000,0x7000cd00,0x4000000,0xb0e00000,0x7000ce00,0x4000000,0x30e00000,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000cf00,0x4000000,0x30e00000, -0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86, -0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400, -0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000, -0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489, -0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400, -0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400, -0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691, -0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200000,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500, -0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400, -0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c, -0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000, -0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800, -0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c, -0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100, -0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460, -0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b, -0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010, -0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000, -0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6, -0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400, -0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400, -0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x7040dfa8, -0x4000000,0x200000,0x7040f7aa,0x80000,0x918820,0x7080af76,0x2802400,0x962460,0x7080dfa8,0x2802400,0x962460,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100, -0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000, -0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519, -0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000, -0xe00000,0x8000cd00,0x4000000,0x30e00000,0x8000cd00,0x4000000,0x70200000,0x8000ce00,0x4000000,0x30e00000,0x8000cf00,0x4000000,0x30e00000,0x8000d202,0x2802500,0x962460, -0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000,0x400000,0x8000d997, -0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100, -0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460, -0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c, -0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000, -0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400, -0x8001044c,0x7c00100,0x250400,0x80010500,0x4000000,0x30e00000,0x80010500,0x4000000,0xb0e00000,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670, -0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800b0011,0x7c40300,0xe30000}; +0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000, +0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003700,0x24000000,0x200000, +0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301, +0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100, +0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400, +0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f, +0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010, +0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400, +0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300, +0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000,0x24000000,0x30e00000,0x600a3700,0x24000000,0x30200000,0x600a3800,0x24000000, +0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x30100000,0x600ac400,0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e0000d, +0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30200000,0x600acd00,0x4000000,0x30e00000,0x600acd00, +0x4000000,0x30e05200,0x600acd00,0x4000000,0xb0e00000,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00,0x4000000,0x30e00000,0x600ace00,0x4000000, +0xb28045a0,0x600acf00,0x4000000,0x30e00000,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300,0xe30000,0x604ac492,0x4000000,0x30e00003,0x61000a03,0x4000000,0x1600000, +0x61000c02,0,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600, +0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000, +0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f, +0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00, +0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120, +0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800, +0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573, +0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100, +0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460, +0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997, +0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000, +0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540, +0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x30e00000,0x6140af78,0x7c00100,0x230400,0x6140af79, +0x6800100,0x962540,0x6140af82,0x7c00100,0x230400,0x6180af79,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800,0x80000, +0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400, +0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320, +0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800,0x24000000, +0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400, +0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00, +0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100, +0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400, +0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c, +0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000, +0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x10e05200,0x7000cd00,0x4000000,0x90e00000, +0x7000cd00,0x4000000,0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997, +0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000, +0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460, +0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489, +0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100, +0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000, +0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691, +0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400, +0x200000,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460, +0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79, +0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100, +0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540, +0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c, +0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100, +0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000, +0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b, +0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100, +0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460, +0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6, +0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000, +0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800, +0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92, +0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00,0x4000000,0xb28045a0,0x700ace00,0x4000000, +0x30e00000,0x700acf00,0x4000000,0x30e00000,0x700acf00,0x4000000,0xb0e00000,0x7040dfbd,0x4000000,0x200000,0x7040f7c1,0x80000,0x918820,0x7080af79,0x2802400,0x962460, +0x7080dfbd,0x2802400,0x962460,0x70c0e4bf,0x2802400,0x962460,0x70c0e4bf,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a, +0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400, +0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400, +0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0xe00000,0x8000d202, +0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000, +0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400, +0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1, +0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010, +0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400, +0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c, +0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010, +0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x72904de0,0x800ace00,0x4000000,0x30e00000,0x800acf00,0x4000000,0x30e00000, +0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a, +0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100, +0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400, +0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7, +0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000, +0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400, +0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9, +0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400, +0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800, +0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300, +0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0,0x900acf00,0x4000000,0x30e00000,0x900b0500,0x4000000, +0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000, +0x90408e06,0x24000000,0x400000}; -static const int32_t countPropsVectors=5931; +static const int32_t countPropsVectors=6195; static const int32_t propsVectorsColumns=3; -static const uint16_t scriptExtensions[172]={ -0x800e,0x8019,8,0x8059,8,2,8,0x8019,8,0x8038,8,8,3,0x800c,2,0x22, -0x8025,2,0x22,0x54,0x79,0x807b,2,0x8022,2,0x8025,2,0x18,4,0xa,0xf,0x10, -0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x8097,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f, -0x23,0x24,0x8089,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91, -0x99,0x9e,0x80a0,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a,0x89, -0x91,0x99,0x9e,0x80a0,0xa,0x78,0x80a0,0xa,0x54,4,0x3a,0x8076,4,0x59,0x10,0x80a4, -0x10,0x5e,0xf,0x809d,0xf,0x62,0x23,0x8089,0x23,0x66,0x1c,0x34,0x8076,0x1c,0x6a,0x2a, -0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,0xa,0x8089,0xa,0x8097,0xa,0x15,0x1a,0x23,0x8024,0xa, -0x8015,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x11, -0x14,0x8016,5,0x8011,0xa,0xf,0x10,0x78,0x91,0x99,0x9e,0xa0,0x80a3,0xa,0x8023,0xa, -0x9d,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x8031,2,0x8007,0x8087,0}; +static const uint16_t scriptExtensions[194]={ +0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,3,0x800c,2,0x22, +0x8025,2,0x22,0x54,0x79,0x7b,0x80a7,2,0x8022,2,0x8025,2,0x19,4,0xa,0xf, +0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x8097,4,0xa,0xf,0x10,0x15,0x19,0x1a, +0x1f,0x23,0x24,0x8089,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89, +0x91,0x99,0x9e,0x80a0,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a, +0x89,0x91,0x99,0x9e,0x80a0,0xa,0x78,0x80a0,0xa,0x55,4,0x3a,0x8076,4,0x5a,0x10, +0x80a4,0x10,0x5f,0xf,0x809d,0xf,0x63,0x23,0x8089,0x23,0x67,0x1c,0x34,0x8076,0x1c,0x6b, +0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,0xa,0x8089,0xa,0x8097,0xa,0x15,0x1a, +0x23,0x8024,0xa,0x8015,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12, +0x14,0x8016,0x8011,5,0x8011,0x11,0x14,0x8016,0xa,0xf,0x10,0x15,0x78,0x91,0x99,0x9e, +0xa0,0x80a3,0xa,0xf,0x10,0x78,0x91,0x99,0x9e,0xa0,0x80a3,4,0x800a,0xa,0xab,0xa, +0x8023,0xa,0xaf,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x31,0x8053,0x2f,0x8031,2,0x8007,0x89, +0x67,0x8087}; -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x26ca,0x26ca,0x26ca,0x26ca,0x5c6c,3,0x7397,0x73ed,0x73ed,0x73ed,0xb06a6,0x2774191,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x28aa,0x28aa,0x28aa,0x28aa,0x606c,3,0x789f,0x7900,0x7900,0x7900,0xb11ae,0x2a75631,0,0,0,0}; #endif // INCLUDED_FROM_UCHAR_C diff --git a/deps/icu-small/source/common/ucharstrie.cpp b/deps/icu-small/source/common/ucharstrie.cpp index 476271deacb836..d04d315c7913e0 100644 --- a/deps/icu-small/source/common/ucharstrie.cpp +++ b/deps/icu-small/source/common/ucharstrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucharstriebuilder.cpp b/deps/icu-small/source/common/ucharstriebuilder.cpp index 05255b48c9b3c8..412a58a45d6bd0 100644 --- a/deps/icu-small/source/common/ucharstriebuilder.cpp +++ b/deps/icu-small/source/common/ucharstriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -115,7 +117,7 @@ UCharsTrieBuilder::add(const UnicodeString &s, int32_t value, UErrorCode &errorC return *this; } if(elementsLength>0) { - uprv_memcpy(newElements, elements, elementsLength*sizeof(UCharsTrieElement)); + uprv_memcpy(newElements, elements, (size_t)elementsLength*sizeof(UCharsTrieElement)); } delete[] elements; elements=newElements; diff --git a/deps/icu-small/source/common/ucharstrieiterator.cpp b/deps/icu-small/source/common/ucharstrieiterator.cpp index 30867c05f07d82..68ba8c2177878a 100644 --- a/deps/icu-small/source/common/ucharstrieiterator.cpp +++ b/deps/icu-small/source/common/ucharstrieiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/uchriter.cpp b/deps/icu-small/source/common/uchriter.cpp index 40b06ce5acf486..fd0a407c6b1763 100644 --- a/deps/icu-small/source/common/uchriter.cpp +++ b/deps/icu-small/source/common/uchriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1998-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/ucln.h b/deps/icu-small/source/common/ucln.h index cd2630afff8652..3c8c66ad2f39e5 100644 --- a/deps/icu-small/source/common/ucln.h +++ b/deps/icu-small/source/common/ucln.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucln_cmn.cpp b/deps/icu-small/source/common/ucln_cmn.cpp index 53c95e67baa3c5..e089fb2cc18bd7 100644 --- a/deps/icu-small/source/common/ucln_cmn.cpp +++ b/deps/icu-small/source/common/ucln_cmn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2014, International Business Machines @@ -50,7 +52,7 @@ u_cleanup(void) /*#endif*/ } -U_CAPI void U_EXPORT2 ucln_cleanupOne(ECleanupLibraryType libType) +U_CAPI void U_EXPORT2 ucln_cleanupOne(ECleanupLibraryType libType) { if (gLibCleanupFunctions[libType]) { diff --git a/deps/icu-small/source/common/ucln_cmn.h b/deps/icu-small/source/common/ucln_cmn.h index 2fdf1c7a67e97c..56fa73053f5c0c 100644 --- a/deps/icu-small/source/common/ucln_cmn.h +++ b/deps/icu-small/source/common/ucln_cmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines diff --git a/deps/icu-small/source/common/ucln_imp.h b/deps/icu-small/source/common/ucln_imp.h index a0a1850acc6745..352776a8cac1de 100644 --- a/deps/icu-small/source/common/ucln_imp.h +++ b/deps/icu-small/source/common/ucln_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -111,13 +113,13 @@ U_CAPI void U_EXPORT2 UCLN_FINI () /* Windows: DllMain */ #elif U_PLATFORM_HAS_WIN32_API -/* +/* * ICU's own DllMain. */ /* these are from putil.c */ /* READ READ READ READ! Are you getting compilation errors from windows.h? - Any source file which includes this (ucln_imp.h) header MUST + Any source file which includes this (ucln_imp.h) header MUST be defined with language extensions ON. */ # define WIN32_LEAN_AND_MEAN # define VC_EXTRALEAN @@ -164,7 +166,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) /* GCC - use __attribute((destructor)) */ static void ucln_destructor() __attribute__((destructor)) ; -static void ucln_destructor() +static void ucln_destructor() { UCLN_CLEAN_ME_UP; } diff --git a/deps/icu-small/source/common/ucmndata.c b/deps/icu-small/source/common/ucmndata.c index b9a11eb66aac77..6b7d78d104d186 100644 --- a/deps/icu-small/source/common/ucmndata.c +++ b/deps/icu-small/source/common/ucmndata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucmndata.h b/deps/icu-small/source/common/ucmndata.h index c3dfc50d884171..9e87fad9bdcb02 100644 --- a/deps/icu-small/source/common/ucmndata.h +++ b/deps/icu-small/source/common/ucmndata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -92,12 +94,12 @@ U_CDECL_END typedef struct { LookupFn Lookup; - NumEntriesFn NumEntries; + NumEntriesFn NumEntries; } commonDataFuncs; /* - * Functions to check whether a UDataMemory refers to memory containing + * Functions to check whether a UDataMemory refers to memory containing * a recognizable header and table of contents a Common Data Format * * If a valid header and TOC are found, diff --git a/deps/icu-small/source/common/ucnv.c b/deps/icu-small/source/common/ucnv.c index d7f197c5f7967b..527f86f140b95f 100644 --- a/deps/icu-small/source/common/ucnv.c +++ b/deps/icu-small/source/common/ucnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -79,7 +81,7 @@ ucnv_open (const char *name, return r; } -U_CAPI UConverter* U_EXPORT2 +U_CAPI UConverter* U_EXPORT2 ucnv_openPackage (const char *packageName, const char *converterName, UErrorCode * err) { return ucnv_createConverterFromPackage(packageName, converterName, err); @@ -146,7 +148,7 @@ ucnv_openCCSID (int32_t codepage, return ucnv_createConverter(NULL, myName, err); } -/* Creating a temporary stack-based object that can be used in one thread, +/* Creating a temporary stack-based object that can be used in one thread, and created from a converter that is shared across threads. */ @@ -238,7 +240,7 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U } stackBuffer = (void *)stackBufferChars; - + /* Now, see if we must allocate any memory */ if (stackBufferSize < bufferSizeNeeded || stackBuffer == NULL) { @@ -446,7 +448,7 @@ ucnv_setSubstChars (UConverter * converter, { if (U_FAILURE (*err)) return; - + /*Makes sure that the subChar is within the codepages char length boundaries */ if ((len > converter->sharedData->staticData->maxBytesPerChar) || (len < converter->sharedData->staticData->minBytesPerChar)) @@ -454,7 +456,7 @@ ucnv_setSubstChars (UConverter * converter, *err = U_ILLEGAL_ARGUMENT_ERROR; return; } - + uprv_memcpy (converter->subChars, mySubChar, len); /*copies the subchars */ converter->subCharLen = len; /*sets the new len */ @@ -464,7 +466,7 @@ ucnv_setSubstChars (UConverter * converter, * we set subChar1 to 0. */ converter->subChar1 = 0; - + return; } @@ -655,7 +657,7 @@ ucnv_getMinCharSize (const UConverter * converter) U_CAPI const char* U_EXPORT2 ucnv_getName (const UConverter * converter, UErrorCode * err) - + { if (U_FAILURE (*err)) return NULL; @@ -1061,7 +1063,7 @@ _fromUnicodeWithCallback(UConverterFromUnicodeArgs *pArgs, UErrorCode *err) { length=(int32_t)(pArgs->sourceLimit-pArgs->source); if(length>0) { - uprv_memcpy(cnv->preFromU, pArgs->source, length*U_SIZEOF_UCHAR); + u_memcpy(cnv->preFromU, pArgs->source, length); cnv->preFromULength=(int8_t)-length; } @@ -1224,7 +1226,7 @@ ucnv_fromUnicode(UConverter *cnv, *err=U_ILLEGAL_ARGUMENT_ERROR; return; } - + /* output the target overflow buffer */ if( cnv->charErrorBufferLength>0 && ucnv_outputOverflowFromUnicode(cnv, target, targetLimit, &offsets, err) @@ -1670,7 +1672,7 @@ ucnv_toUnicode(UConverter *cnv, *err=U_ILLEGAL_ARGUMENT_ERROR; return; } - + /* output the target overflow buffer */ if( cnv->UCharErrorBufferLength>0 && ucnv_outputOverflowToUnicode(cnv, target, targetLimit, &offsets, err) @@ -2089,7 +2091,7 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv, *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return; } - + if(pivotStart==NULL) { if(!flush) { /* streaming conversion requires an explicit pivot buffer */ @@ -2338,7 +2340,7 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv, break; } } - + /* * toUnicode(source -> pivot); * @@ -2615,7 +2617,7 @@ ucnv_getType(const UConverter* converter) } U_CAPI void U_EXPORT2 -ucnv_getStarters(const UConverter* converter, +ucnv_getStarters(const UConverter* converter, UBool starters[256], UErrorCode* err) { @@ -2658,8 +2660,8 @@ static const UAmbiguousConverter *ucnv_getAmbiguous(const UConverter *cnv) } U_CAPI void U_EXPORT2 -ucnv_fixFileSeparator(const UConverter *cnv, - UChar* source, +ucnv_fixFileSeparator(const UConverter *cnv, + UChar* source, int32_t sourceLength) { const UAmbiguousConverter *a; int32_t i; @@ -2743,7 +2745,7 @@ ucnv_getInvalidUChars (const UConverter * converter, } if ((*len = converter->invalidUCharLength) > 0) { - uprv_memcpy (errChars, converter->invalidUCharBuffer, sizeof(UChar) * (*len)); + u_memcpy (errChars, converter->invalidUCharBuffer, *len); } } @@ -2757,7 +2759,7 @@ ucnv_detectUnicodeSignature( const char* source, int32_t dummy; /* initial 0xa5 bytes: make sure that if we read fromUChar32 > 0){ return 1; } - return 0; + return 0; } diff --git a/deps/icu-small/source/common/ucnv2022.cpp b/deps/icu-small/source/common/ucnv2022.cpp index c3bcafb4bfcac8..9c0a06426bda54 100644 --- a/deps/icu-small/source/common/ucnv2022.cpp +++ b/deps/icu-small/source/common/ucnv2022.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines @@ -223,10 +225,10 @@ typedef struct{ /* ISO-2022 ----------------------------------------------------------------- */ /*Forward declaration */ -U_CFUNC void +U_CFUNC void U_CALLCONV ucnv_fromUnicode_UTF8(UConverterFromUnicodeArgs * args, UErrorCode * err); -U_CFUNC void +U_CFUNC void U_CALLCONV ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs * args, UErrorCode * err); @@ -383,26 +385,31 @@ typedef enum{ } Variant2022; /*********** ISO 2022 Converter Protos ***********/ -static void +static void U_CALLCONV _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode); -static void +static void U_CALLCONV _ISO2022Close(UConverter *converter); -static void +static void U_CALLCONV _ISO2022Reset(UConverter *converter, UConverterResetChoice choice); -static const char* +U_CDECL_BEGIN +static const char * U_CALLCONV _ISO2022getName(const UConverter* cnv); +U_CDECL_END -static void +static void U_CALLCONV _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err); -static UConverter * +U_CDECL_BEGIN +static UConverter * U_CALLCONV _ISO_2022_SafeClone(const UConverter *cnv, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status); +U_CDECL_END + #ifdef U_ENABLE_GENERIC_ISO_2022 -static void +static void U_CALLCONV T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args, UErrorCode* err); #endif @@ -468,7 +475,7 @@ setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConv } } -static void +static void U_CALLCONV _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ char myLocale[6]={' ',' ',' ',' ',' ',' '}; @@ -646,7 +653,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ } -static void +static void U_CALLCONV _ISO2022Close(UConverter *converter) { UConverterDataISO2022* myData =(UConverterDataISO2022 *) (converter->extraInfo); UConverterSharedData **array = myData->myConverterArray; @@ -669,7 +676,7 @@ _ISO2022Close(UConverter *converter) { } } -static void +static void U_CALLCONV _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) { UConverterDataISO2022 *myConverterData=(UConverterDataISO2022 *) (converter->extraInfo); if(choice<=UCNV_RESET_TO_UNICODE) { @@ -714,7 +721,9 @@ _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) { } } -static const char* +U_CDECL_BEGIN + +static const char * U_CALLCONV _ISO2022getName(const UConverter* cnv){ if(cnv->extraInfo){ UConverterDataISO2022* myData= (UConverterDataISO2022*)cnv->extraInfo; @@ -723,6 +732,8 @@ _ISO2022getName(const UConverter* cnv){ return NULL; } +U_CDECL_END + /*************** to unicode *******************/ /**************************************************************************** @@ -1221,7 +1232,7 @@ _2022FromGR94DBCS(uint32_t value) { /* * This method does the reverse of _2022FromGR94DBCS(). Given the 2022 code point, it returns the * 2 byte value that is in the range A1..FE for each byte. Otherwise it returns the 2022 code point - * unchanged. + * unchanged. */ static inline uint32_t _2022ToGR94DBCS(uint32_t value) { @@ -1243,7 +1254,7 @@ _2022ToGR94DBCS(uint32_t value) { * */ -static void +static void U_CALLCONV T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args, UErrorCode* err){ const char* mySourceLimit, *realSourceLimit; @@ -1649,7 +1660,7 @@ static const uint16_t hwkana_fb[HWKANA_END - HWKANA_START + 1] = { 0x212C /* U+FF9F */ }; -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err) { UConverter *cnv = args->converter; UConverterDataISO2022 *converterData; @@ -2066,7 +2077,7 @@ UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args /*************** to unicode *******************/ -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[2]; @@ -2318,7 +2329,7 @@ UConverter_toUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, * ii) There are only 2 shifting sequences SO to shift into double byte mode * and SI to shift into single byte mode */ -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs* args, UErrorCode* err){ UConverter* saveConv = args->converter; @@ -2342,7 +2353,7 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs* args->converter=saveConv; } -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){ const UChar *source = args->source; @@ -2561,7 +2572,7 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args /************************ To Unicode ***************************************/ -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args, UErrorCode* err){ char const* sourceStart; @@ -2659,7 +2670,7 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args } } -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[2]; @@ -2901,7 +2912,7 @@ static const char* const escSeqCharsCN[10] ={ CNS_11643_1992_Plane_7_STR }; -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){ UConverter *cnv = args->converter; UConverterDataISO2022 *converterData; @@ -3252,7 +3263,7 @@ UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args } -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[3]; @@ -3454,7 +3465,7 @@ UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, } #endif /* #if !UCONFIG_ONLY_HTML_CONVERSION */ -static void +static void U_CALLCONV _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err) { UConverter *cnv = args->converter; UConverterDataISO2022 *myConverterData=(UConverterDataISO2022 *) cnv->extraInfo; @@ -3578,7 +3589,9 @@ struct cloneStruct }; -static UConverter * +U_CDECL_BEGIN + +static UConverter * U_CALLCONV _ISO_2022_SafeClone( const UConverter *cnv, void *stackBuffer, @@ -3625,7 +3638,9 @@ _ISO_2022_SafeClone( return &localClone->cnv; } -static void +U_CDECL_END + +static void U_CALLCONV _ISO_2022_GetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, diff --git a/deps/icu-small/source/common/ucnv_bld.cpp b/deps/icu-small/source/common/ucnv_bld.cpp index 6deb61d2717d8d..078f293ea17c09 100644 --- a/deps/icu-small/source/common/ucnv_bld.cpp +++ b/deps/icu-small/source/common/ucnv_bld.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * COPYRIGHT: @@ -222,7 +224,7 @@ static UBool gDefaultConverterContainsOption; static const char DATA_TYPE[] = "cnv"; /* ucnv_flushAvailableConverterCache. This is only called from ucnv_cleanup(). - * If it is ever to be called from elsewhere, synchronization + * If it is ever to be called from elsewhere, synchronization * will need to be considered. */ static void @@ -1302,7 +1304,7 @@ ucnv_setDefaultName(const char *converterName) { /* The close may make the current name go away. */ ucnv_close(cnv); - + /* reset the converter cache */ u_flushDefaultConverter(); } diff --git a/deps/icu-small/source/common/ucnv_bld.h b/deps/icu-small/source/common/ucnv_bld.h index d95f49228e9277..212c4ea916143f 100644 --- a/deps/icu-small/source/common/ucnv_bld.h +++ b/deps/icu-small/source/common/ucnv_bld.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015 International Business Machines @@ -64,8 +66,8 @@ typedef struct UConverterImpl UConverterImpl; typedef struct UConverterStaticData { /* +offset: size */ uint32_t structSize; /* +0: 4 Size of this structure */ - - char name + + char name [UCNV_MAX_CONVERTER_NAME_LENGTH]; /* +4: 60 internal name of the converter- invariant chars */ int32_t codepage; /* +64: 4 codepage # (now IBM-$codepage) */ @@ -78,7 +80,7 @@ typedef struct UConverterStaticData { /* +offset: size */ uint8_t subChar[UCNV_MAX_SUBCHAR_LEN]; /* +72: 4 [note: 4 and 8 byte boundary] */ int8_t subCharLen; /* +76: 1 */ - + uint8_t hasToUnicodeFallback; /* +77: 1 UBool needs to be changed to UBool to be consistent across platform */ uint8_t hasFromUnicodeFallback; /* +78: 1 */ uint8_t unicodeMask; /* +79: 1 bit 0: has supplementary bit 1: has single surrogates */ diff --git a/deps/icu-small/source/common/ucnv_cb.c b/deps/icu-small/source/common/ucnv_cb.c index fa34b65832726c..0c9cc2459f1844 100644 --- a/deps/icu-small/source/common/ucnv_cb.c +++ b/deps/icu-small/source/common/ucnv_cb.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2006, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_cnv.c b/deps/icu-small/source/common/ucnv_cnv.c index f8e2f830f91a9b..01f84829dd3f7d 100644 --- a/deps/icu-small/source/common/ucnv_cnv.c +++ b/deps/icu-small/source/common/ucnv_cnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnv_cnv.h b/deps/icu-small/source/common/ucnv_cnv.h index 67536c80452771..4394672b470bcd 100644 --- a/deps/icu-small/source/common/ucnv_cnv.h +++ b/deps/icu-small/source/common/ucnv_cnv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -152,7 +154,7 @@ typedef void (*UConverterGetStarters)(const UConverter* converter, UErrorCode *pErrorCode); /* If this function pointer is null or if the function returns null - * the name field in static data struct should be returned by + * the name field in static data struct should be returned by * ucnv_getName() API function */ typedef const char * (*UConverterGetName) (const UConverter *cnv); @@ -175,9 +177,9 @@ typedef void (*UConverterWriteSub) (UConverterFromUnicodeArgs *pArgs, int32_t of * the initial state of the converter. It is not expected to increment the * reference counts of the standard data types such as the shared data. */ -typedef UConverter * (*UConverterSafeClone) (const UConverter *cnv, +typedef UConverter * (*UConverterSafeClone) (const UConverter *cnv, void *stackBuffer, - int32_t *pBufferSize, + int32_t *pBufferSize, UErrorCode *status); /** @@ -256,7 +258,7 @@ struct UConverterImpl { extern const UConverterSharedData _MBCSData, _Latin1Data, _UTF8Data, _UTF16BEData, _UTF16LEData, _UTF32BEData, _UTF32LEData, - _ISO2022Data, + _ISO2022Data, _LMBCSData1,_LMBCSData2, _LMBCSData3, _LMBCSData4, _LMBCSData5, _LMBCSData6, _LMBCSData8,_LMBCSData11,_LMBCSData16,_LMBCSData17,_LMBCSData18,_LMBCSData19, _HZData,_ISCIIData, _SCSUData, _ASCIIData, diff --git a/deps/icu-small/source/common/ucnv_ct.c b/deps/icu-small/source/common/ucnv_ct.c index 91d66e12ef6cbe..f76919c4a54f30 100644 --- a/deps/icu-small/source/common/ucnv_ct.c +++ b/deps/icu-small/source/common/ucnv_ct.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_err.c b/deps/icu-small/source/common/ucnv_err.c index ea588f6153bb98..c609bed4bd9f47 100644 --- a/deps/icu-small/source/common/ucnv_err.c +++ b/deps/icu-small/source/common/ucnv_err.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * @@ -132,7 +134,7 @@ UCNV_TO_U_CALLBACK_STOP ( } U_CAPI void U_EXPORT2 -UCNV_FROM_U_CALLBACK_SKIP ( +UCNV_FROM_U_CALLBACK_SKIP ( const void *context, UConverterFromUnicodeArgs *fromUArgs, const UChar* codeUnits, @@ -215,7 +217,7 @@ UCNV_FROM_U_CALLBACK_ESCAPE ( UConverterFromUCallback ignoredCallback = NULL; const void *ignoredContext; - + if (reason > UCNV_IRREGULAR) { return; @@ -235,14 +237,14 @@ UCNV_FROM_U_CALLBACK_ESCAPE ( &original, &originalContext, &err2); - + if (U_FAILURE (err2)) { *err = err2; return; - } + } if(context==NULL) - { + { while (i < length) { valueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ @@ -332,7 +334,7 @@ UCNV_FROM_U_CALLBACK_ESCAPE ( valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4); } } - } + } myValueSource = valueString; /* reset the error */ @@ -420,7 +422,7 @@ UCNV_TO_U_CALLBACK_ESCAPE ( } if(context==NULL) - { + { while (i < length) { uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ diff --git a/deps/icu-small/source/common/ucnv_ext.cpp b/deps/icu-small/source/common/ucnv_ext.cpp index 0c43693b357547..f8605187240159 100644 --- a/deps/icu-small/source/common/ucnv_ext.cpp +++ b/deps/icu-small/source/common/ucnv_ext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -883,7 +885,7 @@ ucnv_extContinueMatchFromU(UConverter *cnv, } else { /* the match did not use all of preFromU[] - keep the rest for replay */ int32_t length=cnv->preFromULength-match; - uprv_memmove(cnv->preFromU, cnv->preFromU+match, length*U_SIZEOF_UCHAR); + u_memmove(cnv->preFromU, cnv->preFromU+match, length); cnv->preFromULength=(int8_t)-length; } diff --git a/deps/icu-small/source/common/ucnv_ext.h b/deps/icu-small/source/common/ucnv_ext.h index 69e0523cb0e2b8..c2f459c7a2109f 100644 --- a/deps/icu-small/source/common/ucnv_ext.h +++ b/deps/icu-small/source/common/ucnv_ext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -246,7 +248,7 @@ * the result bytes in fromUBytes[]; (0 indexes fromUBytes[0]) * } * } - * + * * The first pair in a section contains the number of following pairs in the * UChar position (16 bits, number=1..0xffff). * The value of the initial pair is used when the current UChar is not found diff --git a/deps/icu-small/source/common/ucnv_imp.h b/deps/icu-small/source/common/ucnv_imp.h index 27c373a98f5e9c..81aa80fd272409 100644 --- a/deps/icu-small/source/common/ucnv_imp.h +++ b/deps/icu-small/source/common/ucnv_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_io.cpp b/deps/icu-small/source/common/ucnv_io.cpp index 50ffd5843d92fa..c3301e11af6edb 100644 --- a/deps/icu-small/source/common/ucnv_io.cpp +++ b/deps/icu-small/source/common/ucnv_io.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -8,7 +10,7 @@ * * * ucnv_io.cpp: -* initializes global variables and defines functions pertaining to converter +* initializes global variables and defines functions pertaining to converter * name resolution aspect of the conversion code. * * new implementation: @@ -379,8 +381,9 @@ static const uint8_t ebcdicTypes[128] = { # error U_CHARSET_FAMILY is not valid #endif + /* @see ucnv_compareNames */ -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripASCIIForCompare(char *dst, const char *name) { char *dstItr = dst; uint8_t type, nextType; @@ -415,7 +418,7 @@ ucnv_io_stripASCIIForCompare(char *dst, const char *name) { return dst; } -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripEBCDICForCompare(char *dst, const char *name) { char *dstItr = dst; uint8_t type, nextType; @@ -731,9 +734,7 @@ findTaggedConverterNum(const char *alias, const char *standard, UErrorCode *pErr return UINT32_MAX; } - - -U_CFUNC const char * +U_CAPI const char * ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode) { const char *aliasTmp = alias; int32_t i = 0; @@ -764,6 +765,9 @@ ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *p return NULL; } +U_CDECL_BEGIN + + static int32_t U_CALLCONV ucnv_io_countStandardAliases(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { int32_t value = 0; @@ -776,7 +780,7 @@ ucnv_io_countStandardAliases(UEnumeration *enumerator, UErrorCode * /*pErrorCode return value; } -static const char* U_CALLCONV +static const char * U_CALLCONV ucnv_io_nextStandardAliases(UEnumeration *enumerator, int32_t* resultLength, UErrorCode * /*pErrorCode*/) @@ -814,6 +818,8 @@ ucnv_io_closeUEnumeration(UEnumeration *enumerator) { uprv_free(enumerator); } +U_CDECL_END + /* Enumerate the aliases for the specified converter and standard tag */ static const UEnumeration gEnumAliases = { NULL, @@ -1010,12 +1016,15 @@ ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErro return NULL; } +U_CDECL_BEGIN + + static int32_t U_CALLCONV ucnv_io_countAllConverters(UEnumeration * /*enumerator*/, UErrorCode * /*pErrorCode*/) { return gMainTable.converterListSize; } -static const char* U_CALLCONV +static const char * U_CALLCONV ucnv_io_nextAllConverters(UEnumeration *enumerator, int32_t* resultLength, UErrorCode * /*pErrorCode*/) @@ -1040,7 +1049,7 @@ static void U_CALLCONV ucnv_io_resetAllConverters(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { *((uint16_t *)(enumerator->context)) = 0; } - +U_CDECL_END static const UEnumeration gEnumAllConverters = { NULL, NULL, @@ -1075,7 +1084,7 @@ ucnv_openAllNames(UErrorCode *pErrorCode) { return myEnum; } -U_CFUNC uint16_t +U_CAPI uint16_t ucnv_io_countKnownConverters(UErrorCode *pErrorCode) { if (haveAliasData(pErrorCode)) { return (uint16_t)gMainTable.converterListSize; @@ -1085,7 +1094,11 @@ ucnv_io_countKnownConverters(UErrorCode *pErrorCode) { /* alias table swapping ----------------------------------------------------- */ +U_CDECL_BEGIN + typedef char * U_CALLCONV StripForCompareFn(char *dst, const char *name); +U_CDECL_END + /* * row of a temporary array @@ -1109,7 +1122,7 @@ enum { STACK_ROW_CAPACITY=500 }; -static int32_t +static int32_t U_CALLCONV io_compareRows(const void *context, const void *left, const void *right) { char strippedLeft[UCNV_MAX_CONVERTER_NAME_LENGTH], strippedRight[UCNV_MAX_CONVERTER_NAME_LENGTH]; @@ -1297,13 +1310,13 @@ ucnv_swapAliases(const UDataSwapper *ds, oldIndex=tempTable.rows[i].sortIndex; ds->swapArray16(ds, p+oldIndex, 2, r+i, pErrorCode); } - uprv_memcpy(q, r, 2*count); + uprv_memcpy(q, r, 2*(size_t)count); for(i=0; iswapArray16(ds, p2+oldIndex, 2, r+i, pErrorCode); } - uprv_memcpy(q2, r, 2*count); + uprv_memcpy(q2, r, 2*(size_t)count); } } diff --git a/deps/icu-small/source/common/ucnv_io.h b/deps/icu-small/source/common/ucnv_io.h index 060ffd05953db4..8b3585786d3238 100644 --- a/deps/icu-small/source/common/ucnv_io.h +++ b/deps/icu-small/source/common/ucnv_io.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2006, International Business Machines @@ -75,10 +77,10 @@ typedef struct UConverterAlias { # error U_CHARSET_FAMILY is not valid #endif -U_CAPI char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripASCIIForCompare(char *dst, const char *name); -U_CAPI char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripEBCDICForCompare(char *dst, const char *name); /** @@ -91,7 +93,7 @@ ucnv_io_stripEBCDICForCompare(char *dst, const char *name); * @param pErrorCode The error code * @return the converter name in mixed-case, return NULL if the alias is not found. */ -U_CFUNC const char * +U_CAPI const char * ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode); /** @@ -99,7 +101,7 @@ ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *p * @param pErrorCode The error code * @return the number of all aliases */ -U_CFUNC uint16_t +U_CAPI uint16_t ucnv_io_countKnownConverters(UErrorCode *pErrorCode); /** diff --git a/deps/icu-small/source/common/ucnv_lmb.c b/deps/icu-small/source/common/ucnv_lmb.c index 0879eecb081cd6..e4277909fe8ff5 100644 --- a/deps/icu-small/source/common/ucnv_lmb.c +++ b/deps/icu-small/source/common/ucnv_lmb.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -13,9 +15,9 @@ * extensively hacked up by: Jim Snyder-Grant * * Modification History: -* +* * Date Name Description -* +* * 06/20/2000 helena OS/400 port changes; mostly typecast. * 06/27/2000 Jim Snyder-Grant Deal with partial characters and small buffers. * Add comments to document LMBCS format and implementation @@ -46,16 +48,16 @@ (Lotus Multi-Byte Character Set) - LMBCS was invented in the late 1980's and is primarily used in Lotus Notes - databases and in Lotus 1-2-3 files. Programmers who work with the APIs + LMBCS was invented in the late 1980's and is primarily used in Lotus Notes + databases and in Lotus 1-2-3 files. Programmers who work with the APIs into these products will sometimes need to deal with strings in this format. - The code in this file provides an implementation for an ICU converter of - LMBCS to and from Unicode. + The code in this file provides an implementation for an ICU converter of + LMBCS to and from Unicode. - Since the LMBCS character set is only sparsely documented in existing - printed or online material, we have added extensive annotation to this - file to serve as a guide to understanding LMBCS. + Since the LMBCS character set is only sparsely documented in existing + printed or online material, we have added extensive annotation to this + file to serve as a guide to understanding LMBCS. LMBCS was originally designed with these four sometimes-competing design goals: @@ -67,11 +69,11 @@ All of the national character sets LMBCS was trying to encode are 'ANSI' - based, in that the bytes from 0x20 - 0x7F are almost exactly the - same common Latin unaccented characters and symbols in all character sets. + based, in that the bytes from 0x20 - 0x7F are almost exactly the + same common Latin unaccented characters and symbols in all character sets. - So, in order to help meet the speed & memory design goals, the common ANSI - bytes from 0x20-0x7F are represented by the same single-byte values in LMBCS. + So, in order to help meet the speed & memory design goals, the common ANSI + bytes from 0x20-0x7F are represented by the same single-byte values in LMBCS. The general LMBCS code unit is from 1-3 bytes. We can describe the 3 bytes as follows: @@ -84,21 +86,21 @@ #define ULMBCS_CHARSIZE_MAX 3 /* The single-byte values from 0x20 to 0x7F are examples of single D1 bytes. - We often have to figure out if byte values are below or above this, so we - use the ANSI nomenclature 'C0' and 'C1' to refer to the range of control + We often have to figure out if byte values are below or above this, so we + use the ANSI nomenclature 'C0' and 'C1' to refer to the range of control characters just above & below the common lower-ANSI range */ -#define ULMBCS_C0END 0x1F -#define ULMBCS_C1START 0x80 +#define ULMBCS_C0END 0x1F +#define ULMBCS_C1START 0x80 /* - Since LMBCS is always dealing in byte units. we create a local type here for + Since LMBCS is always dealing in byte units. we create a local type here for dealing with these units of LMBCS code units: -*/ +*/ typedef uint8_t ulmbcs_byte_t; -/* - Most of the values less than 0x20 are reserved in LMBCS to announce - which national character standard is being used for the 'D' bytes. +/* + Most of the values less than 0x20 are reserved in LMBCS to announce + which national character standard is being used for the 'D' bytes. In the comments we show the common name and the IBM character-set ID for these character-set announcers: */ @@ -117,105 +119,105 @@ typedef uint8_t ulmbcs_byte_t; #define ULMBCS_GRP_CN 0x13 /* Chinese TC :ibm-1386 */ /* - So, the beginning of understanding LMBCS is that IF the first byte of a LMBCS - character is one of those 12 values, you can interpret the remaining bytes of - that character as coming from one of those character sets. Since the lower - ANSI bytes already are represented in single bytes, using one of the character - set announcers is used to announce a character that starts with a byte of + So, the beginning of understanding LMBCS is that IF the first byte of a LMBCS + character is one of those 12 values, you can interpret the remaining bytes of + that character as coming from one of those character sets. Since the lower + ANSI bytes already are represented in single bytes, using one of the character + set announcers is used to announce a character that starts with a byte of 0x80 or greater. - The character sets are arranged so that the single byte sets all appear - before the multi-byte character sets. When we need to tell whether a + The character sets are arranged so that the single byte sets all appear + before the multi-byte character sets. When we need to tell whether a group byte is for a single byte char set or not we use this define: */ -#define ULMBCS_DOUBLEOPTGROUP_START 0x10 +#define ULMBCS_DOUBLEOPTGROUP_START 0x10 -/* -However, to fully understand LMBCS, you must also understand a series of -exceptions & optimizations made in service of the design goals. +/* +However, to fully understand LMBCS, you must also understand a series of +exceptions & optimizations made in service of the design goals. First, those of you who are character set mavens may have noticed that -the 'double-byte' character sets are actually multi-byte character sets +the 'double-byte' character sets are actually multi-byte character sets that can have 1 or two bytes, even in the upper-ascii range. To force -each group byte to introduce a fixed-width encoding (to make it faster to -count characters), we use a convention of doubling up on the group byte +each group byte to introduce a fixed-width encoding (to make it faster to +count characters), we use a convention of doubling up on the group byte to introduce any single-byte character > 0x80 in an otherwise double-byte -character set. So, for example, the LMBCS sequence x10 x10 xAE is the +character set. So, for example, the LMBCS sequence x10 x10 xAE is the same as '0xAE' in the Japanese code page 943. -Next, you will notice that the list of group bytes has some gaps. +Next, you will notice that the list of group bytes has some gaps. These are used in various ways. -We reserve a few special single byte values for common control +We reserve a few special single byte values for common control characters. These are in the same place as their ANSI eqivalents for speed. */ - + #define ULMBCS_HT 0x09 /* Fixed control char - Horizontal Tab */ #define ULMBCS_LF 0x0A /* Fixed control char - Line Feed */ #define ULMBCS_CR 0x0D /* Fixed control char - Carriage Return */ -/* Then, 1-2-3 reserved a special single-byte character to put at the +/* Then, 1-2-3 reserved a special single-byte character to put at the beginning of internal 'system' range names: */ -#define ULMBCS_123SYSTEMRANGE 0x19 +#define ULMBCS_123SYSTEMRANGE 0x19 -/* Then we needed a place to put all the other ansi control characters -that must be moved to different values because LMBCS reserves those -values for other purposes. To represent the control characters, we start -with a first byte of 0xF & add the control chaarcter value as the +/* Then we needed a place to put all the other ansi control characters +that must be moved to different values because LMBCS reserves those +values for other purposes. To represent the control characters, we start +with a first byte of 0xF & add the control chaarcter value as the second byte */ -#define ULMBCS_GRP_CTRL 0x0F +#define ULMBCS_GRP_CTRL 0x0F -/* For the C0 controls (less than 0x20), we add 0x20 to preserve the -useful doctrine that any byte less than 0x20 in a LMBCS char must be +/* For the C0 controls (less than 0x20), we add 0x20 to preserve the +useful doctrine that any byte less than 0x20 in a LMBCS char must be the first byte of a character:*/ -#define ULMBCS_CTRLOFFSET 0x20 +#define ULMBCS_CTRLOFFSET 0x20 -/* -Where to put the characters that aren't part of any of the 12 national -character sets? The first thing that was done, in the earlier years of +/* +Where to put the characters that aren't part of any of the 12 national +character sets? The first thing that was done, in the earlier years of LMBCS, was to use up the spaces of the form - [G] D1, - + [G] D1, + where 'G' was one of the single-byte character groups, and - D1 was less than 0x80. These sequences are gathered together - into a Lotus-invented doublebyte character set to represent a - lot of stray values. Internally, in this implementation, we track this + D1 was less than 0x80. These sequences are gathered together + into a Lotus-invented doublebyte character set to represent a + lot of stray values. Internally, in this implementation, we track this as group '0', as a place to tuck this exceptions list.*/ -#define ULMBCS_GRP_EXCEPT 0x00 +#define ULMBCS_GRP_EXCEPT 0x00 /* - Finally, as the durability and usefulness of UNICODE became clear, - LOTUS added a new group 0x14 to hold Unicode values not otherwise + Finally, as the durability and usefulness of UNICODE became clear, + LOTUS added a new group 0x14 to hold Unicode values not otherwise represented in LMBCS: */ -#define ULMBCS_GRP_UNICODE 0x14 +#define ULMBCS_GRP_UNICODE 0x14 /* The two bytes appearing after a 0x14 are intrepreted as UFT-16 BE -(Big-Endian) characters. The exception comes when the UTF16 +(Big-Endian) characters. The exception comes when the UTF16 representation would have a zero as the second byte. In that case, -'F6' is used in its place, and the bytes are swapped. (This prevents +'F6' is used in its place, and the bytes are swapped. (This prevents LMBCS from encoding any Unicode values of the form U+F6xx, but that's OK: 0xF6xx is in the middle of the Private Use Area.)*/ -#define ULMBCS_UNICOMPATZERO 0xF6 +#define ULMBCS_UNICOMPATZERO 0xF6 -/* It is also useful in our code to have a constant for the size of +/* It is also useful in our code to have a constant for the size of a LMBCS char that holds a literal Unicode value */ -#define ULMBCS_UNICODE_SIZE 3 +#define ULMBCS_UNICODE_SIZE 3 -/* -To squish the LMBCS representations down even further, and to make -translations even faster,sometimes the optimization group byte can be dropped -from a LMBCS character. This is decided on a process-by-process basis. The +/* +To squish the LMBCS representations down even further, and to make +translations even faster,sometimes the optimization group byte can be dropped +from a LMBCS character. This is decided on a process-by-process basis. The group byte that is dropped is called the 'optimization group'. For Notes, the optimzation group is always 0x1.*/ -#define ULMBCS_DEFAULTOPTGROUP 0x1 -/* For 1-2-3 files, the optimzation group is stored in the header of the 1-2-3 -file. +#define ULMBCS_DEFAULTOPTGROUP 0x1 +/* For 1-2-3 files, the optimzation group is stored in the header of the 1-2-3 +file. - In any case, when using ICU, you either pass in the -optimization group as part of the name of the converter (LMBCS-1, LMBCS-2, -etc.). Using plain 'LMBCS' as the name of the converter will give you + In any case, when using ICU, you either pass in the +optimization group as part of the name of the converter (LMBCS-1, LMBCS-2, +etc.). Using plain 'LMBCS' as the name of the converter will give you LMBCS-1. @@ -226,7 +228,7 @@ Because of the extensive use of other character sets, the LMBCS converter keeps a mapping between optimization groups and IBM character sets, so that ICU converters can be created and used as needed. */ -/* As you can see, even though any byte below 0x20 could be an optimization +/* As you can see, even though any byte below 0x20 could be an optimization byte, only those at 0x13 or below can map to an actual converter. To limit some loops and searches, we define a value for that last group converter:*/ @@ -255,12 +257,12 @@ static const char * const OptGroupByteToCPName[ULMBCS_GRP_LAST + 1] = { /* 0x0013 */ "windows-936" /* The rest are null, including the 0x0014 Unicode compatibility region - and 0x0019, the 1-2-3 system range control char */ + and 0x0019, the 1-2-3 system range control char */ }; -/* That's approximately all the data that's needed for translating - LMBCS to Unicode. +/* That's approximately all the data that's needed for translating + LMBCS to Unicode. However, to translate Unicode to LMBCS, we need some more support. @@ -268,18 +270,18 @@ However, to translate Unicode to LMBCS, we need some more support. That's because there are often more than one possible mappings from a Unicode code point back into LMBCS. The first thing we do is look up into a table to figure out if there are more than one possible mappings. This table, -arranged by Unicode values (including ranges) either lists which group +arranged by Unicode values (including ranges) either lists which group to use, or says that it could go into one or more of the SBCS sets, or -into one or more of the DBCS sets. (If the character exists in both DBCS & -SBCS, the table will place it in the SBCS sets, to make the LMBCS code point +into one or more of the DBCS sets. (If the character exists in both DBCS & +SBCS, the table will place it in the SBCS sets, to make the LMBCS code point length as small as possible. Here's the two special markers we use to indicate ambiguous mappings: */ -#define ULMBCS_AMBIGUOUS_SBCS 0x80 /* could fit in more than one - LMBCS sbcs native encoding +#define ULMBCS_AMBIGUOUS_SBCS 0x80 /* could fit in more than one + LMBCS sbcs native encoding (example: most accented latin) */ -#define ULMBCS_AMBIGUOUS_MBCS 0x81 /* could fit in more than one - LMBCS mbcs native encoding +#define ULMBCS_AMBIGUOUS_MBCS 0x81 /* could fit in more than one + LMBCS mbcs native encoding (example: Unihan) */ #define ULMBCS_AMBIGUOUS_ALL 0x82 /* And here's a simple way to see if a group falls in an appropriate range */ @@ -294,7 +296,7 @@ ambiguous mappings: */ /* The table & some code to use it: */ -static const struct _UniLMBCSGrpMap +static const struct _UniLMBCSGrpMap { const UChar uniStartRange; const UChar uniEndRange; @@ -441,29 +443,29 @@ static const struct _UniLMBCSGrpMap {0xFF01, 0xFFEE, ULMBCS_AMBIGUOUS_MBCS}, {0xFFFF, 0xFFFF, ULMBCS_GRP_UNICODE} }; - -static ulmbcs_byte_t + +static ulmbcs_byte_t FindLMBCSUniRange(UChar uniChar) { const struct _UniLMBCSGrpMap * pTable = UniLMBCSGrpMap; - while (uniChar > pTable->uniEndRange) + while (uniChar > pTable->uniEndRange) { pTable++; } - if (uniChar >= pTable->uniStartRange) + if (uniChar >= pTable->uniStartRange) { return pTable->GrpType; } return ULMBCS_GRP_UNICODE; } -/* -We also ask the creator of a converter to send in a preferred locale +/* +We also ask the creator of a converter to send in a preferred locale that we can use in resolving ambiguous mappings. They send the locale -in as a string, and we map it, if possible, to one of the -LMBCS groups. We use this table, and the associated code, to +in as a string, and we map it, if possible, to one of the +LMBCS groups. We use this table, and the associated code, to do the lookup: */ /************************************************** @@ -532,12 +534,12 @@ static const struct _LocaleLMBCSGrpMap }; -static ulmbcs_byte_t +static ulmbcs_byte_t FindLMBCSLocale(const char *LocaleID) { const struct _LocaleLMBCSGrpMap *pTable = LocaleLMBCSGrpMap; - if ((!LocaleID) || (!*LocaleID)) + if ((!LocaleID) || (!*LocaleID)) { return 0; } @@ -559,16 +561,16 @@ FindLMBCSLocale(const char *LocaleID) } -/* - Before we get to the main body of code, here's how we hook up to the rest - of ICU. ICU converters are required to define a structure that includes +/* + Before we get to the main body of code, here's how we hook up to the rest + of ICU. ICU converters are required to define a structure that includes some function pointers, and some common data, in the style of a C++ vtable. There is also room in there for converter-specific data. LMBCS uses that converter-specific data to keep track of the 12 subconverters - we use, the optimization group, and the group (if any) that matches the + we use, the optimization group, and the group (if any) that matches the locale. We have one structure instantiated for each of the 12 possible - optimization groups. To avoid typos & to avoid boring the reader, we - put the declarations of these structures and functions into macros. To see + optimization groups. To avoid typos & to avoid boring the reader, we + put the declarations of these structures and functions into macros. To see the definitions of these structures, see unicode\ucnv_bld.h */ @@ -611,7 +613,7 @@ const UConverterSharedData _LMBCSData##n= \ /* The only function we needed to duplicate 12 times was the 'open' function, which will do basically the same thing except set a different -optimization group. So, we put the common stuff into a worker function, +optimization group. So, we put the common stuff into a worker function, and set up another macro to stamp out the 12 open functions:*/ #define DEFINE_LMBCS_OPEN(n) \ static void \ @@ -621,7 +623,7 @@ static void \ /* Here's the open worker & the common close function */ -static void +static void _LMBCSOpenWorker(UConverter* _this, UConverterLoadArgs *pArgs, UErrorCode* err, @@ -639,7 +641,7 @@ _LMBCSOpenWorker(UConverter* _this, stackArgs.onlyTestIsLoadable = pArgs->onlyTestIsLoadable; - for (i=0; i <= ULMBCS_GRP_LAST && U_SUCCESS(*err); i++) + for (i=0; i <= ULMBCS_GRP_LAST && U_SUCCESS(*err); i++) { if(OptGroupByteToCPName[i] != NULL) { extraInfo->OptGrpConverter[i] = ucnv_loadSharedData(OptGroupByteToCPName[i], &stackPieces, &stackArgs, err); @@ -659,8 +661,8 @@ _LMBCSOpenWorker(UConverter* _this, } } -static void -_LMBCSClose(UConverter * _this) +static void +_LMBCSClose(UConverter * _this) { if (_this->extraInfo != NULL) { @@ -684,10 +686,10 @@ typedef struct LMBCSClone { UConverterDataLMBCS lmbcs; } LMBCSClone; -static UConverter * -_LMBCSSafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, +static UConverter * +_LMBCSSafeClone(const UConverter *cnv, + void *stackBuffer, + int32_t *pBufferSize, UErrorCode *status) { LMBCSClone *newLMBCS; UConverterDataLMBCS *extraInfo; @@ -728,10 +730,10 @@ _LMBCSSafeClone(const UConverter *cnv, * This may need to be looked at again as Lotus uses _LMBCSGetUnicodeSet(). (091216) */ -/* +/* Here's the basic helper function that we use when converting from - Unicode to LMBCS, and we suspect that a Unicode character will fit into - one of the 12 groups. The return value is the number of bytes written + Unicode to LMBCS, and we suspect that a Unicode character will fit into + one of the 12 groups. The return value is the number of bytes written starting at pStartLMBCS (if any). */ @@ -743,7 +745,7 @@ LMBCSConversionWorker ( UChar * pUniChar, /* The input unicode character */ ulmbcs_byte_t * lastConverterIndex, /* output: track last successful group used */ UBool * groups_tried /* output: track any unsuccessful groups */ -) +) { ulmbcs_byte_t * pLMBCS = pStartLMBCS; UConverterSharedData * xcnv = extraInfo->OptGrpConverter[group]; @@ -772,7 +774,7 @@ LMBCSConversionWorker ( except with the exception group. */ U_ASSERT((firstByte <= ULMBCS_C0END) || (firstByte >= ULMBCS_C1START) || (group == ULMBCS_GRP_EXCEPT)); - + /* use converted data: first write 0, 1 or two group bytes */ if (group != ULMBCS_GRP_EXCEPT && extraInfo->OptGroup != group) { @@ -812,11 +814,11 @@ LMBCSConversionWorker ( } -/* This is a much simpler version of above, when we +/* This is a much simpler version of above, when we know we are writing LMBCS using the Unicode group */ -static size_t -LMBCSConvertUni(ulmbcs_byte_t * pLMBCS, UChar uniChar) +static size_t +LMBCSConvertUni(ulmbcs_byte_t * pLMBCS, UChar uniChar) { /* encode into LMBCS Unicode range */ uint8_t LowCh = (uint8_t)(uniChar & 0x00FF); @@ -840,7 +842,7 @@ LMBCSConvertUni(ulmbcs_byte_t * pLMBCS, UChar uniChar) /* The main Unicode to LMBCS conversion function */ -static void +static void _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, UErrorCode* err) { @@ -851,21 +853,21 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, int32_t bytes_written; UBool groups_tried[ULMBCS_GRP_LAST+1]; UConverterDataLMBCS * extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - int sourceIndex = 0; + int sourceIndex = 0; /* Basic strategy: attempt to fill in local LMBCS 1-char buffer.(LMBCS) - If that succeeds, see if it will all fit into the target & copy it over + If that succeeds, see if it will all fit into the target & copy it over if it does. We try conversions in the following order: 1. Single-byte ascii & special fixed control chars (&null) - 2. Look up group in table & try that (could be + 2. Look up group in table & try that (could be A) Unicode group B) control group, - C) national encoding, + C) national encoding, or ambiguous SBCS or MBCS group (on to step 4...) - + 3. If its ambiguous, try this order: A) The optimization group B) The locale group @@ -904,8 +906,8 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, extraInfo->localeConverterIndex = ULMBCS_GRP_L1; } if (((uniChar > ULMBCS_C0END) && (uniChar < ULMBCS_C1START)) || - uniChar == 0 || uniChar == ULMBCS_HT || uniChar == ULMBCS_CR || - uniChar == ULMBCS_LF || uniChar == ULMBCS_123SYSTEMRANGE + uniChar == 0 || uniChar == ULMBCS_HT || uniChar == ULMBCS_CR || + uniChar == ULMBCS_LF || uniChar == ULMBCS_123SYSTEMRANGE ) { *pLMBCS++ = (ulmbcs_byte_t ) uniChar; @@ -913,15 +915,15 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, } - if (!bytes_written) + if (!bytes_written) { /* Check by UNICODE range (Strategy 2) */ ulmbcs_byte_t group = FindLMBCSUniRange(uniChar); - + if (group == ULMBCS_GRP_UNICODE) /* (Strategy 2A) */ { pLMBCS += LMBCSConvertUni(pLMBCS,uniChar); - + bytes_written = (int32_t)(pLMBCS - LMBCS); } else if (group == ULMBCS_GRP_CTRL) /* (Strategy 2B) */ @@ -943,7 +945,7 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, { /* a specific converter has been identified - use it */ bytes_written = (int32_t)LMBCSConversionWorker ( - extraInfo, group, pLMBCS, &uniChar, + extraInfo, group, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } if (!bytes_written) /* the ambiguous group cases (Strategy 3) */ @@ -996,15 +998,15 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, } if (!bytes_written) { - /* just check every possible matching converter (Strategy 3D) */ + /* just check every possible matching converter (Strategy 3D) */ ulmbcs_byte_t grp_start; - ulmbcs_byte_t grp_end; + ulmbcs_byte_t grp_end; ulmbcs_byte_t grp_ix; - grp_start = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) - ? ULMBCS_DOUBLEOPTGROUP_START + grp_start = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) + ? ULMBCS_DOUBLEOPTGROUP_START : ULMBCS_GRP_L1); - grp_end = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) - ? ULMBCS_GRP_LAST + grp_end = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) + ? ULMBCS_GRP_LAST : ULMBCS_GRP_TH); if(group == ULMBCS_AMBIGUOUS_ALL) { @@ -1012,22 +1014,22 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, grp_end = ULMBCS_GRP_LAST; } for (grp_ix = grp_start; - grp_ix <= grp_end && !bytes_written; + grp_ix <= grp_end && !bytes_written; grp_ix++) { if (extraInfo->OptGrpConverter [grp_ix] && !groups_tried [grp_ix]) { bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - grp_ix, pLMBCS, &uniChar, + grp_ix, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } } - /* a final conversion fallback to the exceptions group if its likely + /* a final conversion fallback to the exceptions group if its likely to be single byte (Strategy 3E) */ if (!bytes_written && grp_start == ULMBCS_GRP_L1) { bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - ULMBCS_GRP_EXCEPT, pLMBCS, &uniChar, + ULMBCS_GRP_EXCEPT, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } } @@ -1040,7 +1042,7 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, } } } - + /* we have a translation. increment source and write as much as posible to target */ args->source++; pLMBCS = LMBCS; @@ -1069,7 +1071,7 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, } /*Fix for SPR#DJOE66JFN3 (Lotus)*/ extraInfo->localeConverterIndex = OldConverterIndex; - } + } } @@ -1083,7 +1085,7 @@ GetUniFromLMBCSUni(char const ** ppLMBCSin) /* Called with LMBCS-style Unicode uint8_t HighCh = *(*ppLMBCSin)++; /* Big-endian Unicode in LMBCS compatibility group*/ uint8_t LowCh = *(*ppLMBCSin)++; - if (HighCh == ULMBCS_UNICOMPATZERO ) + if (HighCh == ULMBCS_UNICOMPATZERO ) { HighCh = LowCh; LowCh = 0; /* zero-byte in LSB special character */ @@ -1093,7 +1095,7 @@ GetUniFromLMBCSUni(char const ** ppLMBCSin) /* Called with LMBCS-style Unicode -/* CHECK_SOURCE_LIMIT: Helper macro to verify that there are at least'index' +/* CHECK_SOURCE_LIMIT: Helper macro to verify that there are at least'index' bytes left in source up to sourceLimit.Errors appropriately if not. If we reach the limit, then update the source pointer to there to consume all input as required by ICU converter semantics. @@ -1107,7 +1109,7 @@ GetUniFromLMBCSUni(char const ** ppLMBCSin) /* Called with LMBCS-style Unicode /* Return the Unicode representation for the current LMBCS character */ -static UChar32 +static UChar32 _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, UErrorCode* err) { @@ -1122,32 +1124,32 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, } /* Grab first byte & save address for error recovery */ CurByte = *((ulmbcs_byte_t *) (args->source++)); - + /* * at entry of each if clause: * 1. 'CurByte' points at the first byte of a LMBCS character - * 2. '*source'points to the next byte of the source stream after 'CurByte' + * 2. '*source'points to the next byte of the source stream after 'CurByte' * * the job of each if clause is: * 1. set '*source' to point at the beginning of next char (nop if LMBCS char is only 1 byte) * 2. set 'uniChar' up with the right Unicode value, or set 'err' appropriately */ - + /* First lets check the simple fixed values. */ if(((CurByte > ULMBCS_C0END) && (CurByte < ULMBCS_C1START)) /* ascii range */ - || (CurByte == 0) - || CurByte == ULMBCS_HT || CurByte == ULMBCS_CR + || (CurByte == 0) + || CurByte == ULMBCS_HT || CurByte == ULMBCS_CR || CurByte == ULMBCS_LF || CurByte == ULMBCS_123SYSTEMRANGE) { uniChar = CurByte; } - else + else { UConverterDataLMBCS * extraInfo; - ulmbcs_byte_t group; - UConverterSharedData *cnv; - + ulmbcs_byte_t group; + UConverterSharedData *cnv; + if (CurByte == ULMBCS_GRP_CTRL) /* Control character group - no opt group update */ { ulmbcs_byte_t C0C1byte; @@ -1155,15 +1157,15 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, C0C1byte = *(args->source)++; uniChar = (C0C1byte < ULMBCS_C1START) ? C0C1byte - ULMBCS_CTRLOFFSET : C0C1byte; } - else + else if (CurByte == ULMBCS_GRP_UNICODE) /* Unicode compatibility group: BigEndian UTF16 */ { CHECK_SOURCE_LIMIT(2); - + /* don't check for error indicators fffe/ffff below */ return GetUniFromLMBCSUni(&(args->source)); } - else if (CurByte <= ULMBCS_CTRLOFFSET) + else if (CurByte <= ULMBCS_CTRLOFFSET) { group = CurByte; /* group byte is in the source */ extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; @@ -1171,7 +1173,7 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, { /* this is not a valid group byte - no converter*/ *err = U_INVALID_CHAR_FOUND; - } + } else if (group >= ULMBCS_DOUBLEOPTGROUP_START) /* double byte conversion */ { @@ -1192,21 +1194,21 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, else { /* single byte conversion */ CHECK_SOURCE_LIMIT(1); CurByte = *(args->source)++; - + if (CurByte >= ULMBCS_C1START) { uniChar = _MBCS_SINGLE_SIMPLE_GET_NEXT_BMP(cnv, CurByte); } else { - /* The non-optimizable oddballs where there is an explicit byte + /* The non-optimizable oddballs where there is an explicit byte * AND the second byte is not in the upper ascii range */ char bytes[2]; extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - cnv = extraInfo->OptGrpConverter [ULMBCS_GRP_EXCEPT]; - + cnv = extraInfo->OptGrpConverter [ULMBCS_GRP_EXCEPT]; + /* Lookup value must include opt group */ bytes[0] = group; bytes[1] = CurByte; @@ -1249,7 +1251,7 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, /* The exported function that converts lmbcs to one or more UChars - currently UTF-16 */ -static void +static void _LMBCSToUnicodeWithOffsets(UConverterToUnicodeArgs* args, UErrorCode* err) { @@ -1267,15 +1269,15 @@ _LMBCSToUnicodeWithOffsets(UConverterToUnicodeArgs* args, if (args->converter->toULength) /* reassemble char from previous call */ { - const char *saveSourceLimit; + const char *saveSourceLimit; size_t size_old = args->converter->toULength; /* limit from source is either remainder of temp buffer, or user limit on source */ size_t size_new_maybe_1 = sizeof(LMBCS) - size_old; size_t size_new_maybe_2 = args->sourceLimit - args->source; size_t size_new = (size_new_maybe_1 < size_new_maybe_2) ? size_new_maybe_1 : size_new_maybe_2; - - + + uprv_memcpy(LMBCS, args->converter->toUBytes, size_old); uprv_memcpy(LMBCS + size_old, args->source, size_new); saveSourceLimit = args->sourceLimit; @@ -1332,7 +1334,7 @@ _LMBCSToUnicodeWithOffsets(UConverterToUnicodeArgs* args, { *err = U_BUFFER_OVERFLOW_ERROR; } - else if (U_FAILURE(*err)) + else if (U_FAILURE(*err)) { /* If character incomplete or unmappable/illegal, store it in toUBytes[] */ args->converter->toULength = savebytes; diff --git a/deps/icu-small/source/common/ucnv_set.c b/deps/icu-small/source/common/ucnv_set.c index 3d8d392729176d..c3933ab6109cbf 100644 --- a/deps/icu-small/source/common/ucnv_set.c +++ b/deps/icu-small/source/common/ucnv_set.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucnv_u16.c b/deps/icu-small/source/common/ucnv_u16.c index 888b69aa45b60a..1458a8a4b32042 100644 --- a/deps/icu-small/source/common/ucnv_u16.c +++ b/deps/icu-small/source/common/ucnv_u16.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2002-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -195,7 +197,7 @@ _UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, } else { length=0; /* from here on, length counts the bytes in overflow[] */ } - + if(c!=0) { /* * c is a surrogate, and @@ -563,7 +565,7 @@ _UTF16BEGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *err) { pArgs->source=(const char *)s; return c; -} +} static void _UTF16BEReset(UConverter *cnv, UConverterResetChoice choice) { @@ -621,7 +623,10 @@ static const UConverterImpl _UTF16BEImpl={ _UTF16BEGetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16BEStaticData={ @@ -791,7 +796,7 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, } else { length=0; /* from here on, length counts the bytes in overflow[] */ } - + if(c!=0) { /* * c is a surrogate, and @@ -1159,7 +1164,7 @@ _UTF16LEGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *err) { pArgs->source=(const char *)s; return c; -} +} static void _UTF16LEReset(UConverter *cnv, UConverterResetChoice choice) { @@ -1217,7 +1222,10 @@ static const UConverterImpl _UTF16LEImpl={ _UTF16LEGetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; @@ -1486,7 +1494,10 @@ static const UConverterImpl _UTF16Impl = { _UTF16GetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16StaticData = { @@ -1528,7 +1539,10 @@ static const UConverterImpl _UTF16v2Impl = { _UTF16GetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16v2StaticData = { diff --git a/deps/icu-small/source/common/ucnv_u32.c b/deps/icu-small/source/common/ucnv_u32.c index fe4ea102830ad3..b0a0fe28529ed2 100644 --- a/deps/icu-small/source/common/ucnv_u32.c +++ b/deps/icu-small/source/common/ucnv_u32.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2002-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -82,7 +84,7 @@ T_UConverter_toUnicode_UTF32_BE(UConverterToUnicodeArgs * args, if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) + if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ *(myTarget++) = (UChar) ch; @@ -432,7 +434,7 @@ T_UConverter_getNextUChar_UTF32_BE(UConverterToUnicodeArgs* args, } length = (int32_t)((const uint8_t *)args->sourceLimit - mySource); - if (length < 4) + if (length < 4) { /* got a partial character */ uprv_memcpy(args->converter->toUBytes, mySource, length); @@ -480,7 +482,10 @@ static const UConverterImpl _UTF32BEImpl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -635,7 +640,7 @@ T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) + if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ *(myTarget++) = (UChar) ch; @@ -924,7 +929,7 @@ T_UConverter_getNextUChar_UTF32_LE(UConverterToUnicodeArgs* args, } length = (int32_t)((const uint8_t *)args->sourceLimit - mySource); - if (length < 4) + if (length < 4) { /* got a partial character */ uprv_memcpy(args->converter->toUBytes, mySource, length); @@ -972,7 +977,10 @@ static const UConverterImpl _UTF32LEImpl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -1214,7 +1222,10 @@ static const UConverterImpl _UTF32Impl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianess of UTF-32 */ @@ -1234,7 +1245,7 @@ static const UConverterStaticData _UTF32StaticData = { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ }; -const UConverterSharedData _UTF32Data = +const UConverterSharedData _UTF32Data = UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32StaticData, &_UTF32Impl); #endif diff --git a/deps/icu-small/source/common/ucnv_u7.c b/deps/icu-small/source/common/ucnv_u7.c index 448c43e2dc32d0..c3b4d74b9a9149 100644 --- a/deps/icu-small/source/common/ucnv_u7.c +++ b/deps/icu-small/source/common/ucnv_u7.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -760,7 +762,10 @@ static const UConverterImpl _UTF7Impl={ _UTF7GetName, NULL, /* we don't need writeSub() because we never call a callback at fromUnicode() */ NULL, - ucnv_getCompleteUnicodeSet + ucnv_getCompleteUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF7StaticData={ diff --git a/deps/icu-small/source/common/ucnv_u8.c b/deps/icu-small/source/common/ucnv_u8.c index 88b4f5d05aa748..0258347aeb1111 100644 --- a/deps/icu-small/source/common/ucnv_u8.c +++ b/deps/icu-small/source/common/ucnv_u8.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -179,7 +181,7 @@ static void ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) + if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ *(myTarget++) = (UChar) ch; @@ -307,7 +309,7 @@ static void ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeArgs * args, (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) + if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ *(myTarget++) = (UChar) ch; @@ -669,8 +671,8 @@ static UChar32 ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, isLegalSequence = 1; ch = myByte << 6; switch(extraBytesToWrite) - { - /* note: code falls through cases! (sic)*/ + { + /* note: code falls through cases! (sic)*/ case 6: ch += (myByte = *source); ch <<= 6; @@ -748,7 +750,7 @@ static UChar32 ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, cnv->toULength = i; *err = U_ILLEGAL_CHAR_FOUND; return 0xffff; -} +} /* UTF-8-from-UTF-8 conversion functions ------------------------------------ */ @@ -1072,7 +1074,10 @@ static const UConverterImpl _CESU8Impl={ NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getCompleteUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _CESU8StaticData={ diff --git a/deps/icu-small/source/common/ucnvbocu.cpp b/deps/icu-small/source/common/ucnvbocu.cpp index 2b97c02c318eba..69763ca32136af 100644 --- a/deps/icu-small/source/common/ucnvbocu.cpp +++ b/deps/icu-small/source/common/ucnvbocu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -386,7 +388,7 @@ packDiff(int32_t diff) { } -static void +static void U_CALLCONV _Bocu1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -647,7 +649,7 @@ _Bocu1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, * re-copy the original function and remove the variables * offsets, sourceIndex, and nextSourceIndex. */ -static void +static void U_CALLCONV _Bocu1FromUnicode(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -950,7 +952,7 @@ decodeBocu1TrailByte(int32_t count, int32_t b) { } } -static void +static void U_CALLCONV _Bocu1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -1173,7 +1175,7 @@ _Bocu1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, * re-copy the original function and remove the variables * offsets, sourceIndex, and nextSourceIndex. */ -static void +static void U_CALLCONV _Bocu1ToUnicode(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; diff --git a/deps/icu-small/source/common/ucnvdisp.c b/deps/icu-small/source/common/ucnvdisp.c index 4075be66da7645..e30f665f4a08e3 100644 --- a/deps/icu-small/source/common/ucnvdisp.c +++ b/deps/icu-small/source/common/ucnvdisp.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnvhz.c b/deps/icu-small/source/common/ucnvhz.c index 56b7ecf666e422..d35551628b0398 100644 --- a/deps/icu-small/source/common/ucnvhz.c +++ b/deps/icu-small/source/common/ucnvhz.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2000-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -11,7 +13,7 @@ * created on: 2000oct16 * created by: Ram Viswanadha * 10/31/2000 Ram Implemented offsets logic function -* +* */ #include "unicode/utypes.h" @@ -66,7 +68,7 @@ typedef struct{ -static void +static void _HZOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ UConverter *gbConverter; if(pArgs->onlyTestIsLoadable) { @@ -92,7 +94,7 @@ _HZOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ } } -static void +static void _HZClose(UConverter *cnv){ if(cnv->extraInfo != NULL) { ucnv_close (((UConverterDataHZ *) (cnv->extraInfo))->gbConverter); @@ -103,7 +105,7 @@ _HZClose(UConverter *cnv){ } } -static void +static void _HZReset(UConverter *cnv, UConverterResetChoice choice){ if(choice<=UCNV_RESET_TO_UNICODE) { cnv->toUnicodeStatus = 0; @@ -115,7 +117,7 @@ _HZReset(UConverter *cnv, UConverterResetChoice choice){ } if(choice!=UCNV_RESET_TO_UNICODE) { cnv->fromUnicodeStatus= 0; - cnv->fromUChar32=0x0000; + cnv->fromUChar32=0x0000; if(cnv->extraInfo != NULL){ ((UConverterDataHZ*)cnv->extraInfo)->isEscapeAppended = FALSE; ((UConverterDataHZ*)cnv->extraInfo)->targetIndex = 0; @@ -127,7 +129,7 @@ _HZReset(UConverter *cnv, UConverterResetChoice choice){ /**************************************HZ Encoding************************************************* * Rules for HZ encoding -* +* * In ASCII mode, a byte is interpreted as an ASCII character, unless a * '~' is encountered. The character '~' is an escape character. By * convention, it must be immediately followed ONLY by '~', '{' or '\n' @@ -150,7 +152,7 @@ _HZReset(UConverter *cnv, UConverterResetChoice choice){ */ -static void +static void UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[2]; @@ -160,7 +162,7 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UChar32 targetUniChar = 0x0000; int32_t mySourceChar = 0x0000; UConverterDataHZ* myData=(UConverterDataHZ*)(args->converter->extraInfo); - tempBuf[0]=0; + tempBuf[0]=0; tempBuf[1]=0; /* Calling code already handles this situation. */ @@ -168,11 +170,11 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, *err = U_ILLEGAL_ARGUMENT_ERROR; return; }*/ - + while(mySource< mySourceLimit){ - + if(myTarget < args->targetLimit){ - + mySourceChar= (unsigned char) *mySource++; if(args->converter->mode == UCNV_TILDE) { @@ -330,7 +332,7 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, } -static void +static void UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, UErrorCode * err){ const UChar *mySource = args->source; @@ -347,7 +349,7 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, UBool oldIsTargetUCharDBCS; int len =0; const char* escSeq=NULL; - + /* Calling code already handles this situation. */ /*if ((args->converter == NULL) || (args->targetLimit < myTarget) || (args->sourceLimit < args->source)){ *err = U_ILLEGAL_ARGUMENT_ERROR; @@ -360,9 +362,9 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, while (mySourceIndex < mySourceLength){ targetUniChar = missingCharMarker; if (myTargetIndex < targetLength){ - + mySourceChar = (UChar) mySource[mySourceIndex++]; - + oldIsTargetUCharDBCS = isTargetUCharDBCS; if(mySourceChar ==UCNV_TILDE){ @@ -387,7 +389,7 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, } } if (targetUniChar != missingCharMarker){ - myConverterData->isTargetUCharDBCS = isTargetUCharDBCS = (UBool)(targetUniChar>0x00FF); + myConverterData->isTargetUCharDBCS = isTargetUCharDBCS = (UBool)(targetUniChar>0x00FF); if(oldIsTargetUCharDBCS != isTargetUCharDBCS || !myConverterData->isEscapeAppended ){ /*Shifting from a double byte to single byte mode*/ if(!isTargetUCharDBCS){ @@ -401,10 +403,10 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, escSeq = DB_ESCAPE; CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); myConverterData->isEscapeAppended = TRUE; - + } } - + if(isTargetUCharDBCS){ if( myTargetIndex > 8); @@ -419,7 +421,7 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, }else{ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; *err = U_BUFFER_OVERFLOW_ERROR; - } + } }else{ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =(char) (targetUniChar >> 8); args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; @@ -432,7 +434,7 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, if(offsets){ *(offsets++) = mySourceIndex-1; } - + }else{ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; *err = U_BUFFER_OVERFLOW_ERROR; @@ -501,7 +503,7 @@ _HZ_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *e char *p; char buffer[4]; p = buffer; - + if( convData->isTargetUCharDBCS){ *p++= UCNV_TILDE; *p++= UCNV_CLOSE_BRACE; @@ -533,10 +535,10 @@ struct cloneHZStruct }; -static UConverter * -_HZ_SafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, +static UConverter * +_HZ_SafeClone(const UConverter *cnv, + void *stackBuffer, + int32_t *pBufferSize, UErrorCode *status) { struct cloneHZStruct * localClone; @@ -584,20 +586,20 @@ _HZ_GetUnicodeSet(const UConverter *cnv, static const UConverterImpl _HZImpl={ UCNV_HZ, - + NULL, NULL, - + _HZOpen, _HZClose, _HZReset, - + UConverter_toUnicode_HZ_OFFSETS_LOGIC, UConverter_toUnicode_HZ_OFFSETS_LOGIC, UConverter_fromUnicode_HZ_OFFSETS_LOGIC, UConverter_fromUnicode_HZ_OFFSETS_LOGIC, NULL, - + NULL, NULL, _HZ_WriteSub, @@ -608,14 +610,14 @@ static const UConverterImpl _HZImpl={ static const UConverterStaticData _HZStaticData={ sizeof(UConverterStaticData), "HZ", - 0, - UCNV_IBM, - UCNV_HZ, - 1, + 0, + UCNV_IBM, + UCNV_HZ, + 1, 4, { 0x1a, 0, 0, 0 }, 1, - FALSE, + FALSE, FALSE, 0, 0, diff --git a/deps/icu-small/source/common/ucnvisci.c b/deps/icu-small/source/common/ucnvisci.c index c0106f9800de5e..b520fc244e3003 100644 --- a/deps/icu-small/source/common/ucnvisci.c +++ b/deps/icu-small/source/common/ucnvisci.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines @@ -210,13 +212,13 @@ static void _ISCIIOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *e converterData->currentMaskFromUnicode = converterData->currentMaskToUnicode = converterData->defMaskToUnicode = lookupInitialData[pArgs->options & UCNV_OPTIONS_VERSION_MASK].maskEnum; - + converterData->isFirstBuffer=TRUE; (void)uprv_strcpy(converterData->name, ISCII_CNV_PREFIX); len = (int32_t)uprv_strlen(converterData->name); converterData->name[len]= (char)((pArgs->options & UCNV_OPTIONS_VERSION_MASK) + '0'); converterData->name[len+1]=0; - + converterData->prevToUnicodeStatus = 0x0000; } else { uprv_free(cnv->extraInfo); @@ -928,12 +930,12 @@ static void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( break; } } - + sourceChar = *source++; tempContextFromUnicode = converterData->contextCharFromUnicode; - + targetByteUnit = missingCharMarker; - + /*check if input is in ASCII and C0 control codes range*/ if (sourceChar <= ASCII_END) { args->converter->fromUnicodeStatus = sourceChar; @@ -983,8 +985,8 @@ static void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( deltaChanged =TRUE; converterData->isFirstBuffer=FALSE; } - - if (converterData->currentDeltaFromUnicode == PNJ_DELTA) { + + if (converterData->currentDeltaFromUnicode == PNJ_DELTA) { if (sourceChar == PNJ_TIPPI) { /* Make sure Tippi is converterd to Bindi. */ sourceChar = PNJ_BINDI; @@ -992,7 +994,7 @@ static void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( /* This is for consonant cluster handling. */ converterData->contextCharFromUnicode = PNJ_ADHAK; } - + } /* Normalize all Indic codepoints to Devanagari and map them to ISCII */ /* now subtract the new delta from sourceChar*/ @@ -1025,7 +1027,7 @@ static void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( break; } } - + if (converterData->currentDeltaFromUnicode == PNJ_DELTA && (sourceChar + PNJ_DELTA) == PNJ_ADHAK) { continue; } @@ -1182,7 +1184,7 @@ static void UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *ar UChar32 tempTargetUniChar = 0x0000; UChar* contextCharToUnicode= NULL; UBool found; - int i; + int i; int offset = 0; if ((args->converter == NULL) || (target < args->target) || (source < args->source)) { @@ -1238,7 +1240,7 @@ static void UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *ar /* We currently support only Anudatta and Devanagari abbreviation sign */ if (sourceChar==0xBF || sourceChar == 0xB8) { targetUniChar = (sourceChar==0xBF) ? DEV_ABBR_SIGN : DEV_ANUDATTA; - + /* find out if the mapping is valid in this state */ if (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode) { *contextCharToUnicode= NO_CHAR_MARKER; @@ -1445,7 +1447,7 @@ static void UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *ar WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); data->prevToUnicodeStatus = 0x0000; } - /* Check to make sure that Bindi and Tippi are handled correctly for Gurmukhi script. + /* Check to make sure that Bindi and Tippi are handled correctly for Gurmukhi script. * If 0xA2 is preceded by a codepoint in the PNJ_BINDI_TIPPI_SET then the target codepoint should be Tippi instead of Bindi. */ if (data->currentDeltaToUnicode == PNJ_DELTA && (targetUniChar + PNJ_DELTA) == PNJ_BINDI && isPNJBindiTippi((*toUnicodeStatus + PNJ_DELTA))) { diff --git a/deps/icu-small/source/common/ucnvlat1.c b/deps/icu-small/source/common/ucnvlat1.c index 30ebbeff37609b..f17777f066cfc8 100644 --- a/deps/icu-small/source/common/ucnvlat1.c +++ b/deps/icu-small/source/common/ucnvlat1.c @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2000-2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/common/ucnvmbcs.cpp b/deps/icu-small/source/common/ucnvmbcs.cpp index a3b10744532cf5..ffbb9af7c467da 100644 --- a/deps/icu-small/source/common/ucnvmbcs.cpp +++ b/deps/icu-small/source/common/ucnvmbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -33,7 +35,7 @@ * limitations and adds m:n character mappings and other features. * See ucnv_ext.h for details. * -* Change history: +* Change history: * * 5/6/2001 Ram Moved MBCS_SINGLE_RESULT_FROM_U,MBCS_STAGE_2_FROM_U, * MBCS_VALUE_2_FROM_STAGE_2, MBCS_VALUE_4_FROM_STAGE_2 @@ -375,53 +377,55 @@ typedef UBool U_CALLCONV UConverterEnumToUCallback(const void *context, uint32_t value, UChar32 codePoints[32]); -static void +static void U_CALLCONV ucnv_MBCSLoad(UConverterSharedData *sharedData, UConverterLoadArgs *pArgs, const uint8_t *raw, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSUnload(UConverterSharedData *sharedData); -static void +static void U_CALLCONV ucnv_MBCSOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *pErrorCode); -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSGetStarters(const UConverter* cnv, UBool starters[256], UErrorCode *pErrorCode); -static const char * +U_CDECL_BEGIN +static const char* U_CALLCONV ucnv_MBCSGetName(const UConverter *cnv); +U_CDECL_END -static void +static void U_CALLCONV ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs, int32_t offsetIndex, UErrorCode *pErrorCode); -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSGetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode); @@ -503,7 +507,6 @@ static const UConverterImpl _MBCSImpl={ NULL }; - /* Static data is in tools/makeconv/ucnvstat.c for data-based * converters. Be sure to update it as well. */ @@ -845,7 +848,7 @@ ucnv_MBCSEnumToUnicode(UConverterMBCSTable *mbcsTable, } } -U_CFUNC void +U_CFUNC void ucnv_MBCSGetFilteredUnicodeSetForUnicode(const UConverterSharedData *sharedData, const USetAdder *sa, UConverterUnicodeSet which, @@ -1067,7 +1070,7 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData, pErrorCode); } -static void +static void U_CALLCONV ucnv_MBCSGetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, @@ -1547,7 +1550,7 @@ reconstituteData(UConverterMBCSTable *mbcsTable, /* MBCS setup functions ----------------------------------------------------- */ -static void +static void U_CALLCONV ucnv_MBCSLoad(UConverterSharedData *sharedData, UConverterLoadArgs *pArgs, const uint8_t *raw, @@ -1872,7 +1875,7 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData, } } -static void +static void U_CALLCONV ucnv_MBCSUnload(UConverterSharedData *sharedData) { UConverterMBCSTable *mbcsTable=&sharedData->mbcs; @@ -1890,7 +1893,7 @@ ucnv_MBCSUnload(UConverterSharedData *sharedData) { } } -static void +static void U_CALLCONV ucnv_MBCSOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *pErrorCode) { @@ -1981,7 +1984,9 @@ ucnv_MBCSOpen(UConverter *cnv, #endif } -static const char * +U_CDECL_BEGIN + +static const char* U_CALLCONV ucnv_MBCSGetName(const UConverter *cnv) { if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0 && cnv->sharedData->mbcs.swapLFNLName!=NULL) { return cnv->sharedData->mbcs.swapLFNLName; @@ -1989,10 +1994,12 @@ ucnv_MBCSGetName(const UConverter *cnv) { return cnv->sharedData->staticData->name; } } +U_CDECL_END + /* MBCS-to-Unicode conversion functions ------------------------------------- */ -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetFallback(UConverterMBCSTable *mbcsTable, uint32_t offset) { const _MBCSToUFallback *toUFallbacks; uint32_t i, start, limit; @@ -2955,7 +2962,7 @@ ucnv_MBCSSingleGetNextUChar(UConverterToUnicodeArgs *pArgs, * * All normal mappings and errors are handled here. */ -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -5012,7 +5019,7 @@ utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 }; static const UChar32 utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; -static void +static void U_CALLCONV ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode) { @@ -5318,7 +5325,7 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, pFromUArgs->target=(char *)target; } -static void +static void U_CALLCONV ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode) { @@ -5630,7 +5637,7 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, /* miscellaneous ------------------------------------------------------------ */ -static void +static void U_CALLCONV ucnv_MBCSGetStarters(const UConverter* cnv, UBool starters[256], UErrorCode *) { @@ -5653,7 +5660,7 @@ ucnv_MBCSIsLeadByte(UConverterSharedData *sharedData, char byte) { return (UBool)MBCS_ENTRY_IS_TRANSITION(sharedData->mbcs.stateTable[0][(uint8_t)byte]); } -static void +static void U_CALLCONV ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs, int32_t offsetIndex, UErrorCode *pErrorCode) { diff --git a/deps/icu-small/source/common/ucnvmbcs.h b/deps/icu-small/source/common/ucnvmbcs.h index df87bae16cff89..5bbbae7a890634 100644 --- a/deps/icu-small/source/common/ucnvmbcs.h +++ b/deps/icu-small/source/common/ucnvmbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -178,15 +180,15 @@ * -- normal base table with optional extension * * int32_t stateTable[countStates][256]; - * + * * struct _MBCSToUFallback { (fallbacks are sorted by offset) * uint32_t offset; * UChar32 codePoint; * } toUFallbacks[countToUFallbacks]; - * + * * uint16_t unicodeCodeUnits[(offsetFromUTable-offsetToUCodeUnits)/2]; * (padded to an even number of units) - * + * * -- stage 1 tables * if(staticData.unicodeMask&UCNV_HAS_SUPPLEMENTARY) { * -- stage 1 table for all of Unicode @@ -564,10 +566,10 @@ ucnv_MBCSSingleFromUChar32(UConverterSharedData *sharedData, U_CFUNC UConverterType ucnv_MBCSGetType(const UConverter* converter); -U_CFUNC void +U_CFUNC void ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode); -U_CFUNC void +U_CFUNC void ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode); diff --git a/deps/icu-small/source/common/ucnvscsu.c b/deps/icu-small/source/common/ucnvscsu.c index 36e33bde183a78..9849cdebbbb80a 100644 --- a/deps/icu-small/source/common/ucnvscsu.c +++ b/deps/icu-small/source/common/ucnvscsu.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -1966,10 +1968,10 @@ struct cloneSCSUStruct SCSUData mydata; }; -static UConverter * -_SCSUSafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, +static UConverter * +_SCSUSafeClone(const UConverter *cnv, + void *stackBuffer, + int32_t *pBufferSize, UErrorCode *status) { struct cloneSCSUStruct * localClone; diff --git a/deps/icu-small/source/common/ucnvsel.cpp b/deps/icu-small/source/common/ucnvsel.cpp index 353152a3f0f197..573e8b061d6b88 100644 --- a/deps/icu-small/source/common/ucnvsel.cpp +++ b/deps/icu-small/source/common/ucnvsel.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -655,7 +657,7 @@ static const UEnumeration defaultEncodings = { ucnvsel_close_selector_iterator, ucnvsel_count_encodings, uenum_unextDefault, - ucnvsel_next_encoding, + ucnvsel_next_encoding, ucnvsel_reset_iterator }; @@ -764,7 +766,7 @@ ucnvsel_selectForString(const UConverterSelector* sel, } else { limit = NULL; } - + while (limit == NULL ? *s != 0 : s != limit) { UChar32 c; uint16_t pvIndex; @@ -805,7 +807,7 @@ ucnvsel_selectForUTF8(const UConverterSelector* sel, if(s!=NULL) { const char *limit = s + length; - + while (s != limit) { uint16_t pvIndex; UTRIE2_U8_NEXT16(sel->trie, s, limit, pvIndex); diff --git a/deps/icu-small/source/common/ucol_data.h b/deps/icu-small/source/common/ucol_data.h index 023064624c6d82..cdd328eccabed7 100644 --- a/deps/icu-small/source/common/ucol_data.h +++ b/deps/icu-small/source/common/ucol_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucol_swp.cpp b/deps/icu-small/source/common/ucol_swp.cpp index ab6ac7495ad12a..151800d151d99a 100644 --- a/deps/icu-small/source/common/ucol_swp.cpp +++ b/deps/icu-small/source/common/ucol_swp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -246,7 +248,7 @@ swapFormatVersion3(const UDataSwapper *ds, header.contractionUCACombosSize=udata_readInt32(ds, inHeader->contractionUCACombosSize); header.scriptToLeadByte= ds->readUInt32(inHeader->scriptToLeadByte); header.leadByteToScript= ds->readUInt32(inHeader->leadByteToScript); - + /* swap the 32-bit integers in the header */ ds->swapArray32(ds, inHeader, (int32_t)((const char *)&inHeader->jamoSpecial-(const char *)inHeader), outHeader, pErrorCode); @@ -317,21 +319,21 @@ swapFormatVersion3(const UDataSwapper *ds, ds->swapArray16(ds, inBytes+header.contractionUCACombos, (int32_t)count, outBytes+header.contractionUCACombos, pErrorCode); } - + /* swap the script to lead bytes */ if(header.scriptToLeadByte!=0) { int indexCount = ds->readUInt16(*((uint16_t*)(inBytes+header.scriptToLeadByte))); // each entry = 2 * uint16 int dataCount = ds->readUInt16(*((uint16_t*)(inBytes+header.scriptToLeadByte + 2))); // each entry = uint16 - ds->swapArray16(ds, inBytes+header.scriptToLeadByte, + ds->swapArray16(ds, inBytes+header.scriptToLeadByte, 4 + (4 * indexCount) + (2 * dataCount), outBytes+header.scriptToLeadByte, pErrorCode); } - + /* swap the lead byte to scripts */ if(header.leadByteToScript!=0) { int indexCount = ds->readUInt16(*((uint16_t*)(inBytes+header.leadByteToScript))); // each entry = uint16 int dataCount = ds->readUInt16(*((uint16_t*)(inBytes+header.leadByteToScript + 2))); // each entry = uint16 - ds->swapArray16(ds, inBytes+header.leadByteToScript, + ds->swapArray16(ds, inBytes+header.leadByteToScript, 4 + (2 * indexCount) + (2 * dataCount), outBytes+header.leadByteToScript, pErrorCode); } diff --git a/deps/icu-small/source/common/ucol_swp.h b/deps/icu-small/source/common/ucol_swp.h index 855b40419dac5e..422436dd30717d 100644 --- a/deps/icu-small/source/common/ucol_swp.h +++ b/deps/icu-small/source/common/ucol_swp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucurr.cpp b/deps/icu-small/source/common/ucurr.cpp index 4385db51ce0e69..db381733e6664c 100644 --- a/deps/icu-small/source/common/ucurr.cpp +++ b/deps/icu-small/source/common/ucurr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -117,12 +119,12 @@ U_NAMESPACE_BEGIN // EquivIterator iterates over all strings that are equivalent to a given // string, s. Note that EquivIterator will never yield s itself. -class EquivIterator : icu::UMemory { +class EquivIterator : public icu::UMemory { public: // Constructor. hash stores the equivalence relationships; s is the string // for which we find equivalent strings. inline EquivIterator(const icu::Hashtable& hash, const icu::UnicodeString& s) - : _hash(hash) { + : _hash(hash) { _start = _current = &s; } inline ~EquivIterator() { } @@ -240,7 +242,7 @@ static const icu::Hashtable* getCurrSymbolsEquiv(); /** * Cleanup callback func */ -static UBool U_CALLCONV +static UBool U_CALLCONV isoCodes_cleanup(void) { if (gIsoCodes != NULL) { @@ -254,7 +256,7 @@ isoCodes_cleanup(void) /** * Cleanup callback func */ -static UBool U_CALLCONV +static UBool U_CALLCONV currSymbolsEquiv_cleanup(void) { delete const_cast(gCurrSymbolsEquiv); @@ -414,7 +416,7 @@ struct CReg : public icu::UMemory { } uprv_strncpy(id, _id, len); id[len] = 0; - uprv_memcpy(iso, _iso, ISO_CURRENCY_CODE_LENGTH * sizeof(const UChar)); + u_memcpy(iso, _iso, ISO_CURRENCY_CODE_LENGTH); iso[ISO_CURRENCY_CODE_LENGTH] = 0; } @@ -709,10 +711,10 @@ ucurr_getName(const UChar* currency, char buf[ISO_CURRENCY_CODE_LENGTH+1]; myUCharsToChars(buf, currency); - + /* Normalize the keyword value to uppercase */ T_CString_toUpperCase(buf); - + const UChar* s = NULL; ec2 = U_ZERO_ERROR; UResourceBundle* rb = ures_open(U_ICUDATA_CURR, loc, &ec2); @@ -797,11 +799,11 @@ ucurr_getPluralName(const UChar* currency, if (U_FAILURE(ec2)) { // fall back to "other" ec2 = U_ZERO_ERROR; - s = ures_getStringByKeyWithFallback(rb, "other", len, &ec2); + s = ures_getStringByKeyWithFallback(rb, "other", len, &ec2); if (U_FAILURE(ec2)) { ures_close(rb); // fall back to long name in Currencies - return ucurr_getName(currency, locale, UCURR_LONG_NAME, + return ucurr_getName(currency, locale, UCURR_LONG_NAME, isChoiceFormat, len, ec); } } @@ -854,7 +856,7 @@ typedef struct { static int U_CALLCONV currencyNameComparator(const void* a, const void* b) { const CurrencyNameStruct* currName_1 = (const CurrencyNameStruct*)a; const CurrencyNameStruct* currName_2 = (const CurrencyNameStruct*)b; - for (int32_t i = 0; + for (int32_t i = 0; i < MIN(currName_1->currencyNameLen, currName_2->currencyNameLen); ++i) { if (currName_1->currencyName[i] < currName_2->currencyName[i]) { @@ -876,7 +878,7 @@ static int U_CALLCONV currencyNameComparator(const void* a, const void* b) { // Give a locale, return the maximum number of currency names associated with // this locale. // It gets currency names from resource bundles using fallback. -// It is the maximum number because in the fallback chain, some of the +// It is the maximum number because in the fallback chain, some of the // currency names are duplicated. // For example, given locale as "en_US", the currency names get from resource // bundle in "en_US" and "en" are duplicated. The fallback mechanism will count @@ -928,7 +930,7 @@ getCurrencyNameCount(const char* loc, int32_t* total_currency_name_count, int32_ } } -static UChar* +static UChar* toUpperCase(const UChar* source, int32_t len, const char* locale) { UChar* dest = NULL; UErrorCode ec = U_ZERO_ERROR; @@ -938,8 +940,8 @@ toUpperCase(const UChar* source, int32_t len, const char* locale) { dest = (UChar*)uprv_malloc(sizeof(UChar) * MAX(destLen, len)); u_strToUpper(dest, destLen, source, len, locale, &ec); if (U_FAILURE(ec)) { - uprv_memcpy(dest, source, sizeof(UChar) * len); - } + u_memcpy(dest, source, len); + } return dest; } @@ -951,11 +953,11 @@ toUpperCase(const UChar* source, int32_t len, const char* locale) { // return the malloc-ed currency name arrays and the total number of currency // names in the array. static void -collectCurrencyNames(const char* locale, - CurrencyNameStruct** currencyNames, - int32_t* total_currency_name_count, - CurrencyNameStruct** currencySymbols, - int32_t* total_currency_symbol_count, +collectCurrencyNames(const char* locale, + CurrencyNameStruct** currencyNames, + int32_t* total_currency_name_count, + CurrencyNameStruct** currencySymbols, + int32_t* total_currency_symbol_count, UErrorCode& ec) { U_NAMESPACE_USE const icu::Hashtable *currencySymbolsEquiv = getCurrSymbolsEquiv(); @@ -1007,13 +1009,13 @@ collectCurrencyNames(const char* locale, // TODO: uhash_put wont change key/value? iso = (char*)ures_getKey(names); if (localeLevel == 0) { - uhash_put(currencyIsoCodes, iso, iso, &ec3); + uhash_put(currencyIsoCodes, iso, iso, &ec3); } else { if (uhash_get(currencyIsoCodes, iso) != NULL) { ures_close(names); continue; } else { - uhash_put(currencyIsoCodes, iso, iso, &ec3); + uhash_put(currencyIsoCodes, iso, iso, &ec3); } } // Add currency symbol. @@ -1023,7 +1025,8 @@ collectCurrencyNames(const char* locale, (*currencySymbols)[(*total_currency_symbol_count)++].currencyNameLen = len; // Add equivalent symbols if (currencySymbolsEquiv != NULL) { - icu::EquivIterator iter(*currencySymbolsEquiv, UnicodeString(TRUE, s, len)); + UnicodeString str(TRUE, s, len); + icu::EquivIterator iter(*currencySymbolsEquiv, str); const UnicodeString *symbol; while ((symbol = iter.next()) != NULL) { (*currencySymbols)[*total_currency_symbol_count].IsoCode = iso; @@ -1062,19 +1065,19 @@ collectCurrencyNames(const char* locale, iso = (char*)ures_getKey(names); // Using hash to remove duplicated ISO codes in fallback chain. if (localeLevel == 0) { - uhash_put(currencyPluralIsoCodes, iso, iso, &ec4); + uhash_put(currencyPluralIsoCodes, iso, iso, &ec4); } else { if (uhash_get(currencyPluralIsoCodes, iso) != NULL) { ures_close(names); continue; } else { - uhash_put(currencyPluralIsoCodes, iso, iso, &ec4); + uhash_put(currencyPluralIsoCodes, iso, iso, &ec4); } } int32_t num = ures_getSize(names); int32_t len; for (int32_t j = 0; j < num; ++j) { - // TODO: remove duplicates between singular name and + // TODO: remove duplicates between singular name and // currency long name? s = ures_getStringByIndex(names, j, &len, &ec3); (*currencyNames)[*total_currency_name_count].IsoCode = iso; @@ -1098,9 +1101,9 @@ collectCurrencyNames(const char* locale, uhash_close(currencyPluralIsoCodes); // quick sort the struct - qsort(*currencyNames, *total_currency_name_count, + qsort(*currencyNames, *total_currency_name_count, sizeof(CurrencyNameStruct), currencyNameComparator); - qsort(*currencySymbols, *total_currency_symbol_count, + qsort(*currencySymbols, *total_currency_symbol_count, sizeof(CurrencyNameStruct), currencyNameComparator); #ifdef UCURR_DEBUG @@ -1137,13 +1140,13 @@ collectCurrencyNames(const char* locale, } // @param currencyNames: currency names array -// @param indexInCurrencyNames: the index of the character in currency names +// @param indexInCurrencyNames: the index of the character in currency names // array against which the comparison is done // @param key: input text char to compare against // @param begin(IN/OUT): the begin index of matching range in currency names array // @param end(IN/OUT): the end index of matching range in currency names array. static int32_t -binarySearch(const CurrencyNameStruct* currencyNames, +binarySearch(const CurrencyNameStruct* currencyNames, int32_t indexInCurrencyNames, const UChar key, int32_t* begin, int32_t* end) { @@ -1257,7 +1260,7 @@ binarySearch(const CurrencyNameStruct* currencyNames, // @param maxMatchIndex: the index in currencyName which has the longest // match with input text. static void -linearSearch(const CurrencyNameStruct* currencyNames, +linearSearch(const CurrencyNameStruct* currencyNames, int32_t begin, int32_t end, const UChar* text, int32_t textLen, int32_t *maxMatchLen, int32_t* maxMatchIndex) { @@ -1285,9 +1288,9 @@ linearSearch(const CurrencyNameStruct* currencyNames, // @param maxMatchIndex: the index in currencyName which has the longest // match with input text. static void -searchCurrencyName(const CurrencyNameStruct* currencyNames, +searchCurrencyName(const CurrencyNameStruct* currencyNames, int32_t total_currency_count, - const UChar* text, int32_t textLen, + const UChar* text, int32_t textLen, int32_t* maxMatchLen, int32_t* maxMatchIndex) { *maxMatchIndex = -1; *maxMatchLen = 0; @@ -1317,8 +1320,8 @@ searchCurrencyName(const CurrencyNameStruct* currencyNames, if (binarySearchBegin == -1) { // did not find the range break; } - if (matchIndex != -1) { - // find an exact match for text from text[0] to text[index] + if (matchIndex != -1) { + // find an exact match for text from text[0] to text[index] // in currencyNames array. *maxMatchLen = index + 1; *maxMatchIndex = matchIndex; @@ -1346,7 +1349,7 @@ typedef struct { // reference count. // reference count is set to 1 when an entry is put to cache. // it increases by 1 before accessing, and decreased by 1 after accessing. - // The entry is deleted when ref count is zero, which means + // The entry is deleted when ref count is zero, which means // the entry is replaced out of cache and no process is accessing it. int32_t refCount; } CurrencyNameCacheEntry; @@ -1451,9 +1454,9 @@ uprv_parseCurrency(const char* locale, } } if (found == -1) { - // insert new entry to + // insert new entry to // currentCacheEntryIndex % CURRENCY_NAME_CACHE_NUM - // and remove the existing entry + // and remove the existing entry // currentCacheEntryIndex % CURRENCY_NAME_CACHE_NUM // from cache. cacheEntry = currCache[currentCacheEntryIndex]; @@ -1489,8 +1492,8 @@ uprv_parseCurrency(const char* locale, int32_t start = pos.getIndex(); - UChar inputText[MAX_CURRENCY_NAME_LEN]; - UChar upperText[MAX_CURRENCY_NAME_LEN]; + UChar inputText[MAX_CURRENCY_NAME_LEN]; + UChar upperText[MAX_CURRENCY_NAME_LEN]; int32_t textLen = MIN(MAX_CURRENCY_NAME_LEN, text.length() - start); text.extract(start, textLen, inputText); UErrorCode ec1 = U_ZERO_ERROR; @@ -1499,7 +1502,7 @@ uprv_parseCurrency(const char* locale, int32_t max = 0; int32_t matchIndex = -1; // case in-sensitive comparision against currency names - searchCurrencyName(currencyNames, total_currency_name_count, + searchCurrencyName(currencyNames, total_currency_name_count, upperText, textLen, &max, &matchIndex); #ifdef UCURR_DEBUG @@ -1510,8 +1513,8 @@ uprv_parseCurrency(const char* locale, int32_t matchIndexInSymbol = -1; if (type != UCURR_LONG_NAME) { // not name only // case sensitive comparison against currency symbols and ISO code. - searchCurrencyName(currencySymbols, total_currency_symbol_count, - inputText, textLen, + searchCurrencyName(currencySymbols, total_currency_symbol_count, + inputText, textLen, &maxInSymbol, &matchIndexInSymbol); } @@ -1528,12 +1531,12 @@ uprv_parseCurrency(const char* locale, } else if (maxInSymbol >= max && matchIndexInSymbol != -1) { u_charsToUChars(currencySymbols[matchIndexInSymbol].IsoCode, result, 4); pos.setIndex(start + maxInSymbol); - } + } // decrease reference count umtx_lock(&gCurrencyCacheMutex); --(cacheEntry->refCount); - if (cacheEntry->refCount == 0) { // remove + if (cacheEntry->refCount == 0) { // remove deleteCacheEntry(cacheEntry); } umtx_unlock(&gCurrencyCacheMutex); @@ -2013,11 +2016,11 @@ ucurr_createCurrencyList(UHashtable *isoCodes, UErrorCode* status){ UResourceBundle *currencyMapArray = ures_getByKey(rb, CURRENCY_MAP, rb, &localStatus); if (U_SUCCESS(localStatus)) { - // process each entry in currency map + // process each entry in currency map for (int32_t i=0; icontext = values; - + UResourceBundle *bundle = ures_openDirect(U_ICUDATA_CURR, "supplementalData", status); ures_getByKey(bundle, "CurrencyMap", bundle, status); UResourceBundle bundlekey, regbndl, curbndl, to; @@ -2500,7 +2503,7 @@ U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, ures_initStackObject(®bndl); ures_initStackObject(&curbndl); ures_initStackObject(&to); - + while (U_SUCCESS(*status) && ures_hasNext(bundle)) { ures_getNextResource(bundle, &bundlekey, status); if (U_FAILURE(*status)) { @@ -2541,11 +2544,11 @@ U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, if(curIDLength+1 > ULOC_KEYWORDS_CAPACITY) { *status = U_BUFFER_OVERFLOW_ERROR; } else { - u_UCharsToChars(defString, curID, curIDLength+1); + u_UCharsToChars(defString, curID, curIDLength+1); } } } -#endif +#endif if (U_FAILURE(*status)) { break; @@ -2567,7 +2570,7 @@ U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, uprv_free(curID); } } - + } if (U_SUCCESS(*status)) { if (commonlyUsed) { @@ -2592,7 +2595,7 @@ U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, } } } - + ulist_resetList((UList *)(en->context)); } else { ulist_deleteList(values); @@ -2605,9 +2608,9 @@ U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, ures_close(®bndl); ures_close(&bundlekey); ures_close(bundle); - + ulist_deleteList(otherValues); - + return en; } diff --git a/deps/icu-small/source/common/ucurrimp.h b/deps/icu-small/source/common/ucurrimp.h index 9f5f2e3608f120..b35d6f47c62583 100644 --- a/deps/icu-small/source/common/ucurrimp.h +++ b/deps/icu-small/source/common/ucurrimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines diff --git a/deps/icu-small/source/common/udata.cpp b/deps/icu-small/source/common/udata.cpp index b48ff4f8066e9d..ec72a0ce2c772a 100644 --- a/deps/icu-small/source/common/udata.cpp +++ b/deps/icu-small/source/common/udata.cpp @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1999-2015, International Business Machines +* Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -77,7 +79,7 @@ U_NAMESPACE_USE /* * Forward declarations */ -static UDataMemory *udata_findCachedData(const char *path); +static UDataMemory *udata_findCachedData(const char *path, UErrorCode &err); /*********************************************************************** * @@ -132,13 +134,13 @@ udata_cleanup(void) } static UBool U_CALLCONV -findCommonICUDataByName(const char *inBasename) +findCommonICUDataByName(const char *inBasename, UErrorCode &err) { UBool found = FALSE; int32_t i; - UDataMemory *pData = udata_findCachedData(inBasename); - if (pData == NULL) + UDataMemory *pData = udata_findCachedData(inBasename, err); + if (U_FAILURE(err) || pData == NULL) return FALSE; { @@ -268,40 +270,41 @@ static void U_CALLCONV DataCacheElement_deleter(void *pDCEl) { uprv_free(pDCEl); /* delete 'this' */ } -static void udata_initHashTable() { - UErrorCode err = U_ZERO_ERROR; +static void U_CALLCONV udata_initHashTable(UErrorCode &err) { U_ASSERT(gCommonDataCache == NULL); gCommonDataCache = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &err); if (U_FAILURE(err)) { - // TODO: handle errors better. - gCommonDataCache = NULL; - } - if (gCommonDataCache != NULL) { - uhash_setValueDeleter(gCommonDataCache, DataCacheElement_deleter); - ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup); + return; } + U_ASSERT(gCommonDataCache != NULL); + uhash_setValueDeleter(gCommonDataCache, DataCacheElement_deleter); + ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup); } /* udata_getCacheHashTable() * Get the hash table used to store the data cache entries. * Lazy create it if it doesn't yet exist. */ -static UHashtable *udata_getHashTable() { - umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable); +static UHashtable *udata_getHashTable(UErrorCode &err) { + umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable, err); return gCommonDataCache; } -static UDataMemory *udata_findCachedData(const char *path) +static UDataMemory *udata_findCachedData(const char *path, UErrorCode &err) { UHashtable *htable; UDataMemory *retVal = NULL; DataCacheElement *el; const char *baseName; + htable = udata_getHashTable(err); + if (U_FAILURE(err)) { + return NULL; + } + baseName = findBasename(path); /* Cache remembers only the base name, not the full path. */ - htable = udata_getHashTable(); umtx_lock(NULL); el = (DataCacheElement *)uhash_get(htable, baseName); umtx_unlock(NULL); @@ -323,6 +326,7 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr DataCacheElement *oldValue = NULL; UErrorCode subErr = U_ZERO_ERROR; + htable = udata_getHashTable(*pErr); if (U_FAILURE(*pErr)) { return NULL; } @@ -355,7 +359,6 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr /* Stick the new DataCacheElement into the hash table. */ - htable = udata_getHashTable(); umtx_lock(NULL); oldValue = (DataCacheElement *)uhash_get(htable, path); if (oldValue != NULL) { @@ -371,7 +374,7 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr umtx_unlock(NULL); #ifdef UDATA_DEBUG - fprintf(stderr, "Cache: [%s] <<< %p : %s. vFunc=%p\n", newElement->name, + fprintf(stderr, "Cache: [%s] <<< %p : %s. vFunc=%p\n", newElement->name, newElement->item, u_errorName(subErr), newElement->item->vFuncs); #endif @@ -393,9 +396,6 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr * * *----------------------------------------------------------------------*/ -#define U_DATA_PATHITER_BUFSIZ 128 /* Size of local buffer for paths */ - /* Overflow causes malloc of larger buf */ - U_NAMESPACE_BEGIN class UDataPathIterator @@ -424,12 +424,12 @@ class UDataPathIterator }; /** - * @param iter The iterator to be initialized. Its current state does not matter. - * @param path The full pathname to be iterated over. If NULL, defaults to U_ICUDATA_NAME - * @param pkg Package which is being searched for, ex "icudt28l". Will ignore leave directories such as /icudt28l - * @param item Item to be searched for. Can include full path, such as /a/b/foo.dat + * @param iter The iterator to be initialized. Its current state does not matter. + * @param path The full pathname to be iterated over. If NULL, defaults to U_ICUDATA_NAME + * @param pkg Package which is being searched for, ex "icudt28l". Will ignore leave directories such as /icudt28l + * @param item Item to be searched for. Can include full path, such as /a/b/foo.dat * @param suffix Optional item suffix, if not-null (ex. ".dat") then 'path' can contain 'item' explicitly. - * Ex: 'stuff.dat' would be found in '/a/foo:/tmp/stuff.dat:/bar/baz' as item #2. + * Ex: 'stuff.dat' would be found in '/a/foo:/tmp/stuff.dat:/bar/baz' as item #2. * '/blarg/stuff.dat' would also be found. */ UDataPathIterator::UDataPathIterator(const char *inPath, const char *pkg, @@ -496,8 +496,8 @@ UDataPathIterator::UDataPathIterator(const char *inPath, const char *pkg, /** * Get the next path on the list. * - * @param iter The Iter to be used - * @param len If set, pointer to the length of the returned path, for convenience. + * @param iter The Iter to be used + * @param len If set, pointer to the length of the returned path, for convenience. * @return Pointer to the next path segment, or NULL if there are no more. */ const char *UDataPathIterator::next(UErrorCode *pErrorCode) @@ -525,7 +525,7 @@ const char *UDataPathIterator::next(UErrorCode *pErrorCode) nextPath = uprv_strchr(currentPath, U_PATH_SEP_CHAR); if(nextPath == NULL) { /* segment: entire path */ - pathLen = (int32_t)uprv_strlen(currentPath); + pathLen = (int32_t)uprv_strlen(currentPath); } else { /* segment: until next segment */ pathLen = (int32_t)(nextPath - currentPath); @@ -541,7 +541,7 @@ const char *UDataPathIterator::next(UErrorCode *pErrorCode) #ifdef UDATA_DEBUG fprintf(stderr, "rest of path (IDD) = %s\n", currentPath); fprintf(stderr, " "); - { + { uint32_t qqq; for(qqq=0;qqq=4) && uprv_strncmp(pathBuffer.data() +(pathLen-4), suffix, 4)==0 && /* suffix matches */ uprv_strncmp(findBasename(pathBuffer.data()), basename, basenameLen)==0 && /* base matches */ @@ -567,7 +567,7 @@ const char *UDataPathIterator::next(UErrorCode *pErrorCode) #endif /* do nothing */ } - else + else { /* regular dir path */ if(pathBuffer[pathLen-1] != U_FILE_SEP_CHAR) { if((pathLen>=4) && @@ -661,7 +661,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ UDataMemory_init(&tData); - /* ??????? TODO revisit this */ + /* ??????? TODO revisit this */ if (commonDataIndex >= 0) { /* "mini-cache" for common ICU data */ if(commonDataIndex >= UPRV_LENGTHOF(gCommonICUDataArray)) { @@ -717,18 +717,18 @@ openCommonData(const char *path, /* Path from OpenChoice? */ #ifdef UDATA_DEBUG fprintf(stderr, "ocd: no basename in %s, bailing.\n", path); #endif - *pErrorCode=U_FILE_ACCESS_ERROR; + if (U_SUCCESS(*pErrorCode)) { + *pErrorCode=U_FILE_ACCESS_ERROR; + } return NULL; } /* Is the requested common data file already open and cached? */ /* Note that the cache is keyed by the base name only. The rest of the path, */ /* if any, is not considered. */ - { - UDataMemory *dataToReturn = udata_findCachedData(inBasename); - if (dataToReturn != NULL) { - return dataToReturn; - } + UDataMemory *dataToReturn = udata_findCachedData(inBasename, *pErrorCode); + if (dataToReturn != NULL || U_FAILURE(*pErrorCode)) { + return dataToReturn; } /* Requested item is not in the cache. @@ -759,6 +759,9 @@ openCommonData(const char *path, /* Path from OpenChoice? */ } #endif + if (U_FAILURE(*pErrorCode)) { + return NULL; + } if (!UDataMemory_isLoaded(&tData)) { /* no common data */ *pErrorCode=U_FILE_ACCESS_ERROR; @@ -834,7 +837,7 @@ static UBool extendICUData(UErrorCode *pErr) umtx_storeRelease(gHaveTriedToLoadCommonData, 1); } - didUpdate = findCommonICUDataByName(U_ICUDATA_NAME); /* Return 'true' when a racing writes out the extended */ + didUpdate = findCommonICUDataByName(U_ICUDATA_NAME, *pErr); /* Return 'true' when a racing writes out the extended */ /* data after another thread has failed to see it (in openCommonData), so */ /* extended data can be examined. */ /* Also handles a race through here before gHaveTriedToLoadCommonData is set. */ @@ -951,9 +954,9 @@ checkDataItem } /** - * @return 0 if not loaded, 1 if loaded or err + * @return 0 if not loaded, 1 if loaded or err */ -static UDataMemory *doLoadFromIndividualFiles(const char *pkgName, +static UDataMemory *doLoadFromIndividualFiles(const char *pkgName, const char *dataPath, const char *tocEntryPathSuffix, /* following arguments are the same as doOpenChoice itself */ const char *path, const char *type, const char *name, @@ -1009,9 +1012,9 @@ static UDataMemory *doLoadFromIndividualFiles(const char *pkgName, } /** - * @return 0 if not loaded, 1 if loaded or err + * @return 0 if not loaded, 1 if loaded or err */ -static UDataMemory *doLoadFromCommonData(UBool isICUData, const char * /*pkgName*/, +static UDataMemory *doLoadFromCommonData(UBool isICUData, const char * /*pkgName*/, const char * /*dataPath*/, const char * /*tocEntryPathSuffix*/, const char *tocEntryName, /* following arguments are the same as doOpenChoice itself */ const char *path, const char *type, const char *name, @@ -1139,7 +1142,7 @@ doOpenChoice(const char *path, const char *type, const char *name, if(path == NULL || !strcmp(path, U_ICUDATA_ALIAS) || /* "ICUDATA" */ !uprv_strncmp(path, U_ICUDATA_NAME U_TREE_SEPARATOR_STRING, /* "icudt26e-" */ - uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) || + uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) || !uprv_strncmp(path, U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING, /* "ICUDATA-" */ uprv_strlen(U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING))) { isICUData = TRUE; @@ -1186,7 +1189,7 @@ doOpenChoice(const char *path, const char *type, const char *name, } } else { treeChar = uprv_strchr(path, U_TREE_SEPARATOR); - if(treeChar) { + if(treeChar) { treeName.append(treeChar+1, *pErrorCode); /* following '-' */ if(isICUData) { pkgName.append(U_ICUDATA_NAME, *pErrorCode); @@ -1214,7 +1217,7 @@ doOpenChoice(const char *path, const char *type, const char *name, fprintf(stderr, " P=%s T=%s\n", pkgName.data(), treeName.data()); #endif - /* setting up the entry name and file name + /* setting up the entry name and file name * Make up a full name by appending the type to the supplied * name, assuming that a type was supplied. */ @@ -1255,7 +1258,7 @@ doOpenChoice(const char *path, const char *type, const char *name, dataPath = u_getDataDirectory(); /**** Time zone individual files override */ - if (isTimeZoneFile(name, type) && isICUData) { + if (isICUData && isTimeZoneFile(name, type)) { const char *tzFilesDir = u_getTimeZoneFilesDirectory(pErrorCode); if (tzFilesDir[0] != 0) { #ifdef UDATA_DEBUG @@ -1275,7 +1278,7 @@ doOpenChoice(const char *path, const char *type, const char *name, fprintf(stderr, "Trying packages (UDATA_PACKAGES_FIRST)\n"); #endif /* #2 */ - retVal = doLoadFromCommonData(isICUData, + retVal = doLoadFromCommonData(isICUData, pkgName.data(), dataPath, tocEntryPathSuffix, tocEntryName.data(), path, type, name, isAcceptable, context, &subErrorCode, pErrorCode); if((retVal != NULL) || U_FAILURE(*pErrorCode)) { @@ -1300,7 +1303,7 @@ doOpenChoice(const char *path, const char *type, const char *name, } /**** COMMON PACKAGE */ - if((gDataFileAccess==UDATA_ONLY_PACKAGES) || + if((gDataFileAccess==UDATA_ONLY_PACKAGES) || (gDataFileAccess==UDATA_FILES_FIRST)) { #ifdef UDATA_DEBUG fprintf(stderr, "Trying packages (UDATA_ONLY_PACKAGES || UDATA_FILES_FIRST)\n"); @@ -1312,10 +1315,10 @@ doOpenChoice(const char *path, const char *type, const char *name, return retVal; } } - + /* Load from DLL. If we haven't attempted package load, we also haven't had any chance to try a DLL (static or setCommonData/etc) load. - If we ever have a "UDATA_ONLY_FILES", add it to the or list here. */ + If we ever have a "UDATA_ONLY_FILES", add it to the or list here. */ if(gDataFileAccess==UDATA_NO_FILES) { #ifdef UDATA_DEBUG fprintf(stderr, "Trying common data (UDATA_NO_FILES)\n"); diff --git a/deps/icu-small/source/common/udatamem.c b/deps/icu-small/source/common/udatamem.c index ec6175d9857917..daa919373b71bb 100644 --- a/deps/icu-small/source/common/udatamem.c +++ b/deps/icu-small/source/common/udatamem.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/udatamem.h b/deps/icu-small/source/common/udatamem.h index 51372851f65173..385a77722cc87f 100644 --- a/deps/icu-small/source/common/udatamem.h +++ b/deps/icu-small/source/common/udatamem.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/udataswp.c b/deps/icu-small/source/common/udataswp.c index 06fe85bc463c0d..f47ac1f5e06f35 100644 --- a/deps/icu-small/source/common/udataswp.c +++ b/deps/icu-small/source/common/udataswp.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -298,7 +300,7 @@ udata_swapDataHeader(const UDataSwapper *ds, /* check minimum length and magic bytes */ pHeader=(const DataHeader *)inData; - if( (length>=0 && length=0 && length<(int32_t)sizeof(DataHeader)) || pHeader->dataHeader.magic1!=0xda || pHeader->dataHeader.magic2!=0x27 || pHeader->info.sizeofUChar!=2 @@ -425,7 +427,7 @@ udata_openSwapperForInputData(const void *data, int32_t length, return NULL; } if( data==NULL || - (length>=0 && length=0 && length<(int32_t)sizeof(DataHeader)) || outCharset>U_EBCDIC_FAMILY ) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; diff --git a/deps/icu-small/source/common/udataswp.h b/deps/icu-small/source/common/udataswp.h index 66c84955676708..07e06c221a7075 100644 --- a/deps/icu-small/source/common/udataswp.h +++ b/deps/icu-small/source/common/udataswp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -318,6 +320,20 @@ uprv_compareInvEbcdic(const UDataSwapper *ds, const char *outString, int32_t outLength, const UChar *localString, int32_t localLength); +/** + * \def uprv_compareInvWithUChar + * Compare an invariant-character strings with a UChar string + * @internal + */ +#if U_CHARSET_FAMILY==U_ASCII_FAMILY +# define uprv_compareInvWithUChar uprv_compareInvAscii +#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY +# define uprv_compareInvWithUChar uprv_compareInvEbcdic +#else +# error Unknown charset family! +#endif + + /* material... -------------------------------------------------------------- */ #if 0 diff --git a/deps/icu-small/source/common/uelement.h b/deps/icu-small/source/common/uelement.h index 5a6d723b192a95..5bd7ad3948eccb 100644 --- a/deps/icu-small/source/common/uelement.h +++ b/deps/icu-small/source/common/uelement.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2011, International Business Machines @@ -72,7 +74,7 @@ U_CDECL_END * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareUnicodeString(const UElement key1, const UElement key2); /** @@ -83,7 +85,7 @@ uhash_compareUnicodeString(const UElement key1, const UElement key2); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareCaselessUnicodeString(const UElement key1, const UElement key2); #endif /* __UELEMENT_H__ */ diff --git a/deps/icu-small/source/common/uenum.c b/deps/icu-small/source/common/uenum.c index 3ee8771040aaf1..71c06b5578a23c 100644 --- a/deps/icu-small/source/common/uenum.c +++ b/deps/icu-small/source/common/uenum.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -49,7 +51,7 @@ static void* _getBuffer(UEnumeration* en, int32_t capacity) { } ((_UEnumBuffer*) en->baseContext)->len = capacity; } - + return (void*) & ((_UEnumBuffer*) en->baseContext)->data; } diff --git a/deps/icu-small/source/common/uenumimp.h b/deps/icu-small/source/common/uenumimp.h index dd704b3f970221..5d01f01ace5fe3 100644 --- a/deps/icu-small/source/common/uenumimp.h +++ b/deps/icu-small/source/common/uenumimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -21,14 +23,14 @@ U_CDECL_BEGIN -/** - * following are the type declarations for +/** + * following are the type declarations for * implementations of APIs. If any of these * functions are NULL, U_UNSUPPORTED_ERROR * is returned. If close is NULL, the enumeration * object is going to be released. * Initial error checking is done in the body - * of API function, so the implementations + * of API function, so the implementations * need not to check the initial error condition. */ @@ -61,13 +63,13 @@ UEnumCount(UEnumeration *en, UErrorCode *status); * This function returns the next element as a UChar *, * or NULL after all elements haven been enumerated. * - * @param en enumeration + * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable * @return next element as UChar *, * or NULL after all elements haven been enumerated */ -typedef const UChar* U_CALLCONV +typedef const UChar* U_CALLCONV UEnumUNext(UEnumeration* en, int32_t* resultLength, UErrorCode* status); @@ -78,13 +80,13 @@ UEnumUNext(UEnumeration* en, * This function returns the next element as a char *, * or NULL after all elements haven been enumerated. * - * @param en enumeration + * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable * @return next element as char *, * or NULL after all elements haven been enumerated */ -typedef const char* U_CALLCONV +typedef const char* U_CALLCONV UEnumNext(UEnumeration* en, int32_t* resultLength, UErrorCode* status); @@ -92,14 +94,14 @@ UEnumNext(UEnumeration* en, /** * Function type declaration for uenum_reset(). * - * This function should reset the enumeration + * This function should reset the enumeration * object * - * @param en enumeration + * @param en enumeration * @param status pointer to UErrorCode variable */ -typedef void U_CALLCONV -UEnumReset(UEnumeration* en, +typedef void U_CALLCONV +UEnumReset(UEnumeration* en, UErrorCode* status); @@ -110,8 +112,8 @@ struct UEnumeration { /* context. Use it for what you need */ void *context; - /** - * these are functions that will + /** + * these are functions that will * be used for APIs */ /* called from uenum_close */ diff --git a/deps/icu-small/source/common/uhash.c b/deps/icu-small/source/common/uhash.c index 9b6f446f1c07df..282f89fe268240 100644 --- a/deps/icu-small/source/common/uhash.c +++ b/deps/icu-small/source/common/uhash.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -229,7 +231,7 @@ _uhash_allocate(UHashtable *hash, emptytok.pointer = NULL; /* Only one of these two is needed */ emptytok.integer = 0; /* but we don't know which one. */ - + limit = p + hash->length; while (p < limit) { p->key = emptytok; @@ -245,7 +247,7 @@ _uhash_allocate(UHashtable *hash, static UHashtable* _uhash_init(UHashtable *result, - UHashFunction *keyHash, + UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t primeIndex, @@ -273,7 +275,7 @@ _uhash_init(UHashtable *result, } static UHashtable* -_uhash_create(UHashFunction *keyHash, +_uhash_create(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t primeIndex, @@ -413,7 +415,7 @@ _uhash_rehash(UHashtable *hash, UErrorCode *status) { if (U_FAILURE(*status)) { hash->elements = old; - hash->length = oldLength; + hash->length = oldLength; return; } @@ -534,7 +536,7 @@ _uhash_put(UHashtable *hash, ********************************************************************/ U_CAPI UHashtable* U_EXPORT2 -uhash_open(UHashFunction *keyHash, +uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode *status) { @@ -543,7 +545,7 @@ uhash_open(UHashFunction *keyHash, } U_CAPI UHashtable* U_EXPORT2 -uhash_openSize(UHashFunction *keyHash, +uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, @@ -560,7 +562,7 @@ uhash_openSize(UHashFunction *keyHash, U_CAPI UHashtable* U_EXPORT2 uhash_init(UHashtable *fillinResult, - UHashFunction *keyHash, + UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode *status) { @@ -602,7 +604,7 @@ uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn) { hash->keyComparator = fn; return result; } -U_CAPI UValueComparator *U_EXPORT2 +U_CAPI UValueComparator *U_EXPORT2 uhash_setValueComparator(UHashtable *hash, UValueComparator *fn){ UValueComparator *result = hash->valueComparator; hash->valueComparator = fn; @@ -628,7 +630,7 @@ uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { UErrorCode status = U_ZERO_ERROR; _uhash_internalSetResizePolicy(hash, policy); hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); + hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); _uhash_rehash(hash, &status); } @@ -851,7 +853,7 @@ uhash_hashIChars(const UHashTok key) { return s == NULL ? 0 : ustr_hashICharsN(s, uprv_strlen(s)); } -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ int32_t count1, count2, pos, i; @@ -884,14 +886,14 @@ uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ if(count1!=count2){ return FALSE; } - + pos=UHASH_FIRST; for(i=0; ikey; const UHashTok val1 = elem1->value; /* here the keys are not compared, instead the key form hash1 is used to fetch - * value from hash2. If the hashes are equal then then both hashes should + * value from hash2. If the hashes are equal then then both hashes should * contain equal values for the same key! */ const UHashElement* elem2 = _uhash_find(hash2, key1, hash2->keyHasher(key1)); diff --git a/deps/icu-small/source/common/uhash.h b/deps/icu-small/source/common/uhash.h index e8f38958ac5501..e53ce73928dd49 100644 --- a/deps/icu-small/source/common/uhash.h +++ b/deps/icu-small/source/common/uhash.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -152,7 +154,7 @@ struct UHashtable { * If NULL won't do anything */ /* Size parameters */ - + int32_t count; /* The number of key-value pairs in this table. * 0 <= count <= length. In practice we * never let count == length (see code). */ @@ -160,12 +162,12 @@ struct UHashtable { * and values. Must be prime. */ /* Rehashing thresholds */ - + int32_t highWaterMark; /* If count > highWaterMark, rehash */ int32_t lowWaterMark; /* If count < lowWaterMark, rehash */ float highWaterRatio; /* 0..1; high water as a fraction of length */ float lowWaterRatio; /* 0..1; low water as a fraction of length */ - + int8_t primeIndex; /* Index into our prime table for length. * length == PRIMES[primeIndex] */ UBool allocated; /* Was this UHashtable allocated? */ @@ -188,7 +190,7 @@ U_CDECL_END * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_openSize */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, @@ -205,7 +207,7 @@ uhash_open(UHashFunction *keyHash, * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_open */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, @@ -222,7 +224,7 @@ uhash_openSize(UHashFunction *keyHash, * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_openSize */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_init(UHashtable *hash, UHashFunction *keyHash, UKeyComparator *keyComp, @@ -233,7 +235,7 @@ uhash_init(UHashtable *hash, * Close a UHashtable, releasing the memory used. * @param hash The UHashtable to close. If hash is NULL no operation is performed. */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_close(UHashtable *hash); @@ -244,7 +246,7 @@ uhash_close(UHashtable *hash); * @param fn the function to be used hash keys; must not be NULL * @return the previous key hasher; non-NULL */ -U_CAPI UHashFunction *U_EXPORT2 +U_CAPI UHashFunction *U_EXPORT2 uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn); /** @@ -254,7 +256,7 @@ uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn); * @param fn the function to be used compare keys; must not be NULL * @return the previous key comparator; non-NULL */ -U_CAPI UKeyComparator *U_EXPORT2 +U_CAPI UKeyComparator *U_EXPORT2 uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn); /** @@ -264,7 +266,7 @@ uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn); * @param fn the function to be used compare keys; must not be NULL * @return the previous key comparator; non-NULL */ -U_CAPI UValueComparator *U_EXPORT2 +U_CAPI UValueComparator *U_EXPORT2 uhash_setValueComparator(UHashtable *hash, UValueComparator *fn); /** @@ -277,7 +279,7 @@ uhash_setValueComparator(UHashtable *hash, UValueComparator *fn); * @param fn the function to be used delete keys, or NULL * @return the previous key deleter; may be NULL */ -U_CAPI UObjectDeleter *U_EXPORT2 +U_CAPI UObjectDeleter *U_EXPORT2 uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn); /** @@ -290,7 +292,7 @@ uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn); * @param fn the function to be used delete values, or NULL * @return the previous value deleter; may be NULL */ -U_CAPI UObjectDeleter *U_EXPORT2 +U_CAPI UObjectDeleter *U_EXPORT2 uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn); /** @@ -300,7 +302,7 @@ uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn); * @param hash The UHashtable to set * @param policy The way the hashtable resizes itself, {U_GROW, U_GROW_AND_SHRINK, U_FIXED} */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy); /** @@ -308,7 +310,7 @@ uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy); * @param hash The UHashtable to query. * @return The number of key-value pairs stored in hash. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_count(const UHashtable *hash); /** @@ -324,7 +326,7 @@ uhash_count(const UHashtable *hash); * @return The previous value, or NULL if none. * @see uhash_get */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_put(UHashtable *hash, void *key, void *value, @@ -342,7 +344,7 @@ uhash_put(UHashtable *hash, * @return The previous value, or NULL if none. * @see uhash_get */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iput(UHashtable *hash, int32_t key, void* value, @@ -360,7 +362,7 @@ uhash_iput(UHashtable *hash, * @return The previous value, or 0 if none. * @see uhash_get */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_puti(UHashtable *hash, void* key, int32_t value, @@ -378,7 +380,7 @@ uhash_puti(UHashtable *hash, * @return The previous value, or 0 if none. * @see uhash_get */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_iputi(UHashtable *hash, int32_t key, int32_t value, @@ -391,8 +393,8 @@ uhash_iputi(UHashtable *hash, * @param key A pointer key stored in a hashtable * @return The requested item, or NULL if not found. */ -U_CAPI void* U_EXPORT2 -uhash_get(const UHashtable *hash, +U_CAPI void* U_EXPORT2 +uhash_get(const UHashtable *hash, const void *key); /** @@ -402,7 +404,7 @@ uhash_get(const UHashtable *hash, * @param key An integer key stored in a hashtable * @return The requested item, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iget(const UHashtable *hash, int32_t key); @@ -413,7 +415,7 @@ uhash_iget(const UHashtable *hash, * @param key A pointer key stored in a hashtable * @return The requested item, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_geti(const UHashtable *hash, const void* key); /** @@ -423,7 +425,7 @@ uhash_geti(const UHashtable *hash, * @param key An integer key stored in a hashtable * @return The requested item, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_igeti(const UHashtable *hash, int32_t key); @@ -433,7 +435,7 @@ uhash_igeti(const UHashtable *hash, * @param key A key stored in a hashtable * @return The item removed, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_remove(UHashtable *hash, const void *key); @@ -443,7 +445,7 @@ uhash_remove(UHashtable *hash, * @param key An integer key stored in a hashtable * @return The item removed, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iremove(UHashtable *hash, int32_t key); @@ -453,7 +455,7 @@ uhash_iremove(UHashtable *hash, * @param key An key stored in a hashtable * @return The item removed, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_removei(UHashtable *hash, const void* key); @@ -463,7 +465,7 @@ uhash_removei(UHashtable *hash, * @param key An integer key stored in a hashtable * @return The item removed, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_iremovei(UHashtable *hash, int32_t key); @@ -471,7 +473,7 @@ uhash_iremovei(UHashtable *hash, * Remove all items from a UHashtable. * @param hash The target UHashtable. */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_removeAll(UHashtable *hash); /** @@ -485,7 +487,7 @@ uhash_removeAll(UHashtable *hash); * @param key A key stored in a hashtable * @return a hash element, or NULL if the key is not found. */ -U_CAPI const UHashElement* U_EXPORT2 +U_CAPI const UHashElement* U_EXPORT2 uhash_find(const UHashtable *hash, const void* key); /** @@ -508,7 +510,7 @@ uhash_find(const UHashtable *hash, const void* key); * @return a hash element, or NULL if no further key-value pairs * exist in the table. */ -U_CAPI const UHashElement* U_EXPORT2 +U_CAPI const UHashElement* U_EXPORT2 uhash_nextElement(const UHashtable *hash, int32_t *pos); @@ -523,7 +525,7 @@ uhash_nextElement(const UHashtable *hash, * modified. * @return the value that was removed. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_removeElement(UHashtable *hash, const UHashElement* e); /******************************************************************** @@ -535,7 +537,7 @@ uhash_removeElement(UHashtable *hash, const UHashElement* e); * @param i The given integer * @return a UHashTok for an integer. */ -/*U_CAPI UHashTok U_EXPORT2 +/*U_CAPI UHashTok U_EXPORT2 uhash_toki(int32_t i);*/ /** @@ -543,7 +545,7 @@ uhash_toki(int32_t i);*/ * @param p The given pointer * @return a UHashTok for a pointer. */ -/*U_CAPI UHashTok U_EXPORT2 +/*U_CAPI UHashTok U_EXPORT2 uhash_tokp(void* p);*/ /******************************************************************** @@ -557,7 +559,7 @@ uhash_tokp(void* p);*/ * @param key The string (const UChar*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashUChars(const UHashTok key); /** @@ -567,7 +569,7 @@ uhash_hashUChars(const UHashTok key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashChars(const UHashTok key); /** @@ -587,7 +589,7 @@ uhash_hashIChars(const UHashTok key); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareUChars(const UHashTok key1, const UHashTok key2); /** @@ -597,7 +599,7 @@ uhash_compareUChars(const UHashTok key1, const UHashTok key2); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareChars(const UHashTok key1, const UHashTok key2); /** @@ -607,7 +609,7 @@ uhash_compareChars(const UHashTok key1, const UHashTok key2); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareIChars(const UHashTok key1, const UHashTok key2); /******************************************************************** @@ -619,7 +621,7 @@ uhash_compareIChars(const UHashTok key1, const UHashTok key2); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashUnicodeString(const UElement key); /** @@ -628,7 +630,7 @@ uhash_hashUnicodeString(const UElement key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashCaselessUnicodeString(const UElement key); /******************************************************************** @@ -640,7 +642,7 @@ uhash_hashCaselessUnicodeString(const UElement key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashLong(const UHashTok key); /** @@ -649,7 +651,7 @@ uhash_hashLong(const UHashTok key); * @param Key2 The integer for comparison * @return true if key1 and key2 are equal, return false otherwise */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareLong(const UHashTok key1, const UHashTok key2); /******************************************************************** @@ -660,7 +662,7 @@ uhash_compareLong(const UHashTok key1, const UHashTok key2); * Deleter for Hashtable objects. * @param obj The object to be deleted */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_deleteHashtable(void *obj); /* Use uprv_free() itself as a deleter for any key or value allocated using uprv_malloc. */ @@ -671,7 +673,7 @@ uhash_deleteHashtable(void *obj); * @param hash2 * @return true if the hashtables are equal and false if not. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_equals(const UHashtable* hash1, const UHashtable* hash2); @@ -680,8 +682,8 @@ uhash_equals(const UHashtable* hash1, const UHashtable* hash2); U_NAMESPACE_BEGIN /** - * \class LocalUResourceBundlePointer - * "Smart pointer" class, closes a UResourceBundle via ures_close(). + * \class LocalUHashtablePointer + * "Smart pointer" class, closes a UHashtable via uhash_close(). * For most methods see the LocalPointerBase base class. * * @see LocalPointerBase diff --git a/deps/icu-small/source/common/uhash_us.cpp b/deps/icu-small/source/common/uhash_us.cpp index 71a41cbe29a2be..ac76c1b97821f6 100644 --- a/deps/icu-small/source/common/uhash_us.cpp +++ b/deps/icu-small/source/common/uhash_us.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2011, International Business Machines diff --git a/deps/icu-small/source/common/uidna.cpp b/deps/icu-small/source/common/uidna.cpp index 857c9fc417e863..e01c9aea603c66 100644 --- a/deps/icu-small/source/common/uidna.cpp +++ b/deps/icu-small/source/common/uidna.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -45,7 +47,7 @@ static const UChar ACE_PREFIX[] ={ 0x0078,0x006E,0x002d,0x002d } ; #define CAPITAL_A 0x0041 #define CAPITAL_Z 0x005A -inline static UChar +inline static UChar toASCIILower(UChar ch){ if(CAPITAL_A <= ch && ch <= CAPITAL_Z){ return ch + LOWER_CASE_DELTA; @@ -53,7 +55,7 @@ toASCIILower(UChar ch){ return ch; } -inline static UBool +inline static UBool startsWithPrefix(const UChar* src , int32_t srcLength){ UBool startsWithPrefix = TRUE; @@ -71,9 +73,9 @@ startsWithPrefix(const UChar* src , int32_t srcLength){ inline static int32_t -compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, +compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, const UChar* s2, int32_t s2Len){ - + int32_t minLength; int32_t lengthResult; @@ -101,10 +103,10 @@ compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, if(i == minLength) { return lengthResult; } - + c1 = s1[i]; c2 = s2[i]; - + /* Case-insensitive comparison */ if(c1!=c2) { rc=(int32_t)toASCIILower(c1)-(int32_t)toASCIILower(c2); @@ -119,9 +121,9 @@ compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, /** - * Ascertain if the given code point is a label separator as + * Ascertain if the given code point is a label separator as * defined by the IDNA RFC - * + * * @param ch The code point to be ascertained * @return true if the char is a label separator * @stable ICU 2.8 @@ -134,12 +136,12 @@ static inline UBool isLabelSeparator(UChar ch){ case 0xFF61: return TRUE; default: - return FALSE; + return FALSE; } } // returns the length of the label excluding the separator -// if *limit == separator then the length returned does not include +// if *limit == separator then the length returned does not include // the separtor. static inline int32_t getNextSeparator(UChar *src, int32_t srcLength, @@ -155,7 +157,7 @@ getNextSeparator(UChar *src, int32_t srcLength, if(isLabelSeparator(src[i])){ *limit = src + (i+1); // go past the delimiter return i; - + } } }else{ @@ -180,7 +182,7 @@ static inline UBool isLDHChar(UChar ch){ return FALSE; } //[\\u002D \\u0030-\\u0039 \\u0041-\\u005A \\u0061-\\u007A] - if( (ch==0x002D) || + if( (ch==0x002D) || (0x0030 <= ch && ch <= 0x0039) || (0x0041 <= ch && ch <= 0x005A) || (0x0061 <= ch && ch <= 0x007A) @@ -190,8 +192,8 @@ static inline UBool isLDHChar(UChar ch){ return FALSE; } -static int32_t -_internal_toASCII(const UChar* src, int32_t srcLength, +static int32_t +_internal_toASCII(const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UStringPrepProfile* nameprep, @@ -203,18 +205,18 @@ _internal_toASCII(const UChar* src, int32_t srcLength, UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE]; //initialize pointers to stack buffers UChar *b1 = b1Stack, *b2 = b2Stack; - int32_t b1Len=0, b2Len, - b1Capacity = MAX_LABEL_BUFFER_SIZE, + int32_t b1Len=0, b2Len, + b1Capacity = MAX_LABEL_BUFFER_SIZE, b2Capacity = MAX_LABEL_BUFFER_SIZE , reqLength=0; int32_t namePrepOptions = ((options & UIDNA_ALLOW_UNASSIGNED) != 0) ? USPREP_ALLOW_UNASSIGNED: 0; UBool* caseFlags = NULL; - + // the source contains all ascii codepoints UBool srcIsASCII = TRUE; // assume the source contains all LDH codepoints - UBool srcIsLDH = TRUE; + UBool srcIsLDH = TRUE; int32_t j=0; @@ -222,11 +224,11 @@ _internal_toASCII(const UChar* src, int32_t srcLength, UBool useSTD3ASCIIRules = (UBool)((options & UIDNA_USE_STD3_RULES) != 0); int32_t failPos = -1; - + if(srcLength == -1){ srcLength = u_strlen(src); } - + if(srcLength > b1Capacity){ b1 = (UChar*) uprv_malloc(srcLength * U_SIZEOF_UCHAR); if(b1==NULL){ @@ -236,18 +238,18 @@ _internal_toASCII(const UChar* src, int32_t srcLength, b1Capacity = srcLength; } - // step 1 + // step 1 for( j=0;j 0x7F){ srcIsASCII = FALSE; } b1[b1Len++] = src[j]; } - + // step 2 is performed only if the source contains non ASCII if(srcIsASCII == FALSE){ - - // step 2 + + // step 2 b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Capacity, namePrepOptions, parseError, status); if(*status == U_BUFFER_OVERFLOW_ERROR){ @@ -263,7 +265,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Len, namePrepOptions, parseError, status); } } @@ -279,7 +281,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, // for step 3 & 4 srcIsASCII = TRUE; for( j=0;j 0x7F){ srcIsASCII = FALSE; }else if(isLDHChar(b1[j])==FALSE){ // if the char is in ASCII range verify that it is an LDH character @@ -303,7 +305,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, // failPos is always set the index of failure uprv_syntaxError(b1,failPos, b1Len,parseError); }else if(b1[0] == HYPHEN){ - // fail position is 0 + // fail position is 0 uprv_syntaxError(b1,0,b1Len,parseError); }else{ // the last index in the source is always length-1 @@ -316,7 +318,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, // Step 4: if the source is ASCII then proceed to step 8 if(srcIsASCII){ if(b1Len <= destCapacity){ - uprv_memmove(dest, b1, b1Len * U_SIZEOF_UCHAR); + u_memmove(dest, b1, b1Len); reqLength = b1Len; }else{ reqLength = b1Len; @@ -338,14 +340,14 @@ _internal_toASCII(const UChar* src, int32_t srcLength, if(*status == U_BUFFER_OVERFLOW_ERROR){ // redo processing of string /* we do not have enough room so grow the buffer*/ - b2 = (UChar*) uprv_malloc(b2Len * U_SIZEOF_UCHAR); + b2 = (UChar*) uprv_malloc(b2Len * U_SIZEOF_UCHAR); if(b2 == NULL){ *status = U_MEMORY_ALLOCATION_ERROR; goto CLEANUP; } *status = U_ZERO_ERROR; // reset error - + b2Len = u_strToPunycode(b1,b1Len,b2,b2Len,caseFlags, status); } //error bail out @@ -362,12 +364,12 @@ _internal_toASCII(const UChar* src, int32_t srcLength, goto CLEANUP; } //Step 7: prepend the ACE prefix - uprv_memcpy(dest,ACE_PREFIX,ACE_PREFIX_LENGTH * U_SIZEOF_UCHAR); + u_memcpy(dest, ACE_PREFIX, ACE_PREFIX_LENGTH); //Step 6: copy the contents in b2 into dest - uprv_memcpy(dest+ACE_PREFIX_LENGTH, b2, b2Len * U_SIZEOF_UCHAR); + u_memcpy(dest+ACE_PREFIX_LENGTH, b2, b2Len); }else{ - *status = U_IDNA_ACE_PREFIX_ERROR; + *status = U_IDNA_ACE_PREFIX_ERROR; //position of failure is 0 uprv_syntaxError(b1,0,b1Len,parseError); goto CLEANUP; @@ -386,7 +388,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, uprv_free(b2); } uprv_free(caseFlags); - + return u_terminateUChars(dest, destCapacity, reqLength, status); } @@ -401,7 +403,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, //get the options //UBool useSTD3ASCIIRules = (UBool)((options & UIDNA_USE_STD3_RULES) != 0); - int32_t namePrepOptions = ((options & UIDNA_ALLOW_UNASSIGNED) != 0) ? USPREP_ALLOW_UNASSIGNED: 0; + int32_t namePrepOptions = ((options & UIDNA_ALLOW_UNASSIGNED) != 0) ? USPREP_ALLOW_UNASSIGNED: 0; // TODO Revisit buffer handling. The label should not be over 63 ASCII characters. ICU4J may need to be updated too. UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE], b3Stack[MAX_LABEL_BUFFER_SIZE]; @@ -409,7 +411,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, //initialize pointers to stack buffers UChar *b1 = b1Stack, *b2 = b2Stack, *b1Prime=NULL, *b3=b3Stack; int32_t b1Len = 0, b2Len, b1PrimeLen, b3Len, - b1Capacity = MAX_LABEL_BUFFER_SIZE, + b1Capacity = MAX_LABEL_BUFFER_SIZE, b2Capacity = MAX_LABEL_BUFFER_SIZE, b3Capacity = MAX_LABEL_BUFFER_SIZE, reqLength=0; @@ -420,7 +422,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, /*UBool srcIsLDH = TRUE; int32_t failPos =0;*/ - // step 1: find out if all the codepoints in src are ASCII + // step 1: find out if all the codepoints in src are ASCII if(srcLength==-1){ srcLength = 0; for(;src[srcLength]!=0;){ @@ -450,7 +452,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, }else{ return 0; } - + if(srcIsASCII == FALSE){ // step 2: process the string b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Capacity, namePrepOptions, parseError, status); @@ -464,7 +466,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Len, namePrepOptions, parseError, status); } //bail out on error @@ -478,7 +480,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, b1Len = srcLength; } - // The RFC states that + // The RFC states that // // ToUnicode never fails. If any step fails, then the original input // is returned immediately in that step. @@ -541,7 +543,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, //step 8: return output of step 5 reqLength = b2Len; if(b2Len <= destCapacity) { - uprv_memmove(dest, b2, b2Len * U_SIZEOF_UCHAR); + u_memmove(dest, b2, b2Len); } } else{ @@ -557,7 +559,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, // failPos is always set the index of failure uprv_syntaxError(src,failPos, srcLength,parseError); }else if(src[0] == HYPHEN){ - // fail position is 0 + // fail position is 0 uprv_syntaxError(src,0,srcLength,parseError); }else{ // the last index in the source is always length-1 @@ -570,7 +572,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, // just return the source //copy the source to destination if(srcLength <= destCapacity){ - uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR); + u_memmove(dest, src, srcLength); } reqLength = srcLength; } @@ -586,7 +588,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, } uprv_free(caseFlags); - // The RFC states that + // The RFC states that // // ToUnicode never fails. If any step fails, then the original input // is returned immediately in that step. @@ -597,7 +599,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, if(dest && srcLength <= destCapacity){ // srcLength should have already been set earlier. U_ASSERT(srcLength >= 0); - uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR); + u_memmove(dest, src, srcLength); } reqLength = srcLength; *status = U_ZERO_ERROR; @@ -607,12 +609,12 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, } U_CAPI int32_t U_EXPORT2 -uidna_toASCII(const UChar* src, int32_t srcLength, +uidna_toASCII(const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, UErrorCode* status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -622,16 +624,16 @@ uidna_toASCII(const UChar* src, int32_t srcLength, } UStringPrepProfile* nameprep = usprep_openByType(USPREP_RFC3491_NAMEPREP, status); - + if(U_FAILURE(*status)){ return -1; } - + int32_t retLen = _internal_toASCII(src, srcLength, dest, destCapacity, options, nameprep, parseError, status); - + /* close the profile*/ usprep_close(nameprep); - + return retLen; } @@ -648,18 +650,18 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, if( (src==NULL) || (srcLength < -1) || (destCapacity<0) || (!dest && destCapacity > 0)){ *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; - } + } UStringPrepProfile* nameprep = usprep_openByType(USPREP_RFC3491_NAMEPREP, status); - + if(U_FAILURE(*status)){ return -1; } - + int32_t retLen = _internal_toUnicode(src, srcLength, dest, destCapacity, options, nameprep, parseError, status); usprep_close(nameprep); - + return retLen; } @@ -682,12 +684,12 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength, int32_t reqLength = 0; UStringPrepProfile* nameprep = usprep_openByType(USPREP_RFC3491_NAMEPREP, status); - + if(U_FAILURE(*status)){ return 0; } - //initialize pointers + //initialize pointers UChar *delimiter = (UChar*)src; UChar *labelStart = (UChar*)src; UChar *currentDest = (UChar*) dest; @@ -702,24 +704,24 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength, labelLen = getNextSeparator(labelStart,remainingLen, &delimiter,&done); labelReqLength = 0; if(!(labelLen==0 && done)){// make sure this is not a root label separator. - - labelReqLength = _internal_toASCII( labelStart, labelLen, - currentDest, remainingDestCapacity, - options, nameprep, + + labelReqLength = _internal_toASCII( labelStart, labelLen, + currentDest, remainingDestCapacity, + options, nameprep, parseError, status); - + if(*status == U_BUFFER_OVERFLOW_ERROR){ - + *status = U_ZERO_ERROR; // reset error remainingDestCapacity = 0; } } - + if(U_FAILURE(*status)){ break; } - + reqLength +=labelReqLength; // adjust the destination pointer if(labelReqLength < remainingDestCapacity){ @@ -753,7 +755,7 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength, } usprep_close(nameprep); - + return u_terminateUChars(dest, destCapacity, reqLength, status); } @@ -763,7 +765,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, int32_t options, UParseError* parseError, UErrorCode* status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -775,7 +777,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, int32_t reqLength = 0; UStringPrepProfile* nameprep = usprep_openByType(USPREP_RFC3491_NAMEPREP, status); - + if(U_FAILURE(*status)){ return 0; } @@ -792,21 +794,21 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, for(;;){ labelLen = getNextSeparator(labelStart,remainingLen, &delimiter,&done); - - // The RFC states that + + // The RFC states that // // ToUnicode never fails. If any step fails, then the original input // is returned immediately in that step. // // _internal_toUnicode will copy the label. - /*if(labelLen==0 && done==FALSE){ + /*if(labelLen==0 && done==FALSE){ *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; break; }*/ - - labelReqLength = _internal_toUnicode(labelStart, labelLen, - currentDest, remainingDestCapacity, - options, nameprep, + + labelReqLength = _internal_toUnicode(labelStart, labelLen, + currentDest, remainingDestCapacity, + options, nameprep, parseError, status); if(*status == U_BUFFER_OVERFLOW_ERROR){ @@ -817,7 +819,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, if(U_FAILURE(*status)){ break; } - + reqLength +=labelReqLength; // adjust the destination pointer if(labelReqLength < remainingDestCapacity){ @@ -852,7 +854,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, } usprep_close(nameprep); - + return u_terminateUChars(dest, destCapacity, reqLength, status); } @@ -870,7 +872,7 @@ uidna_compare( const UChar *s1, int32_t length1, UChar *b1 = b1Stack, *b2 = b2Stack; int32_t b1Len, b2Len, b1Capacity = MAX_IDN_BUFFER_SIZE, b2Capacity = MAX_IDN_BUFFER_SIZE; int32_t result=-1; - + UParseError parseError; b1Len = uidna_IDNToASCII(s1, length1, b1, b1Capacity, options, &parseError, status); @@ -883,9 +885,9 @@ uidna_compare( const UChar *s1, int32_t length1, } *status = U_ZERO_ERROR; // reset error - + b1Len = uidna_IDNToASCII(s1,length1,b1,b1Len, options, &parseError, status); - + } b2Len = uidna_IDNToASCII(s2,length2, b2,b2Capacity, options, &parseError, status); @@ -898,9 +900,9 @@ uidna_compare( const UChar *s1, int32_t length1, } *status = U_ZERO_ERROR; // reset error - + b2Len = uidna_IDNToASCII(s2, length2, b2, b2Len, options, &parseError, status); - + } // when toASCII is applied all label separators are replaced with FULL_STOP result = compareCaseInsensitiveASCII(b1,b1Len,b2,b2Len); diff --git a/deps/icu-small/source/common/uinit.cpp b/deps/icu-small/source/common/uinit.cpp index 901692864b3859..34e82a3db41752 100644 --- a/deps/icu-small/source/common/uinit.cpp +++ b/deps/icu-small/source/common/uinit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2015, International Business Machines diff --git a/deps/icu-small/source/common/uinvchar.c b/deps/icu-small/source/common/uinvchar.c index e0aa41306b1127..79dd05143f03e5 100644 --- a/deps/icu-small/source/common/uinvchar.c +++ b/deps/icu-small/source/common/uinvchar.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -568,7 +570,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n) { uint8_t *orig_dst = dst; - if(n==-1) { + if(n==-1) { n = uprv_strlen((const char*)src)+1; /* copy NUL */ } /* copy non-null */ @@ -589,7 +591,7 @@ uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n) { uint8_t *orig_dst = dst; - if(n==-1) { + if(n==-1) { n = uprv_strlen((const char*)src)+1; /* copy NUL */ } /* copy non-null */ @@ -608,3 +610,4 @@ uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n) } return orig_dst; } + diff --git a/deps/icu-small/source/common/uinvchar.h b/deps/icu-small/source/common/uinvchar.h index 1a9aa78d54e651..19a3b2696e758b 100644 --- a/deps/icu-small/source/common/uinvchar.h +++ b/deps/icu-small/source/common/uinvchar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uiter.cpp b/deps/icu-small/source/common/uiter.cpp index 2cc76a965fa91c..26ca877814d0e8 100644 --- a/deps/icu-small/source/common/uiter.cpp +++ b/deps/icu-small/source/common/uiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ulist.c b/deps/icu-small/source/common/ulist.c index ea00ac24efd61f..7f7fdd9ca47b2a 100644 --- a/deps/icu-small/source/common/ulist.c +++ b/deps/icu-small/source/common/ulist.c @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2009-2014, International Business Machines +* Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** */ @@ -13,10 +15,10 @@ typedef struct UListNode UListNode; struct UListNode { void *data; - + UListNode *next; UListNode *previous; - + /* When data is created with uprv_malloc, needs to be freed during deleteList function. */ UBool forceDelete; }; @@ -25,7 +27,7 @@ struct UList { UListNode *curr; UListNode *head; UListNode *tail; - + int32_t size; int32_t currentIndex; }; @@ -34,23 +36,23 @@ static void ulist_addFirstItem(UList *list, UListNode *newItem); U_CAPI UList *U_EXPORT2 ulist_createEmptyList(UErrorCode *status) { UList *newList = NULL; - + if (U_FAILURE(*status)) { return NULL; } - + newList = (UList *)uprv_malloc(sizeof(UList)); if (newList == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return NULL; } - + newList->curr = NULL; newList->head = NULL; newList->tail = NULL; newList->size = 0; newList->currentIndex = -1; - + return newList; } @@ -63,24 +65,51 @@ static void ulist_addFirstItem(UList *list, UListNode *newItem) { newItem->previous = NULL; list->head = newItem; list->tail = newItem; +} + +static void ulist_removeItem(UList *list, UListNode *p) { + if (p->previous == NULL) { + // p is the list head. + list->head = p->next; + } else { + p->previous->next = p->next; + } + if (p->next == NULL) { + // p is the list tail. + list->tail = p->previous; + } else { + p->next->previous = p->previous; + } + list->curr = NULL; list->currentIndex = 0; + --list->size; + if (p->forceDelete) { + uprv_free(p->data); + } + uprv_free(p); } U_CAPI void U_EXPORT2 ulist_addItemEndList(UList *list, const void *data, UBool forceDelete, UErrorCode *status) { UListNode *newItem = NULL; - + if (U_FAILURE(*status) || list == NULL || data == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } return; } - + newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); if (newItem == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } *status = U_MEMORY_ALLOCATION_ERROR; return; } newItem->data = (void *)(data); newItem->forceDelete = forceDelete; - + if (list->size == 0) { ulist_addFirstItem(list, newItem); } else { @@ -89,25 +118,31 @@ U_CAPI void U_EXPORT2 ulist_addItemEndList(UList *list, const void *data, UBool list->tail->next = newItem; list->tail = newItem; } - + list->size++; } U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBool forceDelete, UErrorCode *status) { UListNode *newItem = NULL; - + if (U_FAILURE(*status) || list == NULL || data == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } return; } - + newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); if (newItem == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } *status = U_MEMORY_ALLOCATION_ERROR; return; } newItem->data = (void *)(data); newItem->forceDelete = forceDelete; - + if (list->size == 0) { ulist_addFirstItem(list, newItem); } else { @@ -117,43 +152,49 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBoo list->head = newItem; list->currentIndex++; } - + list->size++; } U_CAPI UBool U_EXPORT2 ulist_containsString(const UList *list, const char *data, int32_t length) { - UBool result = FALSE; - const UListNode *pointer = NULL; - - if (list != NULL && list->size != 0) { - pointer = list->head; - - while (pointer != NULL) { + if (list != NULL) { + const UListNode *pointer; + for (pointer = list->head; pointer != NULL; pointer = pointer->next) { if (length == uprv_strlen(pointer->data)) { if (uprv_memcmp(data, pointer->data, length) == 0) { - result = TRUE; - break; + return TRUE; } } - - pointer = pointer->next; } } + return FALSE; +} - return result; +U_CAPI UBool U_EXPORT2 ulist_removeString(UList *list, const char *data) { + if (list != NULL) { + UListNode *pointer; + for (pointer = list->head; pointer != NULL; pointer = pointer->next) { + if (uprv_strcmp(data, pointer->data) == 0) { + ulist_removeItem(list, pointer); + // Remove only the first occurrence, like Java LinkedList.remove(Object). + return TRUE; + } + } + } + return FALSE; } U_CAPI void *U_EXPORT2 ulist_getNext(UList *list) { UListNode *curr = NULL; - + if (list == NULL || list->curr == NULL) { return NULL; } - + curr = list->curr; list->curr = curr->next; list->currentIndex++; - + return curr->data; } @@ -161,7 +202,7 @@ U_CAPI int32_t U_EXPORT2 ulist_getListSize(const UList *list) { if (list != NULL) { return list->size; } - + return -1; } @@ -203,7 +244,7 @@ U_CAPI int32_t U_EXPORT2 ulist_count_keyword_values(UEnumeration *en, UErrorCode if (U_FAILURE(*status)) { return -1; } - + return ulist_getListSize((UList *)(en->context)); } @@ -224,10 +265,11 @@ U_CAPI void U_EXPORT2 ulist_reset_keyword_values_iterator(UEnumeration *en, UErr if (U_FAILURE(*status)) { return ; } - + ulist_resetList((UList *)(en->context)); } U_CAPI UList * U_EXPORT2 ulist_getListFromEnum(UEnumeration *en) { return (UList *)(en->context); } + diff --git a/deps/icu-small/source/common/ulist.h b/deps/icu-small/source/common/ulist.h index 4789247e318404..6f292bf9dcaff1 100644 --- a/deps/icu-small/source/common/ulist.h +++ b/deps/icu-small/source/common/ulist.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2009, International Business Machines +* Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** */ @@ -22,6 +24,8 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBoo U_CAPI UBool U_EXPORT2 ulist_containsString(const UList *list, const char *data, int32_t length); +U_CAPI UBool U_EXPORT2 ulist_removeString(UList *list, const char *data); + U_CAPI void *U_EXPORT2 ulist_getNext(UList *list); U_CAPI int32_t U_EXPORT2 ulist_getListSize(const UList *list); diff --git a/deps/icu-small/source/common/ulistformatter.cpp b/deps/icu-small/source/common/ulistformatter.cpp index 6931cddfe07c06..98aa50e25fb604 100644 --- a/deps/icu-small/source/common/ulistformatter.cpp +++ b/deps/icu-small/source/common/ulistformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/common/uloc.cpp b/deps/icu-small/source/common/uloc.cpp index 90c12b4f0d54c4..2a02b27c5ba1f7 100644 --- a/deps/icu-small/source/common/uloc.cpp +++ b/deps/icu-small/source/common/uloc.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -45,6 +47,8 @@ #include /* for sprintf */ +using namespace icu; + /* ### Declarations **************************************************/ /* Locale stuff from locid.cpp */ @@ -1470,6 +1474,8 @@ typedef struct UKeywordsContext { char* current; } UKeywordsContext; +U_CDECL_BEGIN + static void U_CALLCONV uloc_kw_closeKeywords(UEnumeration *enumerator) { uprv_free(((UKeywordsContext *)enumerator->context)->keywords); @@ -1488,7 +1494,7 @@ uloc_kw_countKeywords(UEnumeration *en, UErrorCode * /*status*/) { return result; } -static const char* U_CALLCONV +static const char * U_CALLCONV uloc_kw_nextKeyword(UEnumeration* en, int32_t* resultLength, UErrorCode* /*status*/) { @@ -1512,6 +1518,9 @@ uloc_kw_resetKeywords(UEnumeration* en, ((UKeywordsContext *)en->context)->current = ((UKeywordsContext *)en->context)->keywords; } +U_CDECL_END + + static const UEnumeration gKeywordsEnum = { NULL, NULL, @@ -2246,7 +2255,7 @@ _uloc_strtod(const char *start, char **end) { typedef struct { float q; int32_t dummy; /* to avoid uninitialized memory copy from qsort */ - char *locale; + char locale[ULOC_FULLNAME_CAPACITY+1]; } _acceptLangItem; static int32_t U_CALLCONV @@ -2288,9 +2297,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult UEnumeration* availableLocales, UErrorCode *status) { - _acceptLangItem *j; - _acceptLangItem smallBuffer[30]; - char **strs; + MaybeStackArray<_acceptLangItem, 4> items; // Struct for collecting items. char tmp[ULOC_FULLNAME_CAPACITY +1]; int32_t n = 0; const char *itemEnd; @@ -2300,11 +2307,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult int32_t res; int32_t i; int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage); - int32_t jSize; - char *tempstr; /* Use for null pointer check */ - j = smallBuffer; - jSize = UPRV_LENGTHOF(smallBuffer); if(U_FAILURE(*status)) { return -1; } @@ -2332,27 +2335,29 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult while(isspace(*t)) { t++; } - j[n].q = (float)_uloc_strtod(t,NULL); + items[n].q = (float)_uloc_strtod(t,NULL); } else { /* no semicolon - it's 1.0 */ - j[n].q = 1.0f; + items[n].q = 1.0f; paramEnd = itemEnd; } - j[n].dummy=0; + items[n].dummy=0; /* eat spaces prior to semi */ for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--) ; - /* Check for null pointer from uprv_strndup */ - tempstr = uprv_strndup(s,(int32_t)((t+1)-s)); - if (tempstr == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return -1; - } - j[n].locale = tempstr; - uloc_canonicalize(j[n].locale,tmp,UPRV_LENGTHOF(tmp),status); - if(strcmp(j[n].locale,tmp)) { - uprv_free(j[n].locale); - j[n].locale=uprv_strdup(tmp); + int32_t slen = ((t+1)-s); + if(slen > ULOC_FULLNAME_CAPACITY) { + *status = U_BUFFER_OVERFLOW_ERROR; + return -1; // too big + } + uprv_strncpy(items[n].locale, s, slen); + items[n].locale[slen]=0; // terminate + int32_t clen = uloc_canonicalize(items[n].locale, tmp, UPRV_LENGTHOF(tmp)-1, status); + if(U_FAILURE(*status)) return -1; + if((clen!=slen) || (uprv_strncmp(items[n].locale, tmp, slen))) { + // canonicalization had an effect- copy back + uprv_strncpy(items[n].locale, tmp, clen); + items[n].locale[clen] = 0; // terminate } #if defined(ULOC_DEBUG) /*fprintf(stderr,"%d: s <%s> q <%g>\n", n, j[n].locale, j[n].q);*/ @@ -2362,42 +2367,22 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult while(*s==',') { /* eat duplicate commas */ s++; } - if(n>=jSize) { - if(j==smallBuffer) { /* overflowed the small buffer. */ - j = static_cast<_acceptLangItem *>(uprv_malloc(sizeof(j[0])*(jSize*2))); - if(j!=NULL) { - uprv_memcpy(j,smallBuffer,sizeof(j[0])*jSize); - } -#if defined(ULOC_DEBUG) - fprintf(stderr,"malloced at size %d\n", jSize); -#endif - } else { - j = static_cast<_acceptLangItem *>(uprv_realloc(j, sizeof(j[0])*jSize*2)); + if(n>=items.getCapacity()) { // If we need more items + if(NULL == items.resize(items.getCapacity()*2, items.getCapacity())) { + *status = U_MEMORY_ALLOCATION_ERROR; + return -1; + } #if defined(ULOC_DEBUG) - fprintf(stderr,"re-alloced at size %d\n", jSize); + fprintf(stderr,"malloced at size %d\n", items.getCapacity()); #endif - } - jSize *= 2; - if(j==NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return -1; - } } } - uprv_sortArray(j, n, sizeof(j[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); - if(U_FAILURE(*status)) { - if(j != smallBuffer) { -#if defined(ULOC_DEBUG) - fprintf(stderr,"freeing j %p\n", j); -#endif - uprv_free(j); - } + uprv_sortArray(items.getAlias(), n, sizeof(items[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); + if (U_FAILURE(*status)) { return -1; } - strs = static_cast(uprv_malloc((size_t)(sizeof(strs[0])*n))); - /* Check for null pointer */ - if (strs == NULL) { - uprv_free(j); /* Free to avoid memory leak */ + LocalMemory strs(NULL); + if (strs.allocateInsteadAndReset(n) == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return -1; } @@ -2405,20 +2390,10 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult #if defined(ULOC_DEBUG) /*fprintf(stderr,"%d: s <%s> q <%g>\n", i, j[i].locale, j[i].q);*/ #endif - strs[i]=j[i].locale; + strs[i]=items[i].locale; } res = uloc_acceptLanguage(result, resultAvailable, outResult, - (const char**)strs, n, availableLocales, status); - for(i=0;ikey) - *(cur->key); } } else if (len == 1) { - cmp = *(ext->key) - LDMLEXT; + cmp = *(ext->key) - LDMLEXT; } else if (curlen == 1) { cmp = LDMLEXT - *(cur->key); } else { cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); + /* Both are u extension keys - we need special handling for 'attribute' */ + if (cmp != 0) { + if (uprv_strcmp(cur->key, LOCALE_ATTRIBUTE_KEY) == 0) { + cmp = 1; + } else if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { + cmp = -1; + } + } } } else { cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); @@ -892,7 +903,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; char attrBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY] = { 0 }; int32_t attrBufLength = 0; - UBool isAttribute = FALSE; UEnumeration *keywordEnum = NULL; int32_t reslen = 0; @@ -919,7 +929,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac UBool isBcpUExt; while (TRUE) { - isAttribute = FALSE; key = uenum_next(keywordEnum, NULL, status); if (key == NULL) { break; @@ -941,7 +950,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac /* special keyword used for representing Unicode locale attributes */ if (uprv_strcmp(key, LOCALE_ATTRIBUTE_KEY) == 0) { - isAttribute = TRUE; if (len > 0) { int32_t i = 0; while (TRUE) { @@ -984,6 +992,9 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } } } + /* for a place holder ExtensionListEntry */ + bcpKey = LOCALE_ATTRIBUTE_KEY; + bcpValue = NULL; } } else if (isBcpUExt) { bcpKey = uloc_toUnicodeLocaleKey(key); @@ -1005,7 +1016,7 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac continue; } if (bcpValue == buf) { - /* + /* When uloc_toUnicodeLocaleType(key, buf) returns the input value as is, the value is well-formed, but has no known mapping. This implementation normalizes the @@ -1063,22 +1074,20 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } } - if (!isAttribute) { - /* create ExtensionListEntry */ - ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (ext == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - ext->key = bcpKey; - ext->value = bcpValue; + /* create ExtensionListEntry */ + ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); + if (ext == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + break; + } + ext->key = bcpKey; + ext->value = bcpValue; - if (!_addExtensionToList(&firstExt, ext, TRUE)) { - uprv_free(ext); - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } + if (!_addExtensionToList(&firstExt, ext, TRUE)) { + uprv_free(ext); + if (strict) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + break; } } } @@ -1101,12 +1110,9 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac if (U_SUCCESS(*status) && (firstExt != NULL || firstAttr != NULL)) { UBool startLDMLExtension = FALSE; - - attr = firstAttr; - ext = firstExt; - do { - if (!startLDMLExtension && (ext && uprv_strlen(ext->key) > 1)) { - /* write LDML singleton extension */ + for (ext = firstExt; ext; ext = ext->next) { + if (!startLDMLExtension && uprv_strlen(ext->key) > 1) { + /* first LDML u singlton extension */ if (reslen < capacity) { *(appendAt + reslen) = SEP; } @@ -1120,7 +1126,20 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } /* write out the sorted BCP47 attributes, extensions and private use */ - if (ext && (uprv_strlen(ext->key) == 1 || attr == NULL)) { + if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { + /* write the value for the attributes */ + for (attr = firstAttr; attr; attr = attr->next) { + if (reslen < capacity) { + *(appendAt + reslen) = SEP; + } + reslen++; + len = (int32_t)uprv_strlen(attr->attribute); + if (reslen < capacity) { + uprv_memcpy(appendAt + reslen, attr->attribute, uprv_min(len, capacity - reslen)); + } + reslen += len; + } + } else { if (reslen < capacity) { *(appendAt + reslen) = SEP; } @@ -1139,23 +1158,8 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac uprv_memcpy(appendAt + reslen, ext->value, uprv_min(len, capacity - reslen)); } reslen += len; - - ext = ext->next; - } else if (attr) { - /* write the value for the attributes */ - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - len = (int32_t)uprv_strlen(attr->attribute); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, attr->attribute, uprv_min(len, capacity - reslen)); - } - reslen += len; - - attr = attr->next; } - } while (attr != NULL || ext != NULL); + } } cleanup: /* clean up */ @@ -1440,7 +1444,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT pType = LOCALE_TYPE_YES; } - /* Special handling for u-va-posix, since we want to treat this as a variant, + /* Special handling for u-va-posix, since we want to treat this as a variant, not as a keyword */ if (!variantExists && !uprv_strcmp(pKey, POSIX_KEY) && !uprv_strcmp(pType, POSIX_VALUE) ) { *posixVariant = TRUE; @@ -1771,6 +1775,15 @@ _appendPrivateuseToLanguageTag(const char* localeID, char* appendAt, int32_t cap #define EXTV 0x0040 #define PRIV 0x0080 +/** + * Ticket #12705 - Visual Studio 2015 Update 3 contains a new code optimizer which has problems optimizing + * this function. (See https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ ) + * As a workaround, we will turn off optimization just for this function on VS2015 Update 3 and above. + */ +#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +#pragma optimize( "", off ) +#endif + static ULanguageTag* ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status) { ULanguageTag *t; @@ -2134,6 +2147,13 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta return NULL; } +/** +* Ticket #12705 - Turn optimization back on. +*/ +#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +#pragma optimize( "", on ) +#endif + static void ultag_close(ULanguageTag* langtag) { @@ -2507,3 +2527,5 @@ uloc_forLanguageTag(const char* langtag, ultag_close(lt); return u_terminateChars(localeID, localeIDCapacity, reslen, status); } + + diff --git a/deps/icu-small/source/common/ulocimp.h b/deps/icu-small/source/common/ulocimp.h index 36713e69be1b7b..f54e216eb7b504 100644 --- a/deps/icu-small/source/common/ulocimp.h +++ b/deps/icu-small/source/common/ulocimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2004-2016, International Business Machines @@ -38,10 +40,10 @@ uloc_getTableStringWithFallback( /*returns TRUE if a is an ID separator FALSE otherwise*/ #define _isIDSeparator(a) (a == '_' || a == '-') -U_CFUNC const char* +U_CFUNC const char* uloc_getCurrentCountryID(const char* oldID); -U_CFUNC const char* +U_CFUNC const char* uloc_getCurrentLanguageID(const char* oldID); U_CFUNC int32_t @@ -66,7 +68,7 @@ ulocimp_getCountry(const char *localeID, * (3) if inferRegion is TRUE, the region suggested by * getLikelySubtags on the localeID. * If no region is found, returns length 0. - * + * * @param localeID * The complete locale ID (with keywords) from which * to get the region to use for supplemental data. @@ -75,7 +77,7 @@ ulocimp_getCountry(const char *localeID, * no other region is found. * @param region * Buffer in which to put the region ID found; should - * have a capacity at least ULOC_COUNTRY_CAPACITY. + * have a capacity at least ULOC_COUNTRY_CAPACITY. * @param regionCapacity * The actual capacity of the region buffer. * @param status diff --git a/deps/icu-small/source/common/umapfile.c b/deps/icu-small/source/common/umapfile.c index 016758892992dc..d5d2033e415d84 100644 --- a/deps/icu-small/source/common/umapfile.c +++ b/deps/icu-small/source/common/umapfile.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -299,14 +301,14 @@ } return dest; } - + /*------------------------------------------------------------------------------ - * - * computeDirPath given a user-supplied path of an item to be opened, - * compute and return - * - the full directory path to be used + * + * computeDirPath given a user-supplied path of an item to be opened, + * compute and return + * - the full directory path to be used * when opening the file. - * - Pointer to null at end of above returned path + * - Pointer to null at end of above returned path * * Parameters: * path: input path. Buffer is not altered. @@ -318,23 +320,23 @@ * TODO: This works the way ICU historically has, but the * whole data fallback search path is so complicated that * proabably almost no one will ever really understand it, - * the potential for confusion is large. (It's not just + * the potential for confusion is large. (It's not just * this one function, but the whole scheme.) - * + * *------------------------------------------------------------------------------*/ static char *uprv_computeDirPath(const char *path, char *pathBuffer) { char *finalSlash; /* Ptr to last dir separator in input path, or null if none. */ int32_t pathLen; /* Length of the returned directory path */ - + finalSlash = 0; if (path != 0) { finalSlash = uprv_strrchr(path, U_FILE_SEP_CHAR); } - + *pathBuffer = 0; if (finalSlash == 0) { - /* No user-supplied path. + /* No user-supplied path. * Copy the ICU_DATA path to the path buffer and return that*/ const char *icuDataDir; icuDataDir=u_getDataDirectory(); @@ -344,8 +346,8 @@ /* there is no icuDataDir either. Just return the empty pathBuffer. */ return pathBuffer; } - } - + } + /* User supplied path did contain a directory portion. * Copy it to the output path buffer */ pathLen = (int32_t)(finalSlash - path + 1); @@ -353,7 +355,7 @@ *(pathBuffer+pathLen) = 0; return pathBuffer+pathLen; } - + # define DATA_TYPE "dat" @@ -456,7 +458,7 @@ pData->map = NULL; pData->mapAddr = NULL; pData->pHeader = NULL; - } + } } #else diff --git a/deps/icu-small/source/common/umapfile.h b/deps/icu-small/source/common/umapfile.h index 2995e381ed30c0..70a6cc5f861784 100644 --- a/deps/icu-small/source/common/umapfile.h +++ b/deps/icu-small/source/common/umapfile.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/umath.c b/deps/icu-small/source/common/umath.c index 9e540d4d8d7a82..78f1ca05c25027 100644 --- a/deps/icu-small/source/common/umath.c +++ b/deps/icu-small/source/common/umath.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -21,3 +23,4 @@ uprv_min(int32_t x, int32_t y) { return (x > y ? y : x); } + diff --git a/deps/icu-small/source/common/umutex.cpp b/deps/icu-small/source/common/umutex.cpp index cffa109d6348cf..0532838caf9bdb 100644 --- a/deps/icu-small/source/common/umutex.cpp +++ b/deps/icu-small/source/common/umutex.cpp @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1997-2015, International Business Machines +* Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -37,16 +39,7 @@ static UMutex globalMutex = U_MUTEX_INITIALIZER; // Build time user mutex hook: #include "U_USER_MUTEX_CPP" #include U_MUTEX_XSTR(U_USER_MUTEX_CPP) -#elif U_PLATFORM_HAS_WIN32_API - -//------------------------------------------------------------------------------------------- -// -// Windows Specific Definitions -// -// Note: Cygwin (and possibly others) have both WIN32 and POSIX. -// Prefer Win32 in these cases. (Win32 comes ahead in the #if chain) -// -//------------------------------------------------------------------------------------------- +#elif U_PLATFORM_USES_ONLY_WIN32_API #if defined U_NO_PLATFORM_ATOMICS #error ICU on Win32 requires support for low level atomic operations. @@ -68,10 +61,8 @@ U_NAMESPACE_BEGIN U_COMMON_API UBool U_EXPORT2 umtx_initImplPreInit(UInitOnce &uio) { for (;;) { int32_t previousState = InterlockedCompareExchange( -#if (U_PLATFORM == U_PF_MINGW) || (U_PLATFORM == U_PF_CYGWIN) || defined(__clang__) - (LONG volatile *) // this is the type given in the API doc for this function. -#endif - &uio.fState, // Destination + (LONG volatile *) // this is the type given in the API doc for this function. + &uio.fState, // Destination 1, // Exchange Value 0); // Compare value @@ -168,7 +159,7 @@ umtx_condWait(UConditionVar *condition, UMutex *mutex) { condition->fWaitCount++; umtx_unlock(mutex); - WaitForSingleObject(condition->fEntryGate, INFINITE); + WaitForSingleObject(condition->fEntryGate, INFINITE); umtx_lock(mutex); condition->fWaitCount--; if (condition->fWaitCount == 0) { diff --git a/deps/icu-small/source/common/umutex.h b/deps/icu-small/source/common/umutex.h index f670b3d13ff371..b52010f8aed3d4 100644 --- a/deps/icu-small/source/common/umutex.h +++ b/deps/icu-small/source/common/umutex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -187,16 +189,16 @@ U_NAMESPACE_BEGIN typedef int32_t u_atomic_int32_t; #define ATOMIC_INT32_T_INITIALIZER(val) val -U_COMMON_API int32_t U_EXPORT2 +U_COMMON_API int32_t U_EXPORT2 umtx_loadAcquire(u_atomic_int32_t &var); -U_COMMON_API void U_EXPORT2 +U_COMMON_API void U_EXPORT2 umtx_storeRelease(u_atomic_int32_t &var, int32_t val); -U_COMMON_API int32_t U_EXPORT2 +U_COMMON_API int32_t U_EXPORT2 umtx_atomic_inc(u_atomic_int32_t *p); -U_COMMON_API int32_t U_EXPORT2 +U_COMMON_API int32_t U_EXPORT2 umtx_atomic_dec(u_atomic_int32_t *p); U_NAMESPACE_END @@ -229,7 +231,7 @@ struct UInitOnce { U_COMMON_API UBool U_EXPORT2 umtx_initImplPreInit(UInitOnce &); U_COMMON_API void U_EXPORT2 umtx_initImplPostInit(UInitOnce &); -template void umtx_initOnce(UInitOnce &uio, T *obj, void (T::*fp)()) { +template void umtx_initOnce(UInitOnce &uio, T *obj, void (U_CALLCONV T::*fp)()) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -242,7 +244,7 @@ template void umtx_initOnce(UInitOnce &uio, T *obj, void (T::*fp)()) { // umtx_initOnce variant for plain functions, or static class functions. // No context parameter. -inline void umtx_initOnce(UInitOnce &uio, void (*fp)()) { +inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)()) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -254,7 +256,7 @@ inline void umtx_initOnce(UInitOnce &uio, void (*fp)()) { // umtx_initOnce variant for plain functions, or static class functions. // With ErrorCode, No context parameter. -inline void umtx_initOnce(UInitOnce &uio, void (*fp)(UErrorCode &), UErrorCode &errCode) { +inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(UErrorCode &), UErrorCode &errCode) { if (U_FAILURE(errCode)) { return; } @@ -273,7 +275,7 @@ inline void umtx_initOnce(UInitOnce &uio, void (*fp)(UErrorCode &), UErrorCode & // umtx_initOnce variant for plain functions, or static class functions, // with a context parameter. -template void umtx_initOnce(UInitOnce &uio, void (*fp)(T), T context) { +template void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(T), T context) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -285,7 +287,7 @@ template void umtx_initOnce(UInitOnce &uio, void (*fp)(T), T context) { // umtx_initOnce variant for plain functions, or static class functions, // with a context parameter and an error code. -template void umtx_initOnce(UInitOnce &uio, void (*fp)(T, UErrorCode &), T context, UErrorCode &errCode) { +template void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(T, UErrorCode &), T context, UErrorCode &errCode) { if (U_FAILURE(errCode)) { return; } @@ -318,13 +320,7 @@ U_NAMESPACE_END // #inlcude "U_USER_MUTEX_H" #include U_MUTEX_XSTR(U_USER_MUTEX_H) -#elif U_PLATFORM_HAS_WIN32_API - -/* Windows Definitions. - * Windows comes first in the platform chain. - * Cygwin (and possibly others) have both WIN32 and POSIX APIs. Prefer Win32 in this case. - */ - +#elif U_PLATFORM_USES_ONLY_WIN32_API /* For CRITICAL_SECTION */ @@ -364,7 +360,7 @@ struct UConditionVar { }; #define U_CONDITION_INITIALIZER {NULL, NULL, 0} - + #elif U_PLATFORM_IMPLEMENTS_POSIX @@ -436,7 +432,7 @@ U_INTERNAL void U_EXPORT2 umtx_condWait(UConditionVar *cond, UMutex *mutex); * Broadcast wakeup of all threads waiting on a Condition. * The associated mutex must be locked by the calling thread when calling * this function; this is a temporary ICU restriction. - * + * * @param cond the condition variable. */ U_INTERNAL void U_EXPORT2 umtx_condBroadcast(UConditionVar *cond); diff --git a/deps/icu-small/source/common/unames.cpp b/deps/icu-small/source/common/unames.cpp index 58d1a39bf55b31..9da2045bc47925 100644 --- a/deps/icu-small/source/common/unames.cpp +++ b/deps/icu-small/source/common/unames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -142,7 +144,7 @@ static const char * const charCatNames[U_CHAR_EXTENDED_CATEGORY_COUNT] = { "format", "private use area", "surrogate", - "dash punctuation", + "dash punctuation", "start punctuation", "end punctuation", "connector punctuation", @@ -449,7 +451,7 @@ static uint16_t getExtName(uint32_t code, char *buffer, uint16_t bufferLength) { UChar32 cp; int ndigits, i; - + WRITE_CHAR(buffer, bufferLength, length, '<'); while (catname[length - 1]) { WRITE_CHAR(buffer, bufferLength, length, catname[length - 1]); @@ -637,7 +639,7 @@ enumGroupNames(UCharNames *names, const uint16_t *group, * It only needs to do it if it is called with a real function and not * with the dummy DO_FIND_NAME, because u_charFromName() does a check * for extended names by itself. - */ + */ static UBool enumExtNames(UChar32 start, UChar32 end, UEnumCharNamesFn *fn, void *context) @@ -645,7 +647,7 @@ enumExtNames(UChar32 start, UChar32 end, if(fn!=DO_FIND_NAME) { char buffer[200]; uint16_t length; - + while(start<=end) { buffer[length = getExtName(start, buffer, sizeof(buffer))] = 0; /* here, we assume that the buffer is large enough */ @@ -763,7 +765,7 @@ enumNames(UCharNames *names, } return enumExtNames(start, limit - 1, fn, context); } - + return TRUE; } diff --git a/deps/icu-small/source/common/unicode/appendable.h b/deps/icu-small/source/common/unicode/appendable.h index a6a83b15cf9719..2ae334505ef1f5 100644 --- a/deps/icu-small/source/common/unicode/appendable.h +++ b/deps/icu-small/source/common/unicode/appendable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines diff --git a/deps/icu-small/source/common/unicode/brkiter.h b/deps/icu-small/source/common/unicode/brkiter.h index 26ad182eafff56..88b39c6699b2f6 100644 --- a/deps/icu-small/source/common/unicode/brkiter.h +++ b/deps/icu-small/source/common/unicode/brkiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -168,6 +170,11 @@ class U_COMMON_API BreakIterator : public UObject { /** * Change the text over which this operates. The text boundary is * reset to the start. + * + * The BreakIterator will retain a reference to the supplied string. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param text The UnicodeString used to change the text. * @stable ICU 2.0 */ diff --git a/deps/icu-small/source/common/unicode/bytestream.h b/deps/icu-small/source/common/unicode/bytestream.h index cdab0ec743577a..15562271bfae66 100644 --- a/deps/icu-small/source/common/unicode/bytestream.h +++ b/deps/icu-small/source/common/unicode/bytestream.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2012, International Business Machines // Corporation and others. All Rights Reserved. // @@ -131,7 +133,7 @@ class U_COMMON_API ByteSink : public UMemory { // ------------------------------------------------------------- // Some standard implementations -/** +/** * Implementation of ByteSink that writes to a flat byte array, * with bounds-checking: * This sink will not write more than capacity bytes to outbuf. @@ -215,14 +217,14 @@ class U_COMMON_API CheckedArrayByteSink : public ByteSink { int32_t size_; int32_t appended_; UBool overflowed_; - CheckedArrayByteSink(); ///< default constructor not implemented + CheckedArrayByteSink(); ///< default constructor not implemented CheckedArrayByteSink(const CheckedArrayByteSink &); ///< copy constructor not implemented CheckedArrayByteSink &operator=(const CheckedArrayByteSink &); ///< assignment operator not implemented }; #if U_HAVE_STD_STRING -/** +/** * Implementation of ByteSink that writes to a "string". * The StringClass is usually instantiated with a std::string. * @stable ICU 4.2 @@ -245,7 +247,7 @@ class StringByteSink : public ByteSink { virtual void Append(const char* data, int32_t n) { dest_->append(data, n); } private: StringClass* dest_; - StringByteSink(); ///< default constructor not implemented + StringByteSink(); ///< default constructor not implemented StringByteSink(const StringByteSink &); ///< copy constructor not implemented StringByteSink &operator=(const StringByteSink &); ///< assignment operator not implemented }; diff --git a/deps/icu-small/source/common/unicode/bytestrie.h b/deps/icu-small/source/common/unicode/bytestrie.h index 9c7782740dba27..4a30ce1c0428b5 100644 --- a/deps/icu-small/source/common/unicode/bytestrie.h +++ b/deps/icu-small/source/common/unicode/bytestrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -306,7 +308,7 @@ class U_COMMON_API BytesTrie : public UMemory { * @return The NUL-terminated byte sequence for the last successful next(). * @stable ICU 4.8 */ - const StringPiece &getString() const { return sp_; } + StringPiece getString() const; /** * @return The value for the last successful next(). * @stable ICU 4.8 @@ -325,7 +327,6 @@ class U_COMMON_API BytesTrie : public UMemory { int32_t initialRemainingMatchLength_; CharString *str_; - StringPiece sp_; int32_t maxLength_; int32_t value_; diff --git a/deps/icu-small/source/common/unicode/bytestriebuilder.h b/deps/icu-small/source/common/unicode/bytestriebuilder.h index e7fbd6b23713e0..fe96887d511d7e 100644 --- a/deps/icu-small/source/common/unicode/bytestriebuilder.h +++ b/deps/icu-small/source/common/unicode/bytestriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines @@ -29,7 +31,6 @@ U_NAMESPACE_BEGIN class BytesTrieElement; class CharString; - /** * Builder class for BytesTrie. * @@ -65,7 +66,7 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { * @return *this * @stable ICU 4.8 */ - BytesTrieBuilder &add(const StringPiece &s, int32_t value, UErrorCode &errorCode); + BytesTrieBuilder &add(StringPiece s, int32_t value, UErrorCode &errorCode); /** * Builds a BytesTrie for the add()ed data. @@ -141,7 +142,6 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; } virtual int32_t getMaxLinearMatchLength() const { return BytesTrie::kMaxLinearMatchLength; } - // don't use #ifndef U_HIDE_INTERNAL_API with private class members /** * @internal */ @@ -153,7 +153,7 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { private: const char *s; }; - + // don't use #ifndef U_HIDE_INTERNAL_API with private class members or virtual methods. virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length, Node *nextNode) const; diff --git a/deps/icu-small/source/common/unicode/caniter.h b/deps/icu-small/source/common/unicode/caniter.h index 31fcea312ada02..7c1bf6afd0013f 100644 --- a/deps/icu-small/source/common/unicode/caniter.h +++ b/deps/icu-small/source/common/unicode/caniter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and @@ -19,7 +21,7 @@ * \file * \brief C++ API: Canonical Iterator */ - + /** Should permutation skip characters with combining class zero * Should be either TRUE or FALSE. This is a compile time option * @stable ICU 2.4 diff --git a/deps/icu-small/source/common/unicode/chariter.h b/deps/icu-small/source/common/unicode/chariter.h index a955ad52a40d0c..07d1ca3d2dc86b 100644 --- a/deps/icu-small/source/common/unicode/chariter.h +++ b/deps/icu-small/source/common/unicode/chariter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * @@ -17,7 +19,7 @@ * \file * \brief C++ API: Character Iterator */ - + U_NAMESPACE_BEGIN /** * Abstract class that defines an API for forward-only iteration @@ -66,7 +68,7 @@ U_NAMESPACE_BEGIN * * * Example: - * \code + * \code * void function1(ForwardCharacterIterator &it) { * UChar32 c; * while(it.hasNext()) { @@ -94,27 +96,27 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * @stable ICU 2.0 */ enum { DONE = 0xffff }; - + /** - * Destructor. + * Destructor. * @stable ICU 2.0 */ virtual ~ForwardCharacterIterator(); - + /** * Returns true when both iterators refer to the same - * character in the same character-storage object. + * character in the same character-storage object. * @param that The ForwardCharacterIterator to be compared for equality * @return true when both iterators refer to the same * character in the same character-storage object * @stable ICU 2.0 */ virtual UBool operator==(const ForwardCharacterIterator& that) const = 0; - + /** * Returns true when the iterators refer to different * text-storage objects, or to different characters in the - * same text-storage object. + * same text-storage object. * @param that The ForwardCharacterIterator to be compared for inequality * @return true when the iterators refer to different * text-storage objects, or to different characters in the @@ -122,23 +124,23 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * @stable ICU 2.0 */ inline UBool operator!=(const ForwardCharacterIterator& that) const; - + /** - * Generates a hash code for this iterator. + * Generates a hash code for this iterator. * @return the hash code. * @stable ICU 2.0 */ virtual int32_t hashCode(void) const = 0; - + /** * Returns a UClassID for this ForwardCharacterIterator ("poor man's * RTTI").

Despite the fact that this function is public, - * DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API! - * @return a UClassID for this ForwardCharacterIterator + * DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API! + * @return a UClassID for this ForwardCharacterIterator * @stable ICU 2.0 */ virtual UClassID getDynamicClassID(void) const = 0; - + /** * Gets the current code unit for returning and advances to the next code unit * in the iteration range @@ -148,7 +150,7 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * @stable ICU 2.0 */ virtual UChar nextPostInc(void) = 0; - + /** * Gets the current code point for returning and advances to the next code point * in the iteration range @@ -158,7 +160,7 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * @stable ICU 2.0 */ virtual UChar32 next32PostInc(void) = 0; - + /** * Returns FALSE if there are no more code units or code points * at or after the current position in the iteration range. @@ -169,14 +171,14 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * @stable ICU 2.0 */ virtual UBool hasNext() = 0; - + protected: /** Default constructor to be overridden in the implementing class. @stable ICU 2.0*/ ForwardCharacterIterator(); - + /** Copy constructor to be overridden in the implementing class. @stable ICU 2.0*/ ForwardCharacterIterator(const ForwardCharacterIterator &other); - + /** * Assignment operator to be overridden in the implementing class. * @stable ICU 2.0 @@ -288,7 +290,7 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { * \endcode * * Traverse the text from start to finish - *

+ * 
 
  * \code
  *  void traverseForward(CharacterIterator& iter)
  *  {
@@ -309,7 +311,7 @@ class U_COMMON_API ForwardCharacterIterator : public UObject {
  *  }
  * \endcode
  * 
- * Traverse both forward and backward from a given position in the text. + * Traverse both forward and backward from a given position in the text. * Calls to notBoundary() in this example represents some additional stopping criteria. *
  * \code
@@ -324,7 +326,7 @@ class U_COMMON_API ForwardCharacterIterator : public UObject {
  *          c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
  *          c = iter.previous()) {}
  *      int32_t start = iter.getIndex() + 1;
- *
+ *  
  *      cout << "start: " << start << " end: " << end << endl;
  *      for (c = iter.setIndex(start); iter.getIndex() < end; c = iter.next() ) {
  *          processChar(c);
@@ -371,7 +373,7 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * Returns a pointer to a new CharacterIterator of the same
      * concrete class as this one, and referring to the same
      * character in the same text-storage object as this one.  The
-     * caller is responsible for deleting the new clone.
+     * caller is responsible for deleting the new clone.  
      * @return a pointer to a new CharacterIterator
      * @stable ICU 2.0
      */
@@ -434,7 +436,7 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * @stable ICU 2.0
      */
     virtual UChar         last(void) = 0;
-
+        
     /**
      * Sets the iterator to refer to the last code point in its
      * iteration range, and returns that code unit.
@@ -456,7 +458,7 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
     /**
      * Sets the iterator to refer to the "position"-th code unit
      * in the text-storage object the iterator refers to, and
-     * returns that code unit.
+     * returns that code unit.  
      * @param position the "position"-th code unit in the text-storage object
      * @return the "position"-th code unit.
      * @stable ICU 2.0
@@ -477,19 +479,19 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
     virtual UChar32       setIndex32(int32_t position) = 0;
 
     /**
-     * Returns the code unit the iterator currently refers to.
-     * @return the current code unit.
+     * Returns the code unit the iterator currently refers to. 
+     * @return the current code unit. 
      * @stable ICU 2.0
      */
     virtual UChar         current(void) const = 0;
-
+        
     /**
-     * Returns the code point the iterator currently refers to.
+     * Returns the code point the iterator currently refers to.  
      * @return the current code point.
      * @stable ICU 2.0
      */
     virtual UChar32       current32(void) const = 0;
-
+        
     /**
      * Advances to the next code unit in the iteration range
      * (toward endIndex()), and returns that code unit.  If there are
@@ -498,7 +500,7 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * @stable ICU 2.0
      */
     virtual UChar         next(void) = 0;
-
+        
     /**
      * Advances to the next code point in the iteration range
      * (toward endIndex()), and returns that code point.  If there are
@@ -510,11 +512,11 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * @stable ICU 2.0
      */
     virtual UChar32       next32(void) = 0;
-
+        
     /**
      * Advances to the previous code unit in the iteration range
      * (toward startIndex()), and returns that code unit.  If there are
-     * no more code units to return, returns DONE.
+     * no more code units to return, returns DONE.  
      * @return the previous code unit.
      * @stable ICU 2.0
      */
@@ -523,8 +525,8 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
     /**
      * Advances to the previous code point in the iteration range
      * (toward startIndex()), and returns that code point.  If there are
-     * no more code points to return, returns DONE.
-     * @return the previous code point.
+     * no more code points to return, returns DONE. 
+     * @return the previous code point. 
      * @stable ICU 2.0
      */
     virtual UChar32       previous32(void) = 0;
@@ -545,29 +547,29 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * object of the character returned by first().  Since it's
      * possible to create an iterator that iterates across only
      * part of a text-storage object, this number isn't
-     * necessarily 0.
+     * necessarily 0.  
      * @returns the numeric index in the underlying text-storage
      * object of the character returned by first().
      * @stable ICU 2.0
      */
     inline int32_t       startIndex(void) const;
-
+        
     /**
      * Returns the numeric index in the underlying text-storage
      * object of the position immediately BEYOND the character
-     * returned by last().
+     * returned by last().  
      * @return the numeric index in the underlying text-storage
      * object of the position immediately BEYOND the character
      * returned by last().
      * @stable ICU 2.0
      */
     inline int32_t       endIndex(void) const;
-
+        
     /**
      * Returns the numeric index in the underlying text-storage
      * object of the character the iterator currently refers to
-     * (i.e., the character returned by current()).
-     * @return the numberic index in the text-storage object of
+     * (i.e., the character returned by current()).  
+     * @return the numberic index in the text-storage object of 
      * the character the iterator currently refers to
      * @stable ICU 2.0
      */
@@ -609,8 +611,8 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
 
     /**
      * Copies the text under iteration into the UnicodeString
-     * referred to by "result".
-     * @param result Receives a copy of the text under iteration.
+     * referred to by "result".  
+     * @param result Receives a copy of the text under iteration.  
      * @stable ICU 2.0
      */
     virtual void            getText(UnicodeString&  result) = 0;
@@ -639,7 +641,7 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
      * @stable ICU 2.0
      */
     CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
-
+  
     /**
      * Copy constructor.
      *
diff --git a/deps/icu-small/source/common/unicode/dbbi.h b/deps/icu-small/source/common/unicode/dbbi.h
index ebc80fa9ac2ad9..590b6f377a981d 100644
--- a/deps/icu-small/source/common/unicode/dbbi.h
+++ b/deps/icu-small/source/common/unicode/dbbi.h
@@ -1,3 +1,5 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************
 *   Copyright (C) 1999-2006,2013 IBM Corp. All rights reserved.
@@ -19,7 +21,7 @@
  * \file
  * \brief C++ API: Dictionary Based Break Iterator
  */
-
+ 
 U_NAMESPACE_BEGIN
 
 #ifndef U_HIDE_DEPRECATED_API
diff --git a/deps/icu-small/source/common/unicode/docmain.h b/deps/icu-small/source/common/unicode/docmain.h
index 5e804bc1707827..7fc1084891646d 100644
--- a/deps/icu-small/source/common/unicode/docmain.h
+++ b/deps/icu-small/source/common/unicode/docmain.h
@@ -1,5 +1,7 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /********************************************************************
- * COPYRIGHT:
+ * COPYRIGHT: 
  * Copyright (c) 1997-2012, International Business Machines Corporation and
  * others. All Rights Reserved.
  *
@@ -20,7 +22,7 @@
 /*! \mainpage
  *
  * \section API API Reference Usage
- *
+ * 
  * 

C++ Programmers:

*

Use Class Hierarchy or Alphabetical List * or Compound List @@ -29,7 +31,7 @@ * "BreakIterator". Once you are at the class, you will find an inheritance * chart, a list of the public members, a detailed description of the class, * then detailed member descriptions.

- * + * *

C Programmers:

*

Use Module List or File Members * to find a list of all the functions and constants. @@ -44,7 +46,7 @@ * *

API References for Previous Releases

*

The API References for each release of ICU are also available as - * a zip file from the ICU + * a zip file from the ICU * download page.

* *
@@ -147,7 +149,7 @@ * * * Bidirectional Algorithm - * ubidi.h + * ubidi.h, ubiditransform.h * C API * * diff --git a/deps/icu-small/source/common/unicode/dtintrv.h b/deps/icu-small/source/common/unicode/dtintrv.h index 0212fa236ac55d..d45614a46765bb 100644 --- a/deps/icu-small/source/common/unicode/dtintrv.h +++ b/deps/icu-small/source/common/unicode/dtintrv.h @@ -1,10 +1,12 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2009, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * -* File DTINTRV.H +* File DTINTRV.H * ******************************************************************************* */ @@ -32,7 +34,7 @@ U_NAMESPACE_BEGIN class U_COMMON_API DateInterval : public UObject { public: - /** + /** * Construct a DateInterval given a from date and a to date. * @param fromDate The from date in date interval. * @param toDate The to date in date interval. @@ -45,15 +47,15 @@ class U_COMMON_API DateInterval : public UObject { * @stable ICU 4.0 */ virtual ~DateInterval(); - - /** + + /** * Get the from date. * @return the from date in dateInterval. * @stable ICU 4.0 */ UDate getFromDate() const; - /** + /** * Get the to date. * @return the to date in dateInterval. * @stable ICU 4.0 @@ -87,7 +89,7 @@ class U_COMMON_API DateInterval : public UObject { */ virtual UClassID getDynamicClassID(void) const; - + /** * Copy constructor. * @stable ICU 4.0 @@ -116,7 +118,7 @@ class U_COMMON_API DateInterval : public UObject { /** - * clone this object. + * clone this object. * The caller owns the result and should delete it when done. * @return a cloned DateInterval * @stable ICU 4.0 @@ -124,7 +126,7 @@ class U_COMMON_API DateInterval : public UObject { virtual DateInterval* clone() const; private: - /** + /** * Default constructor, not implemented. */ DateInterval(); @@ -135,20 +137,20 @@ class U_COMMON_API DateInterval : public UObject { } ;// end class DateInterval -inline UDate -DateInterval::getFromDate() const { - return fromDate; +inline UDate +DateInterval::getFromDate() const { + return fromDate; } -inline UDate -DateInterval::getToDate() const { - return toDate; +inline UDate +DateInterval::getToDate() const { + return toDate; } -inline UBool -DateInterval::operator!=(const DateInterval& other) const { +inline UBool +DateInterval::operator!=(const DateInterval& other) const { return ( !operator==(other) ); } diff --git a/deps/icu-small/source/common/unicode/enumset.h b/deps/icu-small/source/common/unicode/enumset.h index 715ca57c1f2b53..9c15b9a967529c 100644 --- a/deps/icu-small/source/common/unicode/enumset.h +++ b/deps/icu-small/source/common/unicode/enumset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -23,7 +25,7 @@ U_NAMESPACE_BEGIN /* Can't use #ifndef U_HIDE_INTERNAL_API for the entire EnumSet class, needed in .h file declarations */ /** - * enum bitset for boolean fields. Similar to Java EnumSet<>. + * enum bitset for boolean fields. Similar to Java EnumSet<>. * Needs to range check. Used for private instance variables. * @internal */ @@ -46,9 +48,9 @@ class EnumSet { fBools = other.fBools; return *this; } - + inline uint32_t getAll() const { - return fBools; + return fBools; } #endif /* U_HIDE_INTERNAL_API */ diff --git a/deps/icu-small/source/common/unicode/errorcode.h b/deps/icu-small/source/common/unicode/errorcode.h index 3fcbb7e0436f3c..13f43e19919338 100644 --- a/deps/icu-small/source/common/unicode/errorcode.h +++ b/deps/icu-small/source/common/unicode/errorcode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -18,7 +20,7 @@ #define __ERRORCODE_H__ /** - * \file + * \file * \brief C++ API: ErrorCode class intended to make it easier to use * ICU C and C++ APIs from C++ user code. */ diff --git a/deps/icu-small/source/common/unicode/filteredbrk.h b/deps/icu-small/source/common/unicode/filteredbrk.h index fff9bb5771f3f8..261151138cdc8f 100644 --- a/deps/icu-small/source/common/unicode/filteredbrk.h +++ b/deps/icu-small/source/common/unicode/filteredbrk.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -13,8 +15,6 @@ #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION -#ifndef U_HIDE_DRAFT_API - U_NAMESPACE_BEGIN /** @@ -31,13 +31,13 @@ U_NAMESPACE_BEGIN * but with "Mr." as an exception, a filtered break iterator * would consider the string "Mr. Smith" to be a single segment. * - * @draft ICU 56 + * @stable ICU 56 */ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { public: /** * destructor. - * @draft ICU 56 + * @stable ICU 56 */ virtual ~FilteredBreakIteratorBuilder(); @@ -51,7 +51,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param where the locale. * @param status The error code. * @return the new builder - * @draft ICU 56 + * @stable ICU 56 */ static FilteredBreakIteratorBuilder *createInstance(const Locale& where, UErrorCode& status); @@ -60,7 +60,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * In this state, it will not suppress any segment boundaries. * @param status The error code. * @return the new builder - * @draft ICU 56 + * @stable ICU 56 */ static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status); @@ -72,7 +72,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param status error code * @return returns TRUE if the string was not present and now added, * FALSE if the call was a no-op because the string was already being suppressed. - * @draft ICU 56 + * @stable ICU 56 */ virtual UBool suppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; @@ -85,7 +85,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param status error code * @return returns TRUE if the string was present and now removed, * FALSE if the call was a no-op because the string was not being suppressed. - * @draft ICU 56 + * @stable ICU 56 */ virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; @@ -99,14 +99,14 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param adoptBreakIterator the break iterator to adopt * @param status error code * @return the new BreakIterator, owned by the caller. - * @draft ICU 56 + * @stable ICU 56 */ virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0; protected: /** * For subclass use - * @draft ICU 56 + * @stable ICU 56 */ FilteredBreakIteratorBuilder(); }; @@ -114,8 +114,6 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { U_NAMESPACE_END -#endif /* U_HIDE_DRAFT_API */ - #endif // #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION #endif // #ifndef FILTEREDBRK_H diff --git a/deps/icu-small/source/common/unicode/icudataver.h b/deps/icu-small/source/common/unicode/icudataver.h index 485c07081dd390..99e7c284543b30 100644 --- a/deps/icu-small/source/common/unicode/icudataver.h +++ b/deps/icu-small/source/common/unicode/icudataver.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -30,10 +32,10 @@ /** * Retrieves the data version from icuver and stores it in dataVersionFillin. - * + * * @param dataVersionFillin icuver data version information to be filled in if not-null * @param status stores the error code from the calls to resource bundle - * + * * @stable ICU 49 */ U_STABLE void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/icuplug.h b/deps/icu-small/source/common/unicode/icuplug.h index 3b33a3608b9ad5..cffa6f359f940b 100644 --- a/deps/icu-small/source/common/unicode/icuplug.h +++ b/deps/icu-small/source/common/unicode/icuplug.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -15,7 +17,7 @@ /** * \file - * \brief C API: ICU Plugin API + * \brief C API: ICU Plugin API * *

C API: ICU Plugin API

* @@ -23,31 +25,31 @@ * *

Loading and Configuration

* - *

At ICU startup time, the environment variable "ICU_PLUGINS" will be - * queried for a directory name. If it is not set, the preprocessor symbol + *

At ICU startup time, the environment variable "ICU_PLUGINS" will be + * queried for a directory name. If it is not set, the preprocessor symbol * "DEFAULT_ICU_PLUGINS" will be checked for a default value.

* - *

Within the above-named directory, the file "icuplugins##.txt" will be - * opened, if present, where ## is the major+minor number of the currently + *

Within the above-named directory, the file "icuplugins##.txt" will be + * opened, if present, where ## is the major+minor number of the currently * running ICU (such as, 44 for ICU 4.4, thus icuplugins44.txt)

* *

The configuration file has this format:

* *
    *
  • Hash (#) begins a comment line
  • - * + * *
  • Non-comment lines have two or three components: * LIBRARYNAME ENTRYPOINT [ CONFIGURATION .. ]
  • * *
  • Tabs or spaces separate the three items.
  • * - *
  • LIBRARYNAME is the name of a shared library, either a short name if + *
  • LIBRARYNAME is the name of a shared library, either a short name if * it is on the loader path, or a full pathname.
  • * - *
  • ENTRYPOINT is the short (undecorated) symbol name of the plugin's + *
  • ENTRYPOINT is the short (undecorated) symbol name of the plugin's * entrypoint, as above.
  • * - *
  • CONFIGURATION is the entire rest of the line . It's passed as-is to + *
  • CONFIGURATION is the entire rest of the line . It's passed as-is to * the plugin.
  • *
* @@ -57,25 +59,25 @@ * # this is icuplugins44.txt * testplug.dll myPlugin hello=world * \endcode - *

Plugins are categorized as "high" or "low" level. Low level are those - * which must be run BEFORE high level plugins, and before any operations - * which cause ICU to be 'initialized'. If a plugin is low level but - * causes ICU to allocate memory or become initialized, that plugin is said + *

Plugins are categorized as "high" or "low" level. Low level are those + * which must be run BEFORE high level plugins, and before any operations + * which cause ICU to be 'initialized'. If a plugin is low level but + * causes ICU to allocate memory or become initialized, that plugin is said * to cause a 'level change'.

* - *

At load time, ICU first queries all plugins to determine their level, - * then loads all 'low' plugins first, and then loads all 'high' plugins. + *

At load time, ICU first queries all plugins to determine their level, + * then loads all 'low' plugins first, and then loads all 'high' plugins. * Plugins are otherwise loaded in the order listed in the configuration file.

- * + * *

Implementing a Plugin

* \code - * U_CAPI UPlugTokenReturn U_EXPORT2 + * U_CAPI UPlugTokenReturn U_EXPORT2 * myPlugin (UPlugData *plug, UPlugReason reason, UErrorCode *status) { * if(reason==UPLUG_REASON_QUERY) { * uplug_setPlugName(plug, "Simple Plugin"); * uplug_setPlugLevel(plug, UPLUG_LEVEL_HIGH); * } else if(reason==UPLUG_REASON_LOAD) { - * ... Set up some ICU things here.... + * ... Set up some ICU things here.... * } else if(reason==UPLUG_REASON_UNLOAD) { * ... unload, clean up ... * } @@ -83,20 +85,20 @@ * } * \endcode * - *

The UPlugData* is an opaque pointer to the plugin-specific data, and is + *

The UPlugData* is an opaque pointer to the plugin-specific data, and is * used in all other API calls.

* *

The API contract is:

- *
  1. The plugin MUST always return UPLUG_TOKEN as a return value- to + *
    1. The plugin MUST always return UPLUG_TOKEN as a return value- to * indicate that it is a valid plugin.
    2. * - *
    3. When the 'reason' parameter is set to UPLUG_REASON_QUERY, the - * plugin MUST call uplug_setPlugLevel() to indicate whether it is a high + *
    4. When the 'reason' parameter is set to UPLUG_REASON_QUERY, the + * plugin MUST call uplug_setPlugLevel() to indicate whether it is a high * level or low level plugin.
    5. * - *
    6. When the 'reason' parameter is UPLUG_REASON_QUERY, the plugin + *
    7. When the 'reason' parameter is UPLUG_REASON_QUERY, the plugin * SHOULD call uplug_setPlugName to indicate a human readable plugin name.
    - * + * * * \internal ICU 4.4 Technology Preview */ @@ -117,7 +119,7 @@ #ifndef U_HIDE_INTERNAL_API /** * @{ - * Opaque structure passed to/from a plugin. + * Opaque structure passed to/from a plugin. * use the APIs to access it. * @internal ICU 4.4 Technology Preview */ @@ -128,7 +130,7 @@ typedef struct UPlugData UPlugData; /** @} */ /** - * Random Token to identify a valid ICU plugin. Plugins must return this + * Random Token to identify a valid ICU plugin. Plugins must return this * from the entrypoint. * @internal ICU 4.4 Technology Preview */ @@ -142,7 +144,7 @@ typedef struct UPlugData UPlugData; /** - * Return value from a plugin entrypoint. + * Return value from a plugin entrypoint. * Must always be set to UPLUG_TOKEN * @see UPLUG_TOKEN * @internal ICU 4.4 Technology Preview @@ -157,7 +159,11 @@ typedef enum { UPLUG_REASON_QUERY = 0, /**< The plugin is being queried for info. **/ UPLUG_REASON_LOAD = 1, /**< The plugin is being loaded. **/ UPLUG_REASON_UNLOAD = 2, /**< The plugin is being unloaded. **/ - UPLUG_REASON_COUNT /**< count of known reasons **/ + /** + * Number of known reasons. + * @internal The numeric value may change over time, see ICU ticket #12420. + */ + UPLUG_REASON_COUNT } UPlugReason; @@ -173,12 +179,16 @@ typedef enum { UPLUG_LEVEL_UNKNOWN = 1, /**< The plugin is waiting to be installed. **/ UPLUG_LEVEL_LOW = 2, /**< The plugin must be called before u_init completes **/ UPLUG_LEVEL_HIGH = 3, /**< The plugin can run at any time. **/ - UPLUG_LEVEL_COUNT /**< count of known reasons **/ + /** + * Number of known levels. + * @internal The numeric value may change over time, see ICU ticket #12420. + */ + UPLUG_LEVEL_COUNT } UPlugLevel; /** * Entrypoint for an ICU plugin. - * @param plug the UPlugData handle. + * @param plug the UPlugData handle. * @param status the plugin's extended status code. * @return A valid plugin must return UPLUG_TOKEN * @internal ICU 4.4 Technology Preview @@ -198,7 +208,7 @@ typedef UPlugTokenReturn (U_EXPORT2 UPlugEntrypoint) ( * @param dontUnload set true if this plugin can't be unloaded * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_INTERNAL void U_EXPORT2 uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload); /** @@ -236,7 +246,7 @@ uplug_getCurrentLevel(void); * @internal ICU 4.4 Technology Preview */ U_INTERNAL UErrorCode U_EXPORT2 -uplug_getPlugLoadStatus(UPlugData *plug); +uplug_getPlugLoadStatus(UPlugData *plug); /** * Set the human-readable name of this plugin. @@ -277,7 +287,7 @@ uplug_getLibraryName(UPlugData *plug, UErrorCode *status); /** * Return the library used for this plugin, if known. - * Plugins could use this to load data out of their + * Plugins could use this to load data out of their * @param plug plugin data handle * @return the library, or NULL * @internal ICU 4.4 Technology Preview @@ -324,7 +334,7 @@ uplug_getConfiguration(UPlugData *plug); * } * \endcode * Not thread safe- do not call while plugs are added or removed. - * @param prior pass in 'NULL' to get the first (most recent) plug, + * @param prior pass in 'NULL' to get the first (most recent) plug, * otherwise pass the value returned on a prior call to uplug_nextPlug * @return the next oldest plugin, or NULL if no more. * @internal ICU 4.4 Technology Preview @@ -334,7 +344,7 @@ uplug_nextPlug(UPlugData *prior); /** * Inject a plugin as if it were loaded from a library. - * This is useful for testing plugins. + * This is useful for testing plugins. * Note that it will have a 'NULL' library pointer associated * with it, and therefore no llibrary will be closed at cleanup time. * Low level plugins may not be able to load, as ordering can't be enforced. @@ -362,7 +372,7 @@ U_INTERNAL UPlugData* U_EXPORT2 uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status); /** - * Remove a plugin. + * Remove a plugin. * Will request the plugin to be unloaded, and close the library if needed * @param plug plugin handle to close * @param status error result @@ -375,3 +385,4 @@ uplug_removePlug(UPlugData *plug, UErrorCode *status); #endif /* UCONFIG_ENABLE_PLUGINS */ #endif /* _ICUPLUG */ + diff --git a/deps/icu-small/source/common/unicode/idna.h b/deps/icu-small/source/common/unicode/idna.h index 90194a378f3825..23a1d7ca0e8441 100644 --- a/deps/icu-small/source/common/unicode/idna.h +++ b/deps/icu-small/source/common/unicode/idna.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -198,7 +200,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -216,7 +218,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -234,7 +236,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -252,7 +254,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; }; diff --git a/deps/icu-small/source/common/unicode/listformatter.h b/deps/icu-small/source/common/unicode/listformatter.h index cb5d50d7a2e975..f2c898881a7939 100644 --- a/deps/icu-small/source/common/unicode/listformatter.h +++ b/deps/icu-small/source/common/unicode/listformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/localpointer.h b/deps/icu-small/source/common/unicode/localpointer.h index 35e37765c2342d..9ac5de5f06d751 100644 --- a/deps/icu-small/source/common/unicode/localpointer.h +++ b/deps/icu-small/source/common/unicode/localpointer.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -211,18 +213,16 @@ class LocalPointer : public LocalPointerBase { errorCode=U_MEMORY_ALLOCATION_ERROR; } } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move constructor, leaves src with isNull(). * @param src source smart pointer - * @draft ICU 56 + * @stable ICU 56 */ LocalPointer(LocalPointer &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } #endif -#endif /* U_HIDE_DRAFT_API */ /** * Destructor deletes the object it owns. * @stable ICU 4.4 @@ -230,19 +230,19 @@ class LocalPointer : public LocalPointerBase { ~LocalPointer() { delete LocalPointerBase::ptr; } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. * @param src source smart pointer * @return *this - * @draft ICU 56 + * @stable ICU 56 */ LocalPointer &operator=(LocalPointer &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -261,19 +261,18 @@ class LocalPointer : public LocalPointerBase { /** * Swap pointers. * @param other other smart pointer - * @draft ICU 56 + * @stable ICU 56 */ void swap(LocalPointer &other) U_NOEXCEPT { T *temp=LocalPointerBase::ptr; LocalPointerBase::ptr=other.ptr; other.ptr=temp; } -#endif /* U_HIDE_DRAFT_API */ /** * Non-member LocalPointer swap function. * @param p1 will get p2's pointer * @param p2 will get p1's pointer - * @draft ICU 56 + * @stable ICU 56 */ friend inline void swap(LocalPointer &p1, LocalPointer &p2) U_NOEXCEPT { p1.swap(p2); @@ -345,7 +344,6 @@ class LocalArray : public LocalPointerBase { * @stable ICU 4.4 */ explicit LocalArray(T *p=NULL) : LocalPointerBase(p) {} -#ifndef U_HIDE_DRAFT_API /** * Constructor takes ownership and reports an error if NULL. * @@ -357,7 +355,7 @@ class LocalArray : public LocalPointerBase { * @param p simple pointer to an array of T objects that is adopted * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR * if p==NULL and no other failure code had been set - * @draft ICU 56 + * @stable ICU 56 */ LocalArray(T *p, UErrorCode &errorCode) : LocalPointerBase(p) { if(p==NULL && U_SUCCESS(errorCode)) { @@ -368,13 +366,12 @@ class LocalArray : public LocalPointerBase { /** * Move constructor, leaves src with isNull(). * @param src source smart pointer - * @draft ICU 56 + * @stable ICU 56 */ LocalArray(LocalArray &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } #endif -#endif /* U_HIDE_DRAFT_API */ /** * Destructor deletes the array it owns. * @stable ICU 4.4 @@ -382,19 +379,19 @@ class LocalArray : public LocalPointerBase { ~LocalArray() { delete[] LocalPointerBase::ptr; } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. * @param src source smart pointer * @return *this - * @draft ICU 56 + * @stable ICU 56 */ LocalArray &operator=(LocalArray &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -413,19 +410,18 @@ class LocalArray : public LocalPointerBase { /** * Swap pointers. * @param other other smart pointer - * @draft ICU 56 + * @stable ICU 56 */ void swap(LocalArray &other) U_NOEXCEPT { T *temp=LocalPointerBase::ptr; LocalPointerBase::ptr=other.ptr; other.ptr=temp; } -#endif /* U_HIDE_DRAFT_API */ /** * Non-member LocalArray swap function. * @param p1 will get p2's pointer * @param p2 will get p1's pointer - * @draft ICU 56 + * @stable ICU 56 */ friend inline void swap(LocalArray &p1, LocalArray &p2) U_NOEXCEPT { p1.swap(p2); @@ -440,7 +436,6 @@ class LocalArray : public LocalPointerBase { delete[] LocalPointerBase::ptr; LocalPointerBase::ptr=p; } -#ifndef U_HIDE_DRAFT_API /** * Deletes the array it owns, * and adopts (takes ownership of) the one passed in. @@ -454,7 +449,7 @@ class LocalArray : public LocalPointerBase { * @param p simple pointer to an array of T objects that is adopted * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR * if p==NULL and no other failure code had been set - * @draft ICU 56 + * @stable ICU 56 */ void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) { if(U_SUCCESS(errorCode)) { @@ -467,7 +462,6 @@ class LocalArray : public LocalPointerBase { delete[] p; } } -#endif /* U_HIDE_DRAFT_API */ /** * Array item access (writable). * No index bounds check. @@ -485,9 +479,6 @@ class LocalArray : public LocalPointerBase { * like LocalPointer except that this subclass will use the closeFunction * rather than the C++ delete operator. * - * Requirement: The closeFunction must tolerate a NULL pointer. - * (We could add a NULL check here but it is normally redundant.) - * * Usage example: * \code * LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode)); @@ -512,12 +503,12 @@ class LocalArray : public LocalPointerBase { : LocalPointerBase(src.ptr) { \ src.ptr=NULL; \ } \ - ~LocalPointerClassName() { closeFunction(ptr); } \ + ~LocalPointerClassName() { if (ptr != NULL) { closeFunction(ptr); } } \ LocalPointerClassName &operator=(LocalPointerClassName &&src) U_NOEXCEPT { \ return moveFrom(src); \ } \ LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ LocalPointerBase::ptr=src.ptr; \ src.ptr=NULL; \ return *this; \ @@ -531,7 +522,7 @@ class LocalArray : public LocalPointerBase { p1.swap(p2); \ } \ void adoptInstead(Type *p) { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ ptr=p; \ } \ } @@ -544,7 +535,7 @@ class LocalArray : public LocalPointerBase { explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase(p) {} \ ~LocalPointerClassName() { closeFunction(ptr); } \ LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ LocalPointerBase::ptr=src.ptr; \ src.ptr=NULL; \ return *this; \ @@ -558,7 +549,7 @@ class LocalArray : public LocalPointerBase { p1.swap(p2); \ } \ void adoptInstead(Type *p) { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ ptr=p; \ } \ } diff --git a/deps/icu-small/source/common/unicode/locdspnm.h b/deps/icu-small/source/common/unicode/locdspnm.h index ba168d8c95a6de..b8c7a0ccae9281 100644 --- a/deps/icu-small/source/common/unicode/locdspnm.h +++ b/deps/icu-small/source/common/unicode/locdspnm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2010-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/locid.h b/deps/icu-small/source/common/unicode/locid.h index e8edd919b6c8b1..a8ddb7f32c941b 100644 --- a/deps/icu-small/source/common/unicode/locid.h +++ b/deps/icu-small/source/common/unicode/locid.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -434,7 +436,7 @@ class U_COMMON_API Locale : public UObject { * Gets the list of keywords for the specified locale. * * @param status the status code - * @return pointer to StringEnumeration class, or NULL if there are no keywords. + * @return pointer to StringEnumeration class, or NULL if there are no keywords. * Client must dispose of it by calling delete. * @stable ICU 2.8 */ diff --git a/deps/icu-small/source/common/unicode/messagepattern.h b/deps/icu-small/source/common/unicode/messagepattern.h index f8b8dfb43f3149..8c1115e04dc1db 100644 --- a/deps/icu-small/source/common/unicode/messagepattern.h +++ b/deps/icu-small/source/common/unicode/messagepattern.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2013, International Business Machines diff --git a/deps/icu-small/source/common/unicode/normalizer2.h b/deps/icu-small/source/common/unicode/normalizer2.h index c03cba39e987a6..6a7668bfd5ff3e 100644 --- a/deps/icu-small/source/common/unicode/normalizer2.h +++ b/deps/icu-small/source/common/unicode/normalizer2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/normlzr.h b/deps/icu-small/source/common/unicode/normlzr.h index cdd7f37d6706ad..d529aa23ab41ef 100644 --- a/deps/icu-small/source/common/unicode/normlzr.h +++ b/deps/icu-small/source/common/unicode/normlzr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * COPYRIGHT: @@ -12,10 +14,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: Unicode Normalization */ - + #if !UCONFIG_NO_NORMALIZATION #include "unicode/chariter.h" @@ -179,6 +181,7 @@ class U_COMMON_API Normalizer : public UObject { * @deprecated ICU 56 Use Normalizer2 instead. */ Normalizer(const CharacterIterator& iter, UNormalizationMode mode); +#endif /* U_HIDE_DEPRECATED_API */ /** * Copy constructor. @@ -186,7 +189,6 @@ class U_COMMON_API Normalizer : public UObject { * @deprecated ICU 56 Use Normalizer2 instead. */ Normalizer(const Normalizer& copy); -#endif /* U_HIDE_DEPRECATED_API */ /** * Destructor @@ -750,9 +752,7 @@ class U_COMMON_API Normalizer : public UObject { FilteredNormalizer2*fFilteredNorm2; // owned if not NULL const Normalizer2 *fNorm2; // not owned; may be equal to fFilteredNorm2 -#ifndef U_HIDE_DEPRECATED_API - UNormalizationMode fUMode; -#endif /* U_HIDE_DEPRECATED_API */ + UNormalizationMode fUMode; // deprecated int32_t fOptions; // The input text and our position in it diff --git a/deps/icu-small/source/common/unicode/parseerr.h b/deps/icu-small/source/common/unicode/parseerr.h index 0096a13b1cdd56..71aef40e23aced 100644 --- a/deps/icu-small/source/common/unicode/parseerr.h +++ b/deps/icu-small/source/common/unicode/parseerr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2005, International Business Machines @@ -21,7 +23,7 @@ /** * The capacity of the context strings in UParseError. * @stable ICU 2.0 - */ + */ enum { U_PARSE_CONTEXT_LEN = 16 }; /** @@ -50,7 +52,7 @@ enum { U_PARSE_CONTEXT_LEN = 16 }; *

    Examples of engines which use UParseError (or may use it in the * future) are Transliterator, RuleBasedBreakIterator, and * RegexPattern. - * + * * @stable ICU 2.0 */ typedef struct UParseError { @@ -76,14 +78,14 @@ typedef struct UParseError { /** * Textual context before the error. Null-terminated. The empty * string if not supported by parser. - * @stable ICU 2.0 + * @stable ICU 2.0 */ UChar preContext[U_PARSE_CONTEXT_LEN]; /** * The error itself and/or textual context after the error. * Null-terminated. The empty string if not supported by parser. - * @stable ICU 2.0 + * @stable ICU 2.0 */ UChar postContext[U_PARSE_CONTEXT_LEN]; diff --git a/deps/icu-small/source/common/unicode/parsepos.h b/deps/icu-small/source/common/unicode/parsepos.h index 1d56bd07a4bbb7..1f74ebda9bfab9 100644 --- a/deps/icu-small/source/common/unicode/parsepos.h +++ b/deps/icu-small/source/common/unicode/parsepos.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************* @@ -19,14 +21,14 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" - + U_NAMESPACE_BEGIN /** * \file * \brief C++ API: Canonical Iterator */ -/** +/** * ParsePosition is a simple class used by Format * and its subclasses to keep track of the current position during parsing. * The parseObject method in the various Format diff --git a/deps/icu-small/source/common/unicode/platform.h b/deps/icu-small/source/common/unicode/platform.h index 33ad07f0cc175b..b42bef83234156 100644 --- a/deps/icu-small/source/common/unicode/platform.h +++ b/deps/icu-small/source/common/unicode/platform.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -415,7 +417,7 @@ #endif /** - * \def U_HAVE_DEBUG_LOCATION_NEW + * \def U_HAVE_DEBUG_LOCATION_NEW * Define this to define the MFC debug version of the operator new. * * @stable ICU 3.4 @@ -804,7 +806,7 @@ #elif defined(__GNUC__) # define U_EXPORT __attribute__((visibility("default"))) #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ - || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) + || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) # define U_EXPORT __global /*#elif defined(__HP_aCC) || defined(__HP_cc) # define U_EXPORT __declspec(dllexport)*/ @@ -829,7 +831,7 @@ /* Windows needs to export/import data. */ # define U_IMPORT __declspec(dllimport) #else -# define U_IMPORT +# define U_IMPORT #endif /** @@ -841,6 +843,12 @@ * This is only used for non-ICU-API functions. * When a function is a public ICU API, * you must use the U_CAPI and U_EXPORT2 qualifiers. + * + * Please note, you need to use U_CALLCONV after the *. + * + * NO : "static const char U_CALLCONV *func( . . . )" + * YES: "static const char* U_CALLCONV func( . . . )" + * * @stable ICU 2.0 */ #if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) diff --git a/deps/icu-small/source/common/unicode/ptypes.h b/deps/icu-small/source/common/unicode/ptypes.h index b7f711603282c3..69d7286d323e3d 100644 --- a/deps/icu-small/source/common/unicode/ptypes.h +++ b/deps/icu-small/source/common/unicode/ptypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/putil.h b/deps/icu-small/source/common/unicode/putil.h index 81d24c90081786..63a7b9b3d4377c 100644 --- a/deps/icu-small/source/common/unicode/putil.h +++ b/deps/icu-small/source/common/unicode/putil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -41,7 +43,7 @@ */ /** - * Return the ICU data directory. + * Return the ICU data directory. * The data directory is where common format ICU data files (.dat files) * are loaded from. Note that normal use of the built-in ICU * facilities does not require loading of an external data file; @@ -54,21 +56,21 @@ * If a data directory was specifed at ICU build time * * \code - * #define ICU_DATA_DIR "path" + * #define ICU_DATA_DIR "path" * \endcode * use that, * otherwise no data directory is available. * * @return the data directory, or an empty string ("") if no data directory has * been specified. - * + * * @stable ICU 2.0 */ U_STABLE const char* U_EXPORT2 u_getDataDirectory(void); -/** - * Set the ICU data directory. +/** + * Set the ICU data directory. * The data directory is where common format ICU data files (.dat files) * are loaded from. Note that normal use of the built-in ICU * facilities does not require loading of an external data file; @@ -96,7 +98,7 @@ U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); * * @return the time zone data override directory. * @internal - */ + */ U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status); /** diff --git a/deps/icu-small/source/common/unicode/rbbi.h b/deps/icu-small/source/common/unicode/rbbi.h index 0af960a9c94597..9f2a1a62b369d1 100644 --- a/deps/icu-small/source/common/unicode/rbbi.h +++ b/deps/icu-small/source/common/unicode/rbbi.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** -* Copyright (C) 1999-2014 International Business Machines Corporation * +* Copyright (C) 1999-2016 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** @@ -56,15 +58,11 @@ struct RBBIStateTable; * *

    See the ICU User Guide for information on Break Iterator Rules.

    * - *

    This class is not intended to be subclassed. (Class DictionaryBasedBreakIterator - * is a subclass, but that relationship is effectively internal to the ICU - * implementation. The subclassing interface to RulesBasedBreakIterator is - * not part of the ICU API, and may not remain stable.

    - * + *

    This class is not intended to be subclassed.

    */ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { -protected: +private: /** * The UText through which this BreakIterator accesses the text * @internal @@ -165,24 +163,10 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t fBreakType; -protected: //======================================================================= // constructors //======================================================================= -#ifndef U_HIDE_INTERNAL_API - /** - * Constant to be used in the constructor - * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &); - * which does not adopt the memory indicated by the RBBIDataHeader* - * parameter. - * - * @internal - */ - enum EDontAdopt { - kDontAdopt - }; - /** * Constructor from a flattened set of RBBI data in malloced memory. * RulesBasedBreakIterators built from a custom set of rules @@ -195,17 +179,6 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); - /** - * Constructor from a flattened set of RBBI data in memory which need not - * be malloced (e.g. it may be a memory-mapped file, etc.). - * - * This version does not adopt the memory, and does not - * free it when done. - * @internal - */ - RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ - friend class RBBIRuleBuilder; /** @internal */ @@ -402,6 +375,11 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { /** * Set the iterator to analyze a new piece of text. This function resets * the current iteration position to the beginning of the text. + * + * The BreakIterator will retain a reference to the supplied string. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param newText The text to analyze. * @stable ICU 2.0 */ @@ -661,7 +639,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status); -protected: +private: //======================================================================= // implementation //======================================================================= @@ -670,41 +648,19 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { * in text or iteration position. * @internal */ - virtual void reset(void); - -#if 0 - /** - * Return true if the category lookup for this char - * indicates that it is in the set of dictionary lookup chars. - * This function is intended for use by dictionary based break iterators. - * @return true if the category lookup for this char - * indicates that it is in the set of dictionary lookup chars. - * @internal - */ - virtual UBool isDictionaryChar(UChar32); - - /** - * Get the type of the break iterator. - * @internal - */ - virtual int32_t getBreakType() const; -#endif + void reset(void); /** * Set the type of the break iterator. * @internal */ - virtual void setBreakType(int32_t type); + void setBreakType(int32_t type); -#ifndef U_HIDE_INTERNAL_API /** * Common initialization function, used by constructors and bufferClone. * @internal */ void init(); -#endif /* U_HIDE_INTERNAL_API */ - -private: /** * This method backs the iterator back up to a "safe position" in the text. @@ -728,9 +684,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t handleNext(const RBBIStateTable *statetable); -protected: -#ifndef U_HIDE_INTERNAL_API /** * This is the function that actually implements dictionary-based * breaking. Covering at least the range from startPos to endPos, @@ -746,9 +700,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { * @internal */ int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse); -#endif /* U_HIDE_INTERNAL_API */ -private: /** * This function returns the appropriate LanguageBreakEngine for a diff --git a/deps/icu-small/source/common/unicode/rep.h b/deps/icu-small/source/common/unicode/rep.h index 21eb2918648749..6ffd1f4900395d 100644 --- a/deps/icu-small/source/common/unicode/rep.h +++ b/deps/icu-small/source/common/unicode/rep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (C) 1999-2012, International Business Machines Corporation and @@ -17,10 +19,10 @@ #include "unicode/uobject.h" /** - * \file + * \file * \brief C++ API: Replaceable String */ - + U_NAMESPACE_BEGIN class UnicodeString; @@ -81,7 +83,7 @@ class U_COMMON_API Replaceable : public UObject { * Returns the number of 16-bit code units in the text. * @return number of 16-bit code units in text * @stable ICU 1.8 - */ + */ inline int32_t length() const; /** @@ -108,7 +110,7 @@ class U_COMMON_API Replaceable : public UObject { inline UChar32 char32At(int32_t offset) const; /** - * Copies characters in the range [start, limit) + * Copies characters in the range [start, limit) * into the UnicodeString target. * @param start offset of first character which will be copied * @param limit offset immediately following the last character to @@ -138,7 +140,7 @@ class U_COMMON_API Replaceable : public UObject { * @param limit the ending index, exclusive; start <= limit * <= length(). * @param text the text to replace characters start - * to limit - 1 + * to limit - 1 * @stable ICU 2.0 */ virtual void handleReplaceBetween(int32_t start, @@ -158,7 +160,7 @@ class U_COMMON_API Replaceable : public UObject { * Copies a substring of this object, retaining metadata. * This method is used to duplicate or reorder substrings. * The destination index must not overlap the source range. - * + * * @param start the beginning index, inclusive; 0 <= start <= * limit. * @param limit the ending index, exclusive; start <= limit <= @@ -221,7 +223,7 @@ class U_COMMON_API Replaceable : public UObject { /** * Virtual version of length(). * @stable ICU 2.4 - */ + */ virtual int32_t getLength() const = 0; /** diff --git a/deps/icu-small/source/common/unicode/resbund.h b/deps/icu-small/source/common/unicode/resbund.h index 8c979663622cfb..927a65b79be3de 100644 --- a/deps/icu-small/source/common/unicode/resbund.h +++ b/deps/icu-small/source/common/unicode/resbund.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -53,10 +55,10 @@ #include "unicode/locid.h" /** - * \file + * \file * \brief C++ API: Resource Bundle */ - + U_NAMESPACE_BEGIN /** @@ -80,8 +82,8 @@ class U_COMMON_API ResourceBundle : public UObject { /** * Constructor * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. @@ -110,8 +112,8 @@ class U_COMMON_API ResourceBundle : public UObject { /** * Construct a resource bundle for the default bundle in the specified package. * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. @@ -133,8 +135,8 @@ class U_COMMON_API ResourceBundle : public UObject { * Standard constructor, onstructs a resource bundle for the locale-specific * bundle in the specified package. * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. diff --git a/deps/icu-small/source/common/unicode/schriter.h b/deps/icu-small/source/common/unicode/schriter.h index 65042494a0ad89..e52b97c263a16a 100644 --- a/deps/icu-small/source/common/unicode/schriter.h +++ b/deps/icu-small/source/common/unicode/schriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -23,10 +25,10 @@ #include "unicode/uchriter.h" /** - * \file + * \file * \brief C++ API: String Character Iterator */ - + U_NAMESPACE_BEGIN /** * A concrete subclass of CharacterIterator that iterates over the diff --git a/deps/icu-small/source/common/unicode/simpleformatter.h b/deps/icu-small/source/common/unicode/simpleformatter.h index 7530cf796fcabe..2b74f5ca527ca2 100644 --- a/deps/icu-small/source/common/unicode/simpleformatter.h +++ b/deps/icu-small/source/common/unicode/simpleformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/std_string.h b/deps/icu-small/source/common/unicode/std_string.h index 05955c5d1e727f..104ef0c83e8cfe 100644 --- a/deps/icu-small/source/common/unicode/std_string.h +++ b/deps/icu-small/source/common/unicode/std_string.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/strenum.h b/deps/icu-small/source/common/unicode/strenum.h index 8defe2039b8d41..5a33f7f1667e8b 100644 --- a/deps/icu-small/source/common/unicode/strenum.h +++ b/deps/icu-small/source/common/unicode/strenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -14,10 +16,10 @@ #include "unicode/unistr.h" /** - * \file + * \file * \brief C++ API: String Enumeration */ - + U_NAMESPACE_BEGIN /** @@ -50,9 +52,9 @@ U_NAMESPACE_BEGIN * ICU 2.8 adds some default implementations and helper functions * for subclasses. * - * @stable ICU 2.4 + * @stable ICU 2.4 */ -class U_COMMON_API StringEnumeration : public UObject { +class U_COMMON_API StringEnumeration : public UObject { public: /** * Destructor. @@ -124,7 +126,7 @@ class U_COMMON_API StringEnumeration : public UObject { * @param resultLength a pointer to receive the length, can be NULL. * @return a pointer to the string, or NULL. * - * @stable ICU 2.4 + * @stable ICU 2.4 */ virtual const char* next(int32_t *resultLength, UErrorCode& status); @@ -149,7 +151,7 @@ class U_COMMON_API StringEnumeration : public UObject { * @param resultLength a ponter to receive the length, can be NULL. * @return a pointer to the string, or NULL. * - * @stable ICU 2.4 + * @stable ICU 2.4 */ virtual const UChar* unext(int32_t *resultLength, UErrorCode& status); @@ -171,7 +173,7 @@ class U_COMMON_API StringEnumeration : public UObject { * @param status the error code. * @return a pointer to the string, or NULL. * - * @stable ICU 2.4 + * @stable ICU 2.4 */ virtual const UnicodeString* snext(UErrorCode& status); @@ -185,7 +187,7 @@ class U_COMMON_API StringEnumeration : public UObject { * * @param status the error code. * - * @stable ICU 2.4 + * @stable ICU 2.4 */ virtual void reset(UErrorCode& status) = 0; @@ -194,7 +196,7 @@ class U_COMMON_API StringEnumeration : public UObject { * * @param that The other string enumeration to compare this object to * @return TRUE if the enumerations are equal. FALSE if not. - * @stable ICU 3.6 + * @stable ICU 3.6 */ virtual UBool operator==(const StringEnumeration& that)const; /** @@ -202,7 +204,7 @@ class U_COMMON_API StringEnumeration : public UObject { * * @param that The other string enumeration to compare this object to * @return TRUE if the enumerations are equal. FALSE if not. - * @stable ICU 3.6 + * @stable ICU 3.6 */ virtual UBool operator!=(const StringEnumeration& that)const; diff --git a/deps/icu-small/source/common/unicode/stringpiece.h b/deps/icu-small/source/common/unicode/stringpiece.h index 1df790562e801c..5e40d4aca9b758 100644 --- a/deps/icu-small/source/common/unicode/stringpiece.h +++ b/deps/icu-small/source/common/unicode/stringpiece.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. // @@ -21,7 +23,7 @@ #define __STRINGPIECE_H__ /** - * \file + * \file * \brief C++ API: StringPiece: Read-only byte string wrapper class. */ @@ -40,9 +42,9 @@ U_NAMESPACE_BEGIN * in a "const char*" or a "string" wherever a "StringPiece" is * expected. * - * Functions or methods may use const StringPiece& parameters to accept either - * a "const char*" or a "string" value that will be implicitly converted to - * a StringPiece. + * Functions or methods may use StringPiece parameters to accept either a + * "const char*" or a "string" value that will be implicitly converted to a + * StringPiece. * * Systematic usage of StringPiece is encouraged as it will reduce unnecessary * conversions from "const char*" to "string" and back again. @@ -144,7 +146,7 @@ class U_COMMON_API StringPiece : public UMemory { /** * Reset the stringpiece to refer to new data. - * @param str a pointer to a NUL-terminated string. + * @param str a pointer to a NUL-terminated string. * @stable ICU 4.8 */ void set(const char* str); @@ -205,7 +207,7 @@ class U_COMMON_API StringPiece : public UMemory { * @return TRUE if the string data is equal * @stable ICU 4.8 */ -U_EXPORT UBool U_EXPORT2 +U_EXPORT UBool U_EXPORT2 operator==(const StringPiece& x, const StringPiece& y); /** diff --git a/deps/icu-small/source/common/unicode/stringtriebuilder.h b/deps/icu-small/source/common/unicode/stringtriebuilder.h index 1749ef4bf7c7c9..95cd841a374f83 100644 --- a/deps/icu-small/source/common/unicode/stringtriebuilder.h +++ b/deps/icu-small/source/common/unicode/stringtriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012,2014, International Business Machines @@ -184,7 +186,8 @@ class U_COMMON_API StringTrieBuilder : public UObject { /** @internal */ UHashtable *nodes; -#ifndef U_HIDE_INTERNAL_API + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** @internal */ class Node : public UObject { public: @@ -243,6 +246,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { int32_t offset; }; +#ifndef U_HIDE_INTERNAL_API // This class should not be overridden because // registerFinalValue() compares a stack-allocated FinalValueNode // (stack-allocated so that we don't unnecessarily create lots of duplicate nodes) @@ -258,9 +262,12 @@ class U_COMMON_API StringTrieBuilder : public UObject { protected: int32_t value; }; +#endif /* U_HIDE_INTERNAL_API */ + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** - * @internal + * @internal */ class ValueNode : public Node { public: @@ -276,8 +283,9 @@ class U_COMMON_API StringTrieBuilder : public UObject { int32_t value; }; - /** - * @internal +#ifndef U_HIDE_INTERNAL_API + /** + * @internal */ class IntermediateValueNode : public ValueNode { public: @@ -289,9 +297,12 @@ class U_COMMON_API StringTrieBuilder : public UObject { protected: Node *next; }; +#endif /* U_HIDE_INTERNAL_API */ + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** - * @internal + * @internal */ class LinearMatchNode : public ValueNode { public: @@ -305,8 +316,9 @@ class U_COMMON_API StringTrieBuilder : public UObject { Node *next; }; +#ifndef U_HIDE_INTERNAL_API /** - * @internal + * @internal */ class BranchNode : public Node { public: @@ -316,7 +328,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { }; /** - * @internal + * @internal */ class ListBranchNode : public BranchNode { public: @@ -348,7 +360,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { }; /** - * @internal + * @internal */ class SplitBranchNode : public BranchNode { public: diff --git a/deps/icu-small/source/common/unicode/symtable.h b/deps/icu-small/source/common/unicode/symtable.h index bc34dde51b4cf2..cf2c4f0f412c33 100644 --- a/deps/icu-small/source/common/unicode/symtable.h +++ b/deps/icu-small/source/common/unicode/symtable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2005, International Business Machines @@ -14,11 +16,11 @@ #include "unicode/uobject.h" /** - * \file + * \file * \brief C++ API: An interface that defines both lookup protocol and parsing of * symbolic names. */ - + U_NAMESPACE_BEGIN class ParsePosition; diff --git a/deps/icu-small/source/common/unicode/ubidi.h b/deps/icu-small/source/common/unicode/ubidi.h index 27042ed7f4b94e..e59969861f3402 100644 --- a/deps/icu-small/source/common/unicode/ubidi.h +++ b/deps/icu-small/source/common/unicode/ubidi.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -718,9 +720,13 @@ typedef enum UBiDiReorderingMode { * UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm. * @stable ICU 3.6 */ UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, - /** Number of values for reordering mode. - * @stable ICU 3.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of values for reordering mode. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UBIDI_REORDER_COUNT +#endif // U_HIDE_DEPRECATED_API } UBiDiReorderingMode; /** @@ -1959,13 +1965,19 @@ U_STABLE int32_t U_EXPORT2 ubidi_getResultLength(const UBiDi *pBiDi); U_CDECL_BEGIN + +#ifndef U_HIDE_DEPRECATED_API /** - * value returned by UBiDiClassCallback callbacks when + * Value returned by UBiDiClassCallback callbacks when * there is no need to override the standard Bidi class for a given code point. + * + * This constant is deprecated; use u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 instead. + * * @see UBiDiClassCallback - * @stable ICU 3.6 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ #define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API /** * Callback type declaration for overriding default Bidi class values with @@ -1981,8 +1993,8 @@ U_CDECL_BEGIN * * @return The directional property / Bidi class for the given code point * c if the default class has been overridden, or - * #U_BIDI_CLASS_DEFAULT if the standard Bidi class value - * for c is to be used. + * #U_BIDI_CLASS_DEFAULT=u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 + * if the standard Bidi class value for c is to be used. * @see ubidi_setClassCallback * @see ubidi_getClassCallback * @stable ICU 3.6 @@ -1995,8 +2007,8 @@ U_CDECL_END /** * Retrieve the Bidi class for a given code point. *

    If a #UBiDiClassCallback callback is defined and returns a - * value other than #U_BIDI_CLASS_DEFAULT, that value is used; - * otherwise the default class determination mechanism is invoked.

    + * value other than #U_BIDI_CLASS_DEFAULT=u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1, + * that value is used; otherwise the default class determination mechanism is invoked.

    * * @param pBiDi is the paragraph UBiDi object. * diff --git a/deps/icu-small/source/common/unicode/ubiditransform.h b/deps/icu-small/source/common/unicode/ubiditransform.h new file mode 100644 index 00000000000000..509f68bcc012e0 --- /dev/null +++ b/deps/icu-small/source/common/unicode/ubiditransform.h @@ -0,0 +1,321 @@ +/* +****************************************************************************** +* +* Copyright (C) 2016 and later: Unicode, Inc. and others. +* License & terms of use: http://www.unicode.org/copyright.html +* +****************************************************************************** +* file name: ubiditransform.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2016jul24 +* created by: Lina Kemmel +* +*/ + +#ifndef UBIDITRANSFORM_H +#define UBIDITRANSFORM_H + +#include "unicode/utypes.h" +#include "unicode/ubidi.h" +#include "unicode/uchar.h" +#include "unicode/localpointer.h" + +#ifndef U_HIDE_DRAFT_API + +/** + * \file + * \brief Bidi Transformations + * + * UBiDiOrder indicates the order of text.

    + * This bidi transformation engine supports all possible combinations (4 in + * total) of input and output text order: + *

      + *
    • : unless the output direction is RTL, this + * corresponds to a normal operation of the Bidi algorithm as described in the + * Unicode Technical Report and implemented by UBiDi when the + * reordering mode is set to UBIDI_REORDER_DEFAULT. Visual RTL + * mode is not supported by UBiDi and is accomplished through + * reversing a visual LTR string,
    • + *
    • : unless the input direction is RTL, this + * corresponds to an "inverse bidi algorithm" in UBiDi with the + * reordering mode set to UBIDI_REORDER_INVERSE_LIKE_DIRECT. + * Visual RTL mode is not not supported by UBiDi and is + * accomplished through reversing a visual LTR string,
    • + *
    • : if the input and output base directions + * mismatch, this corresponds to the UBiDi implementation with the + * reordering mode set to UBIDI_REORDER_RUNS_ONLY; and if the + * input and output base directions are identical, the transformation engine + * will only handle character mirroring and Arabic shaping operations without + * reordering,
    • + *
    • : this reordering mode is not supported by + * the UBiDi engine; it implies character mirroring, Arabic + * shaping, and - if the input/output base directions mismatch - string + * reverse operations.
    • + *
    + * @see ubidi_setInverse + * @see ubidi_setReorderingMode + * @see UBIDI_REORDER_DEFAULT + * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT + * @see UBIDI_REORDER_RUNS_ONLY + * @draft ICU 58 + */ +typedef enum { + /** 0: Constant indicating a logical order. + * This is the default for input text. + * @draft ICU 58 + */ + UBIDI_LOGICAL = 0, + /** 1: Constant indicating a visual order. + * This is a default for output text. + * @draft ICU 58 + */ + UBIDI_VISUAL +} UBiDiOrder; + +/** + * UBiDiMirroring indicates whether or not characters with the + * "mirrored" property in RTL runs should be replaced with their mirror-image + * counterparts. + * @see UBIDI_DO_MIRRORING + * @see ubidi_setReorderingOptions + * @see ubidi_writeReordered + * @see ubidi_writeReverse + * @draft ICU 58 + */ +typedef enum { + /** 0: Constant indicating that character mirroring should not be + * performed. + * This is the default. + * @draft ICU 58 + */ + UBIDI_MIRRORING_OFF = 0, + /** 1: Constant indicating that character mirroring should be performed. + * This corresponds to calling ubidi_writeReordered or + * ubidi_writeReverse with the + * UBIDI_DO_MIRRORING option bit set. + * @draft ICU 58 + */ + UBIDI_MIRRORING_ON +} UBiDiMirroring; + +/** + * Forward declaration of the UBiDiTransform structure that stores + * information used by the layout transformation engine. + * @draft ICU 58 + */ +typedef struct UBiDiTransform UBiDiTransform; + +/** + * Performs transformation of text from the bidi layout defined by the input + * ordering scheme to the bidi layout defined by the output ordering scheme, + * and applies character mirroring and Arabic shaping operations.

    + * In terms of UBiDi, such a transformation implies: + *

      + *
    • calling ubidi_setReorderingMode as needed (when the + * reordering mode is other than normal),
    • + *
    • calling ubidi_setInverse as needed (when text should be + * transformed from a visual to a logical form),
    • + *
    • resolving embedding levels of each character in the input text by + * calling ubidi_setPara,
    • + *
    • reordering the characters based on the computed embedding levels, also + * performing character mirroring as needed, and streaming the result to the + * output, by calling ubidi_writeReordered,
    • + *
    • performing Arabic digit and letter shaping on the output text by calling + * u_shapeArabic.
    • + *
    + * An "ordering scheme" encompasses the base direction and the order of text, + * and these characteristics must be defined by the caller for both input and + * output explicitly .

    + * There are 36 possible combinations of ordering schemes, + * which are partially supported by UBiDi already. Examples of the + * currently supported combinations: + *

      + *
    • : this is equivalent to calling + * ubidi_setPara with paraLevel == UBIDI_LTR,
    • + *
    • : this is equivalent to calling + * ubidi_setPara with paraLevel == UBIDI_RTL,
    • + *
    • : this is equivalent to + * calling ubidi_setPara with + * paraLevel == UBIDI_DEFAULT_LTR,
    • + *
    • : this is equivalent to + * calling ubidi_setPara with + * paraLevel == UBIDI_DEFAULT_RTL,
    • + *
    • : this is equivalent to + * calling ubidi_setInverse(UBiDi*, TRUE) and then + * ubidi_setPara with paraLevel == UBIDI_LTR,
    • + *
    • : this is equivalent to + * calling ubidi_setInverse(UBiDi*, TRUE) and then + * ubidi_setPara with paraLevel == UBIDI_RTL.
    • + *
    + * All combinations that involve the Visual RTL scheme are unsupported by + * UBiDi, for instance: + *
      + *
    • ,
    • + *
    • .
    • + *
    + *

    Example of usage of the transformation engine:
    + *

    + * \code
    + * UChar text1[] = {'a', 'b', 'c', 0x0625, '1', 0};
    + * UChar text2[] = {'a', 'b', 'c', 0x0625, '1', 0};
    + * UErrorCode errorCode = U_ZERO_ERROR;
    + * // Run a transformation.
    + * ubiditransform_transform(pBidiTransform,
    + *          text1, -1, text2, -1,
    + *          UBIDI_LTR, UBIDI_VISUAL,
    + *          UBIDI_RTL, UBIDI_LOGICAL,
    + *          UBIDI_MIRRORING_OFF,
    + *          U_SHAPE_DIGITS_AN2EN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
    + *          &errorCode);
    + * // Do something with text2.
    + *  text2[4] = '2';
    + * // Run a reverse transformation.
    + * ubiditransform_transform(pBidiTransform,
    + *          text2, -1, text1, -1,
    + *          UBIDI_RTL, UBIDI_LOGICAL,
    + *          UBIDI_LTR, UBIDI_VISUAL,
    + *          UBIDI_MIRRORING_OFF,
    + *          U_SHAPE_DIGITS_EN2AN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
    + *          &errorCode);
    + *\endcode
    + * 
    + *

    + * + * @param pBiDiTransform A pointer to a UBiDiTransform object + * allocated with ubiditransform_open() or + * NULL.

    + * This object serves for one-time setup to amortize initialization + * overheads. Use of this object is not thread-safe. All other threads + * should allocate a new UBiDiTransform object by calling + * ubiditransform_open() before using it. Alternatively, + * a caller can set this parameter to NULL, in which case + * the object will be allocated by the engine on the fly.

    + * @param src A pointer to the text that the Bidi layout transformations will + * be performed on. + *

    Note: the text must be (at least) + * srcLength long.

    + * @param srcLength The length of the text, in number of UChars. If + * length == -1 then the text must be zero-terminated. + * @param dest A pointer to where the processed text is to be copied. + * @param destSize The size of the dest buffer, in number of + * UChars. If the U_SHAPE_LETTERS_UNSHAPE option is set, + * then the destination length could be as large as + * srcLength * 2. Otherwise, the destination length will + * not exceed srcLength. If the caller reserves the last + * position for zero-termination, it should be excluded from + * destSize. + *

    destSize == -1 is allowed and makes sense when + * dest was holds some meaningful value, e.g. that of + * src. In this case dest must be + * zero-terminated.

    + * @param inParaLevel A base embedding level of the input as defined in + * ubidi_setPara documentation for the + * paraLevel parameter. + * @param inOrder An order of the input, which can be one of the + * UBiDiOrder values. + * @param outParaLevel A base embedding level of the output as defined in + * ubidi_setPara documentation for the + * paraLevel parameter. + * @param outOrder An order of the output, which can be one of the + * UBiDiOrder values. + * @param doMirroring Indicates whether or not to perform character mirroring, + * and can accept one of the UBiDiMirroring values. + * @param shapingOptions Arabic digit and letter shaping options defined in the + * ushape.h documentation. + *

    Note: Direction indicator options are computed by + * the transformation engine based on the effective ordering schemes, so + * user-defined direction indicators will be ignored.

    + * @param pErrorCode A pointer to an error code value. + * + * @return The destination length, i.e. the number of UChars written to + * dest. If the transformation fails, the return value + * will be 0 (and the error code will be written to + * pErrorCode). + * + * @see UBiDiLevel + * @see UBiDiOrder + * @see UBiDiMirroring + * @see ubidi_setPara + * @see u_shapeArabic + * @draft ICU 58 + */ +U_DRAFT uint32_t U_EXPORT2 +ubiditransform_transform(UBiDiTransform *pBiDiTransform, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destSize, + UBiDiLevel inParaLevel, UBiDiOrder inOrder, + UBiDiLevel outParaLevel, UBiDiOrder outOrder, + UBiDiMirroring doMirroring, uint32_t shapingOptions, + UErrorCode *pErrorCode); + +/** + * Allocates a UBiDiTransform object. This object can be reused, + * e.g. with different ordering schemes, mirroring or shaping options.

    + * Note:The object can only be reused in the same thread. + * All other threads should allocate a new UBiDiTransform object + * before using it.

    + * Example of usage:

    + *

    + * \code
    + * UErrorCode errorCode = U_ZERO_ERROR;
    + * // Open a new UBiDiTransform.
    + * UBiDiTransform* transform = ubiditransform_open(&errorCode);
    + * // Run a transformation.
    + * ubiditransform_transform(transform,
    + *          text1, -1, text2, -1,
    + *          UBIDI_RTL, UBIDI_LOGICAL,
    + *          UBIDI_LTR, UBIDI_VISUAL,
    + *          UBIDI_MIRRORING_ON,
    + *          U_SHAPE_DIGITS_EN2AN,
    + *          &errorCode);
    + * // Do something with the output text and invoke another transformation using
    + * //   that text as input.
    + * ubiditransform_transform(transform,
    + *          text2, -1, text3, -1,
    + *          UBIDI_LTR, UBIDI_VISUAL,
    + *          UBIDI_RTL, UBIDI_VISUAL,
    + *          UBIDI_MIRRORING_ON,
    + *          0, &errorCode);
    + *\endcode
    + * 
    + *

    + * The UBiDiTransform object must be deallocated by calling + * ubiditransform_close(). + * + * @return An empty UBiDiTransform object. + * @draft ICU 58 + */ +U_DRAFT UBiDiTransform* U_EXPORT2 +ubiditransform_open(UErrorCode *pErrorCode); + +/** + * Deallocates the given UBiDiTransform object. + * @draft ICU 58 + */ +U_DRAFT void U_EXPORT2 +ubiditransform_close(UBiDiTransform *pBidiTransform); + +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUBiDiTransformPointer + * "Smart pointer" class, closes a UBiDiTransform via ubiditransform_close(). + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 58 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiTransformPointer, UBiDiTransform, ubiditransform_close); + +U_NAMESPACE_END + +#endif + +#endif /* U_HIDE_DRAFT_API */ +#endif diff --git a/deps/icu-small/source/common/unicode/ubrk.h b/deps/icu-small/source/common/unicode/ubrk.h index 59f0ed181f8458..f43943ed1ab12c 100644 --- a/deps/icu-small/source/common/unicode/ubrk.h +++ b/deps/icu-small/source/common/unicode/ubrk.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2015, International Business Machines Corporation and others. @@ -114,8 +116,12 @@ typedef enum UBreakIteratorType { * @deprecated ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later. */ UBRK_TITLE = 4, -#endif /* U_HIDE_DEPRECATED_API */ - UBRK_COUNT = 5 + /** + * One more than the highest normal UBreakIteratorType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UBRK_COUNT = 5 +#endif // U_HIDE_DEPRECATED_API } UBreakIteratorType; /** Value indicating all text boundaries have been returned. @@ -130,7 +136,10 @@ typedef enum UBreakIteratorType { * word, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.2 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.2 */ typedef enum UWordBreak { /** Tag value for "words" that do not fit into any of other categories. @@ -163,7 +172,10 @@ typedef enum UWordBreak { * word, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.8 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.8 */ typedef enum ULineBreakTag { /** Tag value for soft line breaks, positions at which a line break @@ -185,7 +197,10 @@ typedef enum ULineBreakTag { * sentence, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.8 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.8 */ typedef enum USentenceBreakTag { /** Tag value for for sentences ending with a sentence terminator @@ -316,7 +331,11 @@ U_NAMESPACE_END #endif /** - * Sets an existing iterator to point to a new piece of text + * Sets an existing iterator to point to a new piece of text. + * The break iterator retains a pointer to the supplied text. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param bi The iterator to use * @param text The text to be set * @param textLength The length of the text diff --git a/deps/icu-small/source/common/unicode/ucasemap.h b/deps/icu-small/source/common/unicode/ucasemap.h index b37e16588697f1..d7345e8a402ab6 100644 --- a/deps/icu-small/source/common/unicode/ucasemap.h +++ b/deps/icu-small/source/common/unicode/ucasemap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/ucat.h b/deps/icu-small/source/common/unicode/ucat.h index 875477c2138b07..c52e4d914b864c 100644 --- a/deps/icu-small/source/common/unicode/ucat.h +++ b/deps/icu-small/source/common/unicode/ucat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2004, International Business Machines @@ -48,7 +50,7 @@ * 1%5 { "Good afternoon." } * 1%7 { "Good evening." } * 1%8 { "Good night." } - * + * * 4%14 { "Please " } * 4%19 { "Thank you." } * 4%20 { "Sincerely," } @@ -65,7 +67,7 @@ U_CDECL_BEGIN /** * An ICU message catalog descriptor, analogous to nl_catd. - * + * * @stable ICU 2.6 */ typedef UResourceBundle* u_nl_catd; @@ -98,7 +100,7 @@ typedef UResourceBundle* u_nl_catd; * is responsible for calling u_catclose() to close the message * catalog. If the ec parameter indicates failure, then NULL will be * returned. - * + * * @stable ICU 2.6 */ U_STABLE u_nl_catd U_EXPORT2 @@ -109,7 +111,7 @@ u_catopen(const char* name, const char* locale, UErrorCode* ec); * * @param catd a message catalog descriptor to be closed. May be NULL, * in which case no action is taken. - * + * * @stable ICU 2.6 */ U_STABLE void U_EXPORT2 @@ -144,7 +146,7 @@ u_catclose(u_nl_catd catd); * for any reason, then s is returned. This includes the situation in * which ec indicates a failing error code upon entry to this * function. - * + * * @stable ICU 2.6 */ U_STABLE const UChar* U_EXPORT2 diff --git a/deps/icu-small/source/common/unicode/uchar.h b/deps/icu-small/source/common/unicode/uchar.h index 61835840a33c0a..7f6ea6d9343ab7 100644 --- a/deps/icu-small/source/common/unicode/uchar.h +++ b/deps/icu-small/source/common/unicode/uchar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -39,7 +41,7 @@ U_CDECL_BEGIN * @see u_getUnicodeVersion * @stable ICU 2.0 */ -#define U_UNICODE_VERSION "8.0" +#define U_UNICODE_VERSION "9.0" /** * \file @@ -427,8 +429,13 @@ typedef enum UProperty { */ UCHAR_EMOJI_MODIFIER_BASE=60, #endif /* U_HIDE_DRAFT_API */ - /** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for binary Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_BINARY_LIMIT=61, +#endif // U_HIDE_DEPRECATED_API /** Enumerated property Bidi_Class. Same as u_charDirection, returns UCharDirection values. @stable ICU 2.2 */ @@ -515,8 +522,13 @@ typedef enum UProperty { (http://www.unicode.org/reports/tr9/) Returns UBidiPairedBracketType values. @stable ICU 52 */ UCHAR_BIDI_PAIRED_BRACKET_TYPE=0x1015, - /** One more than the last constant for enumerated/integer Unicode properties. @stable ICU 2.2 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for enumerated/integer Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_INT_LIMIT=0x1016, +#endif // U_HIDE_DEPRECATED_API /** Bitmask property General_Category_Mask. This is the General_Category property returned as a bit mask. @@ -529,16 +541,26 @@ typedef enum UProperty { UCHAR_GENERAL_CATEGORY_MASK=0x2000, /** First constant for bit-mask Unicode properties. @stable ICU 2.4 */ UCHAR_MASK_START=UCHAR_GENERAL_CATEGORY_MASK, - /** One more than the last constant for bit-mask Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for bit-mask Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_MASK_LIMIT=0x2001, +#endif // U_HIDE_DEPRECATED_API /** Double property Numeric_Value. Corresponds to u_getNumericValue. @stable ICU 2.4 */ UCHAR_NUMERIC_VALUE=0x3000, /** First constant for double Unicode properties. @stable ICU 2.4 */ UCHAR_DOUBLE_START=UCHAR_NUMERIC_VALUE, - /** One more than the last constant for double Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for double Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_DOUBLE_LIMIT=0x3001, +#endif // U_HIDE_DEPRECATED_API /** String property Age. Corresponds to u_charAge. @stable ICU 2.4 */ @@ -590,8 +612,13 @@ typedef enum UProperty { /** String property Bidi_Paired_Bracket (new in Unicode 6.3). Corresponds to u_getBidiPairedBracket. @stable ICU 52 */ UCHAR_BIDI_PAIRED_BRACKET=0x400D, - /** One more than the last constant for string Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for string Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_STRING_LIMIT=0x400E, +#endif // U_HIDE_DEPRECATED_API /** Miscellaneous property Script_Extensions (new in Unicode 6.0). Some characters are commonly used in multiple scripts. @@ -601,9 +628,14 @@ typedef enum UProperty { UCHAR_SCRIPT_EXTENSIONS=0x7000, /** First constant for Unicode properties with unusual value types. @stable ICU 4.6 */ UCHAR_OTHER_PROPERTY_START=UCHAR_SCRIPT_EXTENSIONS, - /** One more than the last constant for Unicode properties with unusual value types. - * @stable ICU 4.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for Unicode properties with unusual value types. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_OTHER_PROPERTY_LIMIT=0x7001, +#endif // U_HIDE_DEPRECATED_API + /** Represents a nonexistent or invalid property or property value. @stable ICU 2.4 */ UCHAR_INVALID_CODE = -1 } UProperty; @@ -684,7 +716,13 @@ typedef enum UCharCategory U_INITIAL_PUNCTUATION = 28, /** Pf @stable ICU 2.0 */ U_FINAL_PUNCTUATION = 29, - /** One higher than the last enum UCharCategory constant. @stable ICU 2.0 */ + /** + * One higher than the last enum UCharCategory constant. + * This numeric value is stable (will not change), see + * http://www.unicode.org/policies/stability_policy.html#Property_Value + * + * @stable ICU 2.0 + */ U_CHAR_CATEGORY_COUNT } UCharCategory; @@ -858,8 +896,15 @@ typedef enum UCharDirection { U_RIGHT_TO_LEFT_ISOLATE = 21, /** PDI @stable ICU 52 */ U_POP_DIRECTIONAL_ISOLATE = 22, - /** @stable ICU 2.0 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest UCharDirection value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_CHAR_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API } UCharDirection; /** @@ -881,8 +926,15 @@ typedef enum UBidiPairedBracketType { U_BPT_OPEN, /** Close paired bracket. @stable ICU 52 */ U_BPT_CLOSE, - /** @stable ICU 52 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UBidiPairedBracketType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_BPT_COUNT /* 3 */ +#endif // U_HIDE_DEPRECATED_API } UBidiPairedBracketType; /** @@ -1572,8 +1624,40 @@ enum UBlockCode { /** @stable ICU 56 */ UBLOCK_SUTTON_SIGNWRITING = 262, /*[1D800]*/ - /** @stable ICU 2.0 */ - UBLOCK_COUNT = 263, + /* New blocks in Unicode 9.0 */ + + /** @stable ICU 58 */ + UBLOCK_ADLAM = 263, /*[1E900]*/ + /** @stable ICU 58 */ + UBLOCK_BHAIKSUKI = 264, /*[11C00]*/ + /** @stable ICU 58 */ + UBLOCK_CYRILLIC_EXTENDED_C = 265, /*[1C80]*/ + /** @stable ICU 58 */ + UBLOCK_GLAGOLITIC_SUPPLEMENT = 266, /*[1E000]*/ + /** @stable ICU 58 */ + UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION = 267, /*[16FE0]*/ + /** @stable ICU 58 */ + UBLOCK_MARCHEN = 268, /*[11C70]*/ + /** @stable ICU 58 */ + UBLOCK_MONGOLIAN_SUPPLEMENT = 269, /*[11660]*/ + /** @stable ICU 58 */ + UBLOCK_NEWA = 270, /*[11400]*/ + /** @stable ICU 58 */ + UBLOCK_OSAGE = 271, /*[104B0]*/ + /** @stable ICU 58 */ + UBLOCK_TANGUT = 272, /*[17000]*/ + /** @stable ICU 58 */ + UBLOCK_TANGUT_COMPONENTS = 273, /*[18800]*/ + +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UBlockCode value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BLOCK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UBLOCK_COUNT = 274, +#endif // U_HIDE_DEPRECATED_API /** @stable ICU 2.0 */ UBLOCK_INVALID_CODE=-1 @@ -1602,7 +1686,15 @@ typedef enum UEastAsianWidth { U_EA_FULLWIDTH, /*[F]*/ U_EA_NARROW, /*[Na]*/ U_EA_WIDE, /*[W]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UEastAsianWidth value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_EA_COUNT +#endif // U_HIDE_DEPRECATED_API } UEastAsianWidth; /** @@ -1631,8 +1723,13 @@ typedef enum UCharNameChoice { U_EXTENDED_CHAR_NAME = U_UNICODE_CHAR_NAME+2, /** Corrected name from NameAliases.txt. @stable ICU 4.4 */ U_CHAR_NAME_ALIAS, - /** @stable ICU 2.0 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UCharNameChoice value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_CHAR_NAME_CHOICE_COUNT +#endif // U_HIDE_DEPRECATED_API } UCharNameChoice; /** @@ -1651,7 +1748,13 @@ typedef enum UCharNameChoice { typedef enum UPropertyNameChoice { U_SHORT_PROPERTY_NAME, U_LONG_PROPERTY_NAME, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UPropertyNameChoice value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_PROPERTY_NAME_CHOICE_COUNT +#endif // U_HIDE_DEPRECATED_API } UPropertyNameChoice; /** @@ -1685,7 +1788,15 @@ typedef enum UDecompositionType { U_DT_SUPER, /*[sup]*/ U_DT_VERTICAL, /*[vert]*/ U_DT_WIDE, /*[wide]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDecompositionType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_DT_COUNT /* 18 */ +#endif // U_HIDE_DEPRECATED_API } UDecompositionType; /** @@ -1707,7 +1818,15 @@ typedef enum UJoiningType { U_JT_LEFT_JOINING, /*[L]*/ U_JT_RIGHT_JOINING, /*[R]*/ U_JT_TRANSPARENT, /*[T]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UJoiningType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_JT_COUNT /* 6 */ +#endif // U_HIDE_DEPRECATED_API } UJoiningType; /** @@ -1810,7 +1929,18 @@ typedef enum UJoiningGroup { U_JG_MANICHAEAN_YODH, /**< @stable ICU 54 */ U_JG_MANICHAEAN_ZAYIN, /**< @stable ICU 54 */ U_JG_STRAIGHT_WAW, /**< @stable ICU 54 */ + U_JG_AFRICAN_FEH, /**< @stable ICU 58 */ + U_JG_AFRICAN_NOON, /**< @stable ICU 58 */ + U_JG_AFRICAN_QAF, /**< @stable ICU 58 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UJoiningGroup value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_JG_COUNT +#endif // U_HIDE_DEPRECATED_API } UJoiningGroup; /** @@ -1836,10 +1966,31 @@ typedef enum UGraphemeClusterBreak { U_GCB_LVT = 7, /*[LVT]*/ U_GCB_T = 8, /*[T]*/ U_GCB_V = 9, /*[V]*/ + /** @stable ICU 4.0 */ U_GCB_SPACING_MARK = 10, /*[SM]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ + /** @stable ICU 4.0 */ U_GCB_PREPEND = 11, /*[PP]*/ + /** @stable ICU 50 */ U_GCB_REGIONAL_INDICATOR = 12, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - U_GCB_COUNT = 13 + /** @stable ICU 58 */ + U_GCB_E_BASE = 13, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_GCB_E_BASE_GAZ = 14, /*[EBG]*/ + /** @stable ICU 58 */ + U_GCB_E_MODIFIER = 15, /*[EM]*/ + /** @stable ICU 58 */ + U_GCB_GLUE_AFTER_ZWJ = 16, /*[GAZ]*/ + /** @stable ICU 58 */ + U_GCB_ZWJ = 17, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UGraphemeClusterBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_GCB_COUNT = 18 +#endif // U_HIDE_DEPRECATED_API } UGraphemeClusterBreak; /** @@ -1864,16 +2015,43 @@ typedef enum UWordBreakValues { U_WB_MIDNUM = 5, /*[MN]*/ U_WB_NUMERIC = 6, /*[NU]*/ U_WB_EXTENDNUMLET = 7, /*[EX]*/ + /** @stable ICU 4.0 */ U_WB_CR = 8, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ + /** @stable ICU 4.0 */ U_WB_EXTEND = 9, /*[Extend]*/ + /** @stable ICU 4.0 */ U_WB_LF = 10, /*[LF]*/ + /** @stable ICU 4.0 */ U_WB_MIDNUMLET =11, /*[MB]*/ + /** @stable ICU 4.0 */ U_WB_NEWLINE =12, /*[NL]*/ + /** @stable ICU 50 */ U_WB_REGIONAL_INDICATOR = 13, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ + /** @stable ICU 52 */ U_WB_HEBREW_LETTER = 14, /*[HL]*/ /* from here on: new in Unicode 6.3/ICU 52 */ + /** @stable ICU 52 */ U_WB_SINGLE_QUOTE = 15, /*[SQ]*/ + /** @stable ICU 52 */ U_WB_DOUBLE_QUOTE = 16, /*[DQ]*/ - U_WB_COUNT = 17 + /** @stable ICU 58 */ + U_WB_E_BASE = 17, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_WB_E_BASE_GAZ = 18, /*[EBG]*/ + /** @stable ICU 58 */ + U_WB_E_MODIFIER = 19, /*[EM]*/ + /** @stable ICU 58 */ + U_WB_GLUE_AFTER_ZWJ = 20, /*[GAZ]*/ + /** @stable ICU 58 */ + U_WB_ZWJ = 21, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UWordBreakValues value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_WORD_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_WB_COUNT = 22 +#endif // U_HIDE_DEPRECATED_API } UWordBreakValues; /** @@ -1904,7 +2082,15 @@ typedef enum USentenceBreak { U_SB_EXTEND = 12, /*[EX]*/ U_SB_LF = 13, /*[LF]*/ U_SB_SCONTINUE = 14, /*[SC]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal USentenceBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_SB_COUNT = 15 +#endif // U_HIDE_DEPRECATED_API } USentenceBreak; /** @@ -1951,18 +2137,43 @@ typedef enum ULineBreak { U_LB_SPACE = 26, /*[SP]*/ U_LB_BREAK_SYMBOLS = 27, /*[SY]*/ U_LB_ZWSPACE = 28, /*[ZW]*/ + /** @stable ICU 2.6 */ U_LB_NEXT_LINE = 29, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */ + /** @stable ICU 2.6 */ U_LB_WORD_JOINER = 30, /*[WJ]*/ + /** @stable ICU 3.4 */ U_LB_H2 = 31, /*[H2]*/ /* from here on: new in Unicode 4.1/ICU 3.4 */ + /** @stable ICU 3.4 */ U_LB_H3 = 32, /*[H3]*/ + /** @stable ICU 3.4 */ U_LB_JL = 33, /*[JL]*/ + /** @stable ICU 3.4 */ U_LB_JT = 34, /*[JT]*/ + /** @stable ICU 3.4 */ U_LB_JV = 35, /*[JV]*/ + /** @stable ICU 4.4 */ U_LB_CLOSE_PARENTHESIS = 36, /*[CP]*/ /* new in Unicode 5.2/ICU 4.4 */ + /** @stable ICU 49 */ U_LB_CONDITIONAL_JAPANESE_STARTER = 37,/*[CJ]*/ /* new in Unicode 6.1/ICU 49 */ + /** @stable ICU 49 */ U_LB_HEBREW_LETTER = 38, /*[HL]*/ /* new in Unicode 6.1/ICU 49 */ + /** @stable ICU 50 */ U_LB_REGIONAL_INDICATOR = 39,/*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - U_LB_COUNT = 40 + /** @stable ICU 58 */ + U_LB_E_BASE = 40, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_LB_E_MODIFIER = 41, /*[EM]*/ + /** @stable ICU 58 */ + U_LB_ZWJ = 42, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULineBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_LINE_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_LB_COUNT = 43 +#endif // U_HIDE_DEPRECATED_API } ULineBreak; /** @@ -1982,7 +2193,15 @@ typedef enum UNumericType { U_NT_DECIMAL, /*[de]*/ U_NT_DIGIT, /*[di]*/ U_NT_NUMERIC, /*[nu]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumericType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_NT_COUNT +#endif // U_HIDE_DEPRECATED_API } UNumericType; /** @@ -2004,7 +2223,15 @@ typedef enum UHangulSyllableType { U_HST_TRAILING_JAMO, /*[T]*/ U_HST_LV_SYLLABLE, /*[LV]*/ U_HST_LVT_SYLLABLE, /*[LVT]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UHangulSyllableType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_HST_COUNT +#endif // U_HIDE_DEPRECATED_API } UHangulSyllableType; /** diff --git a/deps/icu-small/source/common/unicode/ucharstrie.h b/deps/icu-small/source/common/unicode/ucharstrie.h index 0575a974d0c957..8daed447cedab1 100644 --- a/deps/icu-small/source/common/unicode/ucharstrie.h +++ b/deps/icu-small/source/common/unicode/ucharstrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucharstriebuilder.h b/deps/icu-small/source/common/unicode/ucharstriebuilder.h index f7a8039b776729..cc9fb77a9176e0 100644 --- a/deps/icu-small/source/common/unicode/ucharstriebuilder.h +++ b/deps/icu-small/source/common/unicode/ucharstriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/uchriter.h b/deps/icu-small/source/common/unicode/uchriter.h index bf8f2a8cdd1b05..d87ffb13cf9e51 100644 --- a/deps/icu-small/source/common/unicode/uchriter.h +++ b/deps/icu-small/source/common/unicode/uchriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2005, International Business Machines @@ -12,10 +14,10 @@ #include "unicode/chariter.h" /** - * \file + * \file * \brief C++ API: UChar Character Iterator */ - + U_NAMESPACE_BEGIN /** diff --git a/deps/icu-small/source/common/unicode/uclean.h b/deps/icu-small/source/common/unicode/uclean.h index ad16158e6c5f38..d7801d69b4a085 100644 --- a/deps/icu-small/source/common/unicode/uclean.h +++ b/deps/icu-small/source/common/unicode/uclean.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2014, International Business Machines @@ -20,7 +22,7 @@ * \file * \brief C API: Initialize and clean up ICU */ - + /** * Initialize ICU. * @@ -46,8 +48,8 @@ * failure, as usual. * * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 + */ +U_STABLE void U_EXPORT2 u_init(UErrorCode *status); #ifndef U_HIDE_SYSTEM_API @@ -64,10 +66,10 @@ u_init(UErrorCode *status); * just before the library unload. *

    * u_cleanup() also clears any ICU heap functions, mutex functions or - * trace functions that may have been set for the process. + * trace functions that may have been set for the process. * This has the effect of restoring ICU to its initial condition, before * any of these override functions were installed. Refer to - * u_setMemoryFunctions(), u_setMutexFunctions and + * u_setMemoryFunctions(), u_setMutexFunctions and * utrace_setFunctions(). If ICU is to be reinitialized after after * calling u_cleanup(), these runtime override functions will need to * be set up again if they are still required. @@ -83,7 +85,7 @@ u_init(UErrorCode *status); * calling u_init(). An application must invoke u_init() first from one single * thread before allowing other threads call u_init(). All threads existing * at the time of the first thread's call to u_init() must also call - * u_init() themselves before continuing with other ICU operations. + * u_init() themselves before continuing with other ICU operations. *

    * The use of u_cleanup() just before an application terminates is optional, * but it should be called only once for performance reasons. The primary @@ -96,7 +98,7 @@ u_init(UErrorCode *status); * @stable ICU 2.0 * @system */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 u_cleanup(void); @@ -145,9 +147,9 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); * @param status Receives error values. * @stable ICU 2.8 * @system - */ -U_STABLE void U_EXPORT2 -u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, + */ +U_STABLE void U_EXPORT2 +u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status); @@ -178,8 +180,8 @@ typedef void *UMTX; * as a paramter. * @param context user supplied value, obtained from from u_setMutexFunctions(). * @param mutex Receives a pointer that identifies the new mutex. - * The mutex init function must set the UMTX to a non-null value. - * Subsequent calls by ICU to lock, unlock, or destroy a mutex will + * The mutex init function must set the UMTX to a non-null value. + * Subsequent calls by ICU to lock, unlock, or destroy a mutex will * identify the mutex by the UMTX value. * @param status Error status. Report errors back to ICU by setting this variable * with an error code. @@ -209,7 +211,7 @@ typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); * u_init() has been called. * @param context This pointer value will be saved, and then (later) passed as * a parameter to the user-supplied mutex functions each time they - * are called. + * are called. * @param init Pointer to a mutex initialization function. Must be non-null. * @param destroy Pointer to the mutex destroy function. Must be non-null. * @param lock pointer to the mutex lock function. Must be non-null. @@ -217,8 +219,8 @@ typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); * @param status Receives error values. * @deprecated ICU 52. This function is no longer supported. * @system - */ -U_DEPRECATED void U_EXPORT2 + */ +U_DEPRECATED void U_EXPORT2 u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtxFn *lock, UMtxFn *unlock, UErrorCode *status); @@ -241,14 +243,14 @@ typedef int32_t U_CALLCONV UMtxAtomicFn(const void *context, int32_t *p); * u_init() has been called. * @param context This pointer value will be saved, and then (later) passed as * a parameter to the increment and decrement functions each time they - * are called. This function can only be called + * are called. This function can only be called * @param inc Pointer to a function to do an atomic increment operation. Must be non-null. * @param dec Pointer to a function to do an atomic decrement operation. Must be non-null. * @param status Receives error values. * @deprecated ICU 52. This function is no longer supported. * @system - */ -U_DEPRECATED void U_EXPORT2 + */ +U_DEPRECATED void U_EXPORT2 u_setAtomicIncDecFunctions(const void *context, UMtxAtomicFn *inc, UMtxAtomicFn *dec, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/ucnv.h b/deps/icu-small/source/common/unicode/ucnv.h index 564656c284f8e0..767c1a2a7f44f1 100644 --- a/deps/icu-small/source/common/unicode/ucnv.h +++ b/deps/icu-small/source/common/unicode/ucnv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines @@ -941,8 +943,13 @@ typedef enum UConverterUnicodeSet { UCNV_ROUNDTRIP_SET, /** Select the set of Unicode code points with roundtrip or fallback mappings. @stable ICU 4.0 */ UCNV_ROUNDTRIP_AND_FALLBACK_SET, - /** Number of UConverterUnicodeSet selectors. @stable ICU 2.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of UConverterUnicodeSet selectors. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCNV_SET_COUNT +#endif // U_HIDE_DEPRECATED_API } UConverterUnicodeSet; diff --git a/deps/icu-small/source/common/unicode/ucnv_cb.h b/deps/icu-small/source/common/unicode/ucnv_cb.h index 1698de8e333093..7104c72452554e 100644 --- a/deps/icu-small/source/common/unicode/ucnv_cb.h +++ b/deps/icu-small/source/common/unicode/ucnv_cb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2004, International Business Machines @@ -6,52 +8,52 @@ * ucnv_cb.h: * External APIs for the ICU's codeset conversion library * Helena Shih - * + * * Modification History: * * Date Name Description */ /** - * \file + * \file * \brief C UConverter functions to aid the writers of callbacks * *

    Callback API for UConverter

    - * + * * These functions are provided here for the convenience of the callback * writer. If you are just looking for callback functions to use, please - * see ucnv_err.h. DO NOT call these functions directly when you are + * see ucnv_err.h. DO NOT call these functions directly when you are * working with converters, unless your code has been called as a callback * via ucnv_setFromUCallback or ucnv_setToUCallback !! - * + * * A note about error codes and overflow. Unlike other ICU functions, * these functions do not expect the error status to be U_ZERO_ERROR. * Callbacks must be much more careful about their error codes. * The error codes used here are in/out parameters, which should be passed * back in the callback's error parameter. - * - * For example, if you call ucnv_cbfromUWriteBytes to write data out - * to the output codepage, it may return U_BUFFER_OVERFLOW_ERROR if - * the data did not fit in the target. But this isn't a failing error, + * + * For example, if you call ucnv_cbfromUWriteBytes to write data out + * to the output codepage, it may return U_BUFFER_OVERFLOW_ERROR if + * the data did not fit in the target. But this isn't a failing error, * in fact, ucnv_cbfromUWriteBytes may be called AGAIN with the error * status still U_BUFFER_OVERFLOW_ERROR to attempt to write further bytes, * which will also go into the internal overflow buffers. - * + * * Concerning offsets, the 'offset' parameters here are relative to the start - * of SOURCE. For example, Suppose the string "ABCD" was being converted + * of SOURCE. For example, Suppose the string "ABCD" was being converted * from Unicode into a codepage which doesn't have a mapping for 'B'. * 'A' will be written out correctly, but * The FromU Callback will be called on an unassigned character for 'B'. * At this point, this is the state of the world: * Target: A [..] [points after A] * Source: A B [C] D [points to C - B has been consumed] - * 0 1 2 3 - * codePoint = "B" [the unassigned codepoint] - * + * 0 1 2 3 + * codePoint = "B" [the unassigned codepoint] + * * Now, suppose a callback wants to write the substitution character '?' to - * the target. It calls ucnv_cbFromUWriteBytes() to write the ?. - * It should pass ZERO as the offset, because the offset as far as the - * callback is concerned is relative to the SOURCE pointer [which points + * the target. It calls ucnv_cbFromUWriteBytes() to write the ?. + * It should pass ZERO as the offset, because the offset as far as the + * callback is concerned is relative to the SOURCE pointer [which points * before 'C'.] If the callback goes into the args and consumes 'C' also, * it would call FromUWriteBytes with an offset of 1 (and advance the source * pointer). @@ -76,8 +78,8 @@ * @param source source bytes to write * @param length length of bytes to write * @param offsetIndex the relative offset index from callback. - * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must - * be returned to the user, because it means that not all data could be written into the target buffer, and some is + * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must + * be returned to the user, because it means that not all data could be written into the target buffer, and some is * in the converter error buffer. * @see ucnv_cbFromUWriteSub * @stable ICU 2.0 @@ -90,25 +92,25 @@ ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, UErrorCode * err); /** - * ONLY used by FromU callback functions. - * This function will write out the correct substitution character sequence + * ONLY used by FromU callback functions. + * This function will write out the correct substitution character sequence * to the target. * * @param args callback fromUnicode arguments * @param offsetIndex the relative offset index from the current source pointer to be used - * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must - * be returned to the user, because it means that not all data could be written into the target buffer, and some is + * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must + * be returned to the user, because it means that not all data could be written into the target buffer, and some is * in the converter error buffer. * @see ucnv_cbFromUWriteBytes * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode * err); /** - * ONLY used by fromU callback functions. + * ONLY used by fromU callback functions. * This function will write out the error character(s) to the target UChar buffer. * * @param args callback fromUnicode arguments @@ -127,7 +129,7 @@ U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, /** * ONLY used by ToU callback functions. - * This function will write out the specified characters to the target + * This function will write out the specified characters to the target * UChar buffer. * * @param args callback toUnicode arguments @@ -145,7 +147,7 @@ U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, UErrorCode * err); /** - * ONLY used by ToU callback functions. + * ONLY used by ToU callback functions. * This function will write out the Unicode substitution character (U+FFFD). * * @param args callback fromUnicode arguments diff --git a/deps/icu-small/source/common/unicode/ucnv_err.h b/deps/icu-small/source/common/unicode/ucnv_err.h index 9d37e18c158bfa..b970b891fd0fb1 100644 --- a/deps/icu-small/source/common/unicode/ucnv_err.h +++ b/deps/icu-small/source/common/unicode/ucnv_err.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2009, International Business Machines @@ -106,7 +108,7 @@ typedef struct UConverter UConverter; #define UCNV_SKIP_STOP_ON_ILLEGAL "i" /** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to ICU (%UXXXX) + * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to ICU (%UXXXX) * @stable ICU 2.0 */ #define UCNV_ESCAPE_ICU NULL @@ -146,24 +148,24 @@ typedef struct UConverter UConverter; */ #define UCNV_ESCAPE_CSS2 "S" -/** - * The process condition code to be used with the callbacks. - * Codes which are greater than UCNV_IRREGULAR should be +/** + * The process condition code to be used with the callbacks. + * Codes which are greater than UCNV_IRREGULAR should be * passed on to any chained callbacks. * @stable ICU 2.0 */ typedef enum { UCNV_UNASSIGNED = 0, /**< The code point is unassigned. The error code U_INVALID_CHAR_FOUND will be set. */ - UCNV_ILLEGAL = 1, /**< The code point is illegal. For example, + UCNV_ILLEGAL = 1, /**< The code point is illegal. For example, \\x81\\x2E is illegal in SJIS because \\x2E - is not a valid trail byte for the \\x81 + is not a valid trail byte for the \\x81 lead byte. Also, starting with Unicode 3.0.1, non-shortest byte sequences in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061) are also illegal, not just irregular. The error code U_ILLEGAL_CHAR_FOUND will be set. */ - UCNV_IRREGULAR = 2, /**< The codepoint is not a regular sequence in + UCNV_IRREGULAR = 2, /**< The codepoint is not a regular sequence in the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF are irregular UTF-8 byte sequences for single surrogate code points. @@ -177,8 +179,8 @@ typedef enum { converter. the pointer available as the 'context' is an alias to the original converters' context pointer. If the context must be owned - by the new converter, the callback must clone - the data and call ucnv_setFromUCallback + by the new converter, the callback must clone + the data and call ucnv_setFromUCallback (or setToUCallback) with the correct pointer. @stable ICU 2.2 */ @@ -267,7 +269,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP ( * DO NOT CALL THIS FUNCTION DIRECTLY! * This From Unicode callback skips any ILLEGAL_SEQUENCE, or * skips only UNASSINGED_SEQUENCE depending on the context parameter - * simply ignoring those characters. + * simply ignoring those characters. * * @param context The function currently recognizes the callback options: * UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, @@ -293,7 +295,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP ( /** * DO NOT CALL THIS FUNCTION DIRECTLY! - * This From Unicode callback will Substitute the ILLEGAL SEQUENCE, or + * This From Unicode callback will Substitute the ILLEGAL SEQUENCE, or * UNASSIGNED_SEQUENCE depending on context parameter, with the * current substitution string for the converter. This is the default * callback. @@ -328,33 +330,33 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( * * @param context The function currently recognizes the callback options: *
      - *
    • UCNV_ESCAPE_ICU: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format %UXXXX, e.g. "%uFFFE%u00AC%uC8FE"). - * In the Event the converter doesn't support the characters {%,U}[A-F][0-9], + *
    • UCNV_ESCAPE_ICU: Substitues the ILLEGAL SEQUENCE with the hexadecimal + * representation in the format %UXXXX, e.g. "%uFFFE%u00AC%uC8FE"). + * In the Event the converter doesn't support the characters {%,U}[A-F][0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * %UD84D%UDC56
    • - *
    • UCNV_ESCAPE_JAVA: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). - * In the Event the converter doesn't support the characters {\,u}[A-F][0-9], + *
    • UCNV_ESCAPE_JAVA: Substitues the ILLEGAL SEQUENCE with the hexadecimal + * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). + * In the Event the converter doesn't support the characters {\,u}[A-F][0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * \\uD84D\\uDC56
    • - *
    • UCNV_ESCAPE_C: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). - * In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9], + *
    • UCNV_ESCAPE_C: Substitues the ILLEGAL SEQUENCE with the hexadecimal + * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). + * In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * \\U00023456
    • - *
    • UCNV_ESCAPE_XML_DEC: Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format \htmlonly&#DDDDDDDD;, e.g. "&#65534;&#172;&#51454;")\endhtmlonly. - * In the Event the converter doesn't support the characters {&,#}[0-9], + *
    • UCNV_ESCAPE_XML_DEC: Substitues the ILLEGAL SEQUENCE with the decimal + * representation in the format \htmlonly&#DDDDDDDD;, e.g. "&#65534;&#172;&#51454;")\endhtmlonly. + * In the Event the converter doesn't support the characters {&,#}[0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * &#144470; and Zero padding is ignored.
    • - *
    • UCNV_ESCAPE_XML_HEX:Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format \htmlonly&#xXXXX; e.g. "&#xFFFE;&#x00AC;&#xC8FE;")\endhtmlonly. - * In the Event the converter doesn't support the characters {&,#,x}[0-9], + *
    • UCNV_ESCAPE_XML_HEX:Substitues the ILLEGAL SEQUENCE with the decimal + * representation in the format \htmlonly&#xXXXX; e.g. "&#xFFFE;&#x00AC;&#xC8FE;")\endhtmlonly. + * In the Event the converter doesn't support the characters {&,#,x}[0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * \htmlonly&#x23456;\endhtmlonly
    • @@ -382,7 +384,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE ( * DO NOT CALL THIS FUNCTION DIRECTLY! * This To Unicode callback skips any ILLEGAL_SEQUENCE, or * skips only UNASSINGED_SEQUENCE depending on the context parameter - * simply ignoring those characters. + * simply ignoring those characters. * * @param context The function currently recognizes the callback options: * UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, @@ -406,7 +408,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP ( /** * DO NOT CALL THIS FUNCTION DIRECTLY! - * This To Unicode callback will Substitute the ILLEGAL SEQUENCE,or + * This To Unicode callback will Substitute the ILLEGAL SEQUENCE,or * UNASSIGNED_SEQUENCE depending on context parameter, with the * Unicode substitution character, U+FFFD. * @@ -460,4 +462,4 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE ( #endif -/*UCNV_ERR_H*/ +/*UCNV_ERR_H*/ diff --git a/deps/icu-small/source/common/unicode/ucnvsel.h b/deps/icu-small/source/common/unicode/ucnvsel.h index af27f3d9a9a015..3eed081a37b4bd 100644 --- a/deps/icu-small/source/common/unicode/ucnvsel.h +++ b/deps/icu-small/source/common/unicode/ucnvsel.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -53,7 +55,7 @@ typedef struct UConverterSelector UConverterSelector; * If converterListSize is 0, build for all available converters. * If excludedCodePoints is NULL, don't exclude any code points. * - * @param converterList a pointer to encoding names needed to be involved. + * @param converterList a pointer to encoding names needed to be involved. * Can be NULL if converterListSize==0. * The list and the names will be cloned, and the caller * retains ownership of the original. diff --git a/deps/icu-small/source/common/unicode/uconfig.h b/deps/icu-small/source/common/unicode/uconfig.h index 90f5a58da34938..77a476dd8974ec 100644 --- a/deps/icu-small/source/common/unicode/uconfig.h +++ b/deps/icu-small/source/common/unicode/uconfig.h @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -74,7 +76,7 @@ #endif /** - * Determines wheter to enable auto cleanup of libraries. + * Determines wheter to enable auto cleanup of libraries. * @internal */ #ifndef UCLN_NO_AUTO_CLEANUP @@ -254,7 +256,7 @@ # define UCONFIG_NO_FILE_IO 0 #endif -#if UCONFIG_NO_FILE_IO && defined(U_TIMEZONE_FILES_DIR) +#if UCONFIG_NO_FILE_IO && defined(U_TIMEZONE_FILES_DIR) # error Contradictory file io switches in uconfig.h. #endif diff --git a/deps/icu-small/source/common/unicode/ucurr.h b/deps/icu-small/source/common/unicode/ucurr.h index fc8999351f6330..56bad0aec65a9b 100644 --- a/deps/icu-small/source/common/unicode/ucurr.h +++ b/deps/icu-small/source/common/unicode/ucurr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -11,7 +13,7 @@ #include "unicode/uenum.h" /** - * \file + * \file * \brief C API: Encapsulates information about a currency. * * The ucurr API encapsulates information about a currency, as defined by @@ -50,17 +52,19 @@ enum UCurrencyUsage { * @stable ICU 54 */ UCURR_USAGE_CASH=1, +#ifndef U_HIDE_DEPRECATED_API /** * One higher than the last enum UCurrencyUsage constant. - * @stable ICU 54 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UCURR_USAGE_COUNT=2 +#endif // U_HIDE_DEPRECATED_API }; -typedef enum UCurrencyUsage UCurrencyUsage; +typedef enum UCurrencyUsage UCurrencyUsage; /** * Finds a currency code for the given locale. - * @param locale the locale for which to retrieve a currency code. + * @param locale the locale for which to retrieve a currency code. * Currency can be specified by the "currency" keyword * in which case it overrides the default currency code * @param buff fill in buffer. Can be NULL for preflighting. @@ -69,8 +73,8 @@ typedef enum UCurrencyUsage UCurrencyUsage; * must not be NULL. * @param ec error code * @return length of the currency string. It should always be 3. If 0, - * currency couldn't be found or the input values are - * invalid. + * currency couldn't be found or the input values are + * invalid. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -119,14 +123,14 @@ typedef const void* UCurrRegistryKey; * @stable ICU 2.6 */ U_STABLE UCurrRegistryKey U_EXPORT2 -ucurr_register(const UChar* isoCode, - const char* locale, +ucurr_register(const UChar* isoCode, + const char* locale, UErrorCode* status); /** * Unregister the previously-registered currency definitions using the * URegistryKey returned from ucurr_register. Key becomes invalid after - * a successful call and should not be used again. Any currency - * that might have been hidden by the original ucurr_register call is + * a successful call and should not be used again. Any currency + * that might have been hidden by the original ucurr_register call is * restored. * @param key the registry key returned by a previous call to ucurr_register * @param status the in/out status code, no special meanings are assigned @@ -175,7 +179,7 @@ ucurr_getName(const UChar* currency, * @param ec error code * @return pointer to display string of 'len' UChars. If the resource * data contains no entry for 'currency', then 'currency' itself is - * returned. + * returned. * @stable ICU 4.2 */ U_STABLE const UChar* U_EXPORT2 @@ -211,7 +215,7 @@ ucurr_getDefaultFractionDigits(const UChar* currency, * @stable ICU 54 */ U_STABLE int32_t U_EXPORT2 -ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, +ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec); @@ -300,38 +304,38 @@ U_STABLE UEnumeration * U_EXPORT2 ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode); /** - * Queries if the given ISO 4217 3-letter code is available on the specified date range. - * - * Note: For checking availability of a currency on a specific date, specify the date on both 'from' and 'to' - * - * When 'from' is U_DATE_MIN and 'to' is U_DATE_MAX, this method checks if the specified currency is available any time. + * Queries if the given ISO 4217 3-letter code is available on the specified date range. + * + * Note: For checking availability of a currency on a specific date, specify the date on both 'from' and 'to' + * + * When 'from' is U_DATE_MIN and 'to' is U_DATE_MAX, this method checks if the specified currency is available any time. * If 'from' and 'to' are same UDate value, this method checks if the specified currency is available on that date. - * - * @param isoCode - * The ISO 4217 3-letter code. - * - * @param from - * The lower bound of the date range, inclusive. When 'from' is U_DATE_MIN, check the availability - * of the currency any date before 'to' - * - * @param to - * The upper bound of the date range, inclusive. When 'to' is U_DATE_MAX, check the availability of - * the currency any date after 'from' - * - * @param errorCode - * ICU error code - * - * @return TRUE if the given ISO 4217 3-letter code is supported on the specified date range. - * - * @stable ICU 4.8 - */ + * + * @param isoCode + * The ISO 4217 3-letter code. + * + * @param from + * The lower bound of the date range, inclusive. When 'from' is U_DATE_MIN, check the availability + * of the currency any date before 'to' + * + * @param to + * The upper bound of the date range, inclusive. When 'to' is U_DATE_MAX, check the availability of + * the currency any date after 'from' + * + * @param errorCode + * ICU error code + * + * @return TRUE if the given ISO 4217 3-letter code is supported on the specified date range. + * + * @stable ICU 4.8 + */ U_STABLE UBool U_EXPORT2 -ucurr_isAvailable(const UChar* isoCode, - UDate from, - UDate to, +ucurr_isAvailable(const UChar* isoCode, + UDate from, + UDate to, UErrorCode* errorCode); -/** +/** * Finds the number of valid currency codes for the * given locale and date. * @param locale the locale for which to retrieve the @@ -346,36 +350,36 @@ ucurr_isAvailable(const UChar* isoCode, * @stable ICU 4.0 */ U_STABLE int32_t U_EXPORT2 -ucurr_countCurrencies(const char* locale, - UDate date, - UErrorCode* ec); +ucurr_countCurrencies(const char* locale, + UDate date, + UErrorCode* ec); -/** - * Finds a currency code for the given locale and date - * @param locale the locale for which to retrieve a currency code. - * Currency can be specified by the "currency" keyword - * in which case it overrides the default currency code - * @param date the date for which to retrieve a currency code for - * the given locale. +/** + * Finds a currency code for the given locale and date + * @param locale the locale for which to retrieve a currency code. + * Currency can be specified by the "currency" keyword + * in which case it overrides the default currency code + * @param date the date for which to retrieve a currency code for + * the given locale. * @param index the index within the available list of currency codes * for the given locale on the given date. - * @param buff fill in buffer. Can be NULL for preflighting. - * @param buffCapacity capacity of the fill in buffer. Can be 0 for - * preflighting. If it is non-zero, the buff parameter - * must not be NULL. - * @param ec error code - * @return length of the currency string. It should always be 3. - * If 0, currency couldn't be found or the input values are - * invalid. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_forLocaleAndDate(const char* locale, - UDate date, + * @param buff fill in buffer. Can be NULL for preflighting. + * @param buffCapacity capacity of the fill in buffer. Can be 0 for + * preflighting. If it is non-zero, the buff parameter + * must not be NULL. + * @param ec error code + * @return length of the currency string. It should always be 3. + * If 0, currency couldn't be found or the input values are + * invalid. + * @stable ICU 4.0 + */ +U_STABLE int32_t U_EXPORT2 +ucurr_forLocaleAndDate(const char* locale, + UDate date, int32_t index, - UChar* buff, - int32_t buffCapacity, - UErrorCode* ec); + UChar* buff, + int32_t buffCapacity, + UErrorCode* ec); /** * Given a key and a locale, returns an array of string values in a preferred diff --git a/deps/icu-small/source/common/unicode/udata.h b/deps/icu-small/source/common/unicode/udata.h index 16c1aabbdc10f3..bde719d8e2e271 100644 --- a/deps/icu-small/source/common/unicode/udata.h +++ b/deps/icu-small/source/common/unicode/udata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -36,16 +38,16 @@ U_CDECL_BEGIN * * See the User Guide Data Management chapter. */ - + #ifndef U_HIDE_INTERNAL_API /** - * Character used to separate package names from tree names + * Character used to separate package names from tree names * @internal ICU 3.0 */ #define U_TREE_SEPARATOR '-' /** - * String used to separate package names from tree names + * String used to separate package names from tree names * @internal ICU 3.0 */ #define U_TREE_SEPARATOR_STRING "-" @@ -63,7 +65,7 @@ U_CDECL_BEGIN #define U_TREE_ENTRY_SEP_STRING "/" /** - * Alias for standard ICU data + * Alias for standard ICU data * @internal ICU 3.0 */ #define U_ICUDATA_ALIAS "ICUDATA" @@ -113,7 +115,7 @@ typedef struct { * @stable ICU 2.0 */ uint16_t size; - /** unused, set to 0 + /** unused, set to 0 * @stable ICU 2.0*/ uint16_t reservedWord; @@ -122,27 +124,27 @@ typedef struct { * @stable ICU 2.0 */ uint8_t isBigEndian; - /** see U_CHARSET_FAMILY values in utypes.h + /** see U_CHARSET_FAMILY values in utypes.h * @stable ICU 2.0*/ uint8_t charsetFamily; - /** sizeof(UChar), one of { 1, 2, 4 } + /** sizeof(UChar), one of { 1, 2, 4 } * @stable ICU 2.0*/ uint8_t sizeofUChar; - /** unused, set to 0 + /** unused, set to 0 * @stable ICU 2.0*/ uint8_t reservedByte; - /** data format identifier + /** data format identifier * @stable ICU 2.0*/ uint8_t dataFormat[4]; - /** versions: [0] major [1] minor [2] milli [3] micro + /** versions: [0] major [1] minor [2] milli [3] micro * @stable ICU 2.0*/ uint8_t formatVersion[4]; - /** versions: [0] major [1] minor [2] milli [3] micro + /** versions: [0] major [1] minor [2] milli [3] micro * @stable ICU 2.0*/ uint8_t dataVersion[4]; } UDataInfo; @@ -408,19 +410,24 @@ typedef enum UDataFileAccess { UDATA_PACKAGES_FIRST, /** ICU does not access the file system for data loading. @stable ICU 3.4 */ UDATA_NO_FILES, - /** Number of real UDataFileAccess values. @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of real UDataFileAccess values. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATA_FILE_ACCESS_COUNT +#endif // U_HIDE_DEPRECATED_API } UDataFileAccess; /** * This function may be called to control how ICU loads data. It must be called - * before any ICU data is loaded, including application data loaded with - * ures/ResourceBundle or udata APIs. This function is not multithread safe. + * before any ICU data is loaded, including application data loaded with + * ures/ResourceBundle or udata APIs. This function is not multithread safe. * The results of calling it while other threads are loading data are undefined. * @param access The type of file access to be used * @param status Error code. * @see UDataFileAccess - * @stable ICU 3.4 + * @stable ICU 3.4 */ U_STABLE void U_EXPORT2 udata_setFileAccess(UDataFileAccess access, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/udisplaycontext.h b/deps/icu-small/source/common/unicode/udisplaycontext.h index 7ecb95b02c9a08..eaef02d7956ef4 100644 --- a/deps/icu-small/source/common/unicode/udisplaycontext.h +++ b/deps/icu-small/source/common/unicode/udisplaycontext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2014-2016, International Business Machines @@ -41,7 +43,15 @@ enum UDisplayContextType { * UDISPCTX_LENGTH_FULL, UDISPCTX_LENGTH_SHORT. * @stable ICU 54 */ - UDISPCTX_TYPE_DISPLAY_LENGTH = 2 + UDISPCTX_TYPE_DISPLAY_LENGTH = 2, +#ifndef U_HIDE_DRAFT_API + /** + * Type to retrieve the substitute handling setting, e.g. + * UDISPCTX_SUBSTITUTE, UDISPCTX_NO_SUBSTITUTE. + * @draft ICU 58 + */ + UDISPCTX_TYPE_SUBSTITUTE_HANDLING = 3 +#endif /* U_HIDE_DRAFT_API */ }; /** * @stable ICU 51 @@ -132,7 +142,29 @@ enum UDisplayContext { * e.g. "U.S." for US. * @stable ICU 54 */ - UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1 + UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1, +#ifndef U_HIDE_DRAFT_API + /** + * ================================ + * SUBSTITUTE_HANDLING can be set to one of UDISPCTX_SUBSTITUTE or + * UDISPCTX_NO_SUBSTITUTE. Use UDisplayContextType UDISPCTX_TYPE_SUBSTITUTE_HANDLING + * to get the value. + */ + /** + * A possible setting for SUBSTITUTE_HANDLING: + * Returns a fallback value (e.g., the input code) when no data is available. + * This is the default value. + * @draft ICU 58 + */ + UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0, + /** + * A possible setting for SUBSTITUTE_HANDLING: + * Returns a null value when no data is available. + * @draft ICU 58 + */ + UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1 +#endif /* U_HIDE_DRAFT_API */ + }; /** * @stable ICU 51 diff --git a/deps/icu-small/source/common/unicode/uenum.h b/deps/icu-small/source/common/unicode/uenum.h index ec19b0b59e61fc..8da1bd45937afd 100644 --- a/deps/icu-small/source/common/unicode/uenum.h +++ b/deps/icu-small/source/common/unicode/uenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -26,9 +28,9 @@ /** * \file - * \brief C API: String Enumeration + * \brief C API: String Enumeration */ - + /** * An enumeration object. * For usage in C programs. @@ -73,7 +75,7 @@ U_NAMESPACE_END * U_ENUM_OUT_OF_SYNC_ERROR. * This is a convenience function. It can end up being very * expensive as all the items might have to be pre-fetched (depending - * on the type of data being traversed). Use with caution and only + * on the type of data being traversed). Use with caution and only * when necessary. * @param en UEnumeration structure pointer * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the @@ -149,7 +151,7 @@ uenum_next(UEnumeration* en, * to start at the first element. * @param en the iterator object * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if - * the iterator is out of sync with its service. + * the iterator is out of sync with its service. * @stable ICU 2.2 */ U_STABLE void U_EXPORT2 diff --git a/deps/icu-small/source/common/unicode/uidna.h b/deps/icu-small/source/common/unicode/uidna.h index a5677a44064690..af3455c1f769cf 100644 --- a/deps/icu-small/source/common/unicode/uidna.h +++ b/deps/icu-small/source/common/unicode/uidna.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -536,7 +538,7 @@ enum { * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations * multiple times to an input string will yield the same result as applying the operation * once. - * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string) + * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string) * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string). * * @param src Input UChar array containing label in Unicode. @@ -547,18 +549,18 @@ enum { * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with + * If unassigned code points are found the operation fails with * U_UNASSIGNED_ERROR error code. * * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input + * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, + * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR * - * @param parseError Pointer to UParseError struct to receive information on position + * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. * U_INVALID_CHAR_FOUND if src contains @@ -571,7 +573,7 @@ enum { * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. */ U_DEPRECATED int32_t U_EXPORT2 -uidna_toASCII(const UChar* src, int32_t srcLength, +uidna_toASCII(const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, @@ -592,21 +594,21 @@ uidna_toASCII(const UChar* src, int32_t srcLength, * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with + * If unassigned code points are found the operation fails with * U_UNASSIGNED_ERROR error code. * * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. Note: This option is - * required on toUnicode operation because the RFC mandates + * If this option is set, the unassigned code points are in the input + * are treated as normal Unicode code points. Note: This option is + * required on toUnicode operation because the RFC mandates * verification of decoded ACE input by applying toASCII and comparing * its output with source * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, + * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR * - * @param parseError Pointer to UParseError struct to receive information on position + * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. * U_INVALID_CHAR_FOUND if src contains @@ -628,14 +630,14 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, /** * IDNA2003: Convenience function that implements the IDNToASCII operation as defined in the IDNA RFC. - * This operation is done on complete domain names, e.g: "www.example.com". - * It is important to note that this operation can fail. If it fails, then the input + * This operation is done on complete domain names, e.g: "www.example.com". + * It is important to note that this operation can fail. If it fails, then the input * domain name cannot be used as an Internationalized Domain Name and the application * should have methods defined to deal with the failure. * * Note: IDNA RFC specifies that a conformant application should divide a domain name - * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, - * and then convert. This function does not offer that level of granularity. The options once + * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, + * and then convert. This function does not offer that level of granularity. The options once * set will apply to all labels in the domain name * * @param src Input UChar array containing IDN in Unicode. @@ -646,18 +648,18 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with + * If unassigned code points are found the operation fails with * U_UNASSIGNED_CODE_POINT_FOUND error code. * * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input + * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, + * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR * - * @param parseError Pointer to UParseError struct to receive information on position + * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. * U_INVALID_CHAR_FOUND if src contains @@ -678,11 +680,11 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength, /** * IDNA2003: Convenience function that implements the IDNToUnicode operation as defined in the IDNA RFC. - * This operation is done on complete domain names, e.g: "www.example.com". + * This operation is done on complete domain names, e.g: "www.example.com". * * Note: IDNA RFC specifies that a conformant application should divide a domain name - * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, - * and then convert. This function does not offer that level of granularity. The options once + * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, + * and then convert. This function does not offer that level of granularity. The options once * set will apply to all labels in the domain name * * @param src Input UChar array containing IDN in ASCII (ACE encoded) form. @@ -693,18 +695,18 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength, * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with + * If unassigned code points are found the operation fails with * U_UNASSIGNED_CODE_POINT_FOUND error code. * * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input + * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, + * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR * - * @param parseError Pointer to UParseError struct to receive information on position + * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. * U_INVALID_CHAR_FOUND if src contains @@ -726,10 +728,10 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, /** * IDNA2003: Compare two IDN strings for equivalence. * This function splits the domain names into labels and compares them. - * According to IDN RFC, whenever two labels are compared, they are - * considered equal if and only if their ASCII forms (obtained by + * According to IDN RFC, whenever two labels are compared, they are + * considered equal if and only if their ASCII forms (obtained by * applying toASCII) match using an case-insensitive ASCII comparison. - * Two domain names are considered a match if and only if all labels + * Two domain names are considered a match if and only if all labels * match regardless of whether label separators match. * * @param s1 First source string. @@ -741,15 +743,15 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with + * If unassigned code points are found the operation fails with * U_UNASSIGNED_CODE_POINT_FOUND error code. * * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input + * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, + * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR * * @param status ICU error code in/out parameter. diff --git a/deps/icu-small/source/common/unicode/uiter.h b/deps/icu-small/source/common/unicode/uiter.h index 693ba2ca827de2..e6cb838cf87a05 100644 --- a/deps/icu-small/source/common/unicode/uiter.h +++ b/deps/icu-small/source/common/unicode/uiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -169,7 +171,7 @@ UCharIteratorHasNext(UCharIterator *iter); */ typedef UBool U_CALLCONV UCharIteratorHasPrevious(UCharIterator *iter); - + /** * Function type declaration for UCharIterator.current(). * diff --git a/deps/icu-small/source/common/unicode/uldnames.h b/deps/icu-small/source/common/unicode/uldnames.h index 8c153d6a41e05b..30f465a4501790 100644 --- a/deps/icu-small/source/common/unicode/uldnames.h +++ b/deps/icu-small/source/common/unicode/uldnames.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines Corporation and @@ -43,11 +45,11 @@ typedef enum { */ struct ULocaleDisplayNames; -/** - * C typedef for struct ULocaleDisplayNames. - * @stable ICU 4.4 +/** + * C typedef for struct ULocaleDisplayNames. + * @stable ICU 4.4 */ -typedef struct ULocaleDisplayNames ULocaleDisplayNames; +typedef struct ULocaleDisplayNames ULocaleDisplayNames; #if !UCONFIG_NO_FORMATTING @@ -57,9 +59,9 @@ typedef struct ULocaleDisplayNames ULocaleDisplayNames; * dialectHandling. The usual value for dialectHandling is * ULOC_STANDARD_NAMES. * - * @param locale the display locale - * @param dialectHandling how to select names for locales - * @return a ULocaleDisplayNames instance + * @param locale the display locale + * @param dialectHandling how to select names for locales + * @return a ULocaleDisplayNames instance * @param pErrorCode the status code * @stable ICU 4.4 */ @@ -101,7 +103,7 @@ U_NAMESPACE_END * Returns the locale used to determine the display names. This is * not necessarily the same locale passed to {@link #uldn_open}. * @param ldn the LocaleDisplayNames instance - * @return the display locale + * @return the display locale * @stable ICU 4.4 */ U_STABLE const char * U_EXPORT2 @@ -270,14 +272,14 @@ uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn, * Returns an instance of LocaleDisplayNames that returns names formatted * for the provided locale, using the provided UDisplayContext settings. * -* @param locale The display locale +* @param locale The display locale * @param contexts List of one or more context settings (e.g. for dialect * handling, capitalization, etc. * @param length Number of items in the contexts list * @param pErrorCode Pointer to UErrorCode input/output status. If at entry this indicates * a failure status, the function will do nothing; otherwise this will be -* updated with any new status from the function. -* @return a ULocaleDisplayNames instance +* updated with any new status from the function. +* @return a ULocaleDisplayNames instance * @stable ICU 51 */ U_STABLE ULocaleDisplayNames * U_EXPORT2 @@ -290,7 +292,7 @@ uldn_openForContext(const char * locale, UDisplayContext *contexts, * @param type the UDisplayContextType whose value to return * @param pErrorCode Pointer to UErrorCode input/output status. If at entry this indicates * a failure status, the function will do nothing; otherwise this will be -* updated with any new status from the function. +* updated with any new status from the function. * @return the UDisplayContextValue for the specified type. * @stable ICU 51 */ diff --git a/deps/icu-small/source/common/unicode/ulistformatter.h b/deps/icu-small/source/common/unicode/ulistformatter.h index bd83199441c89a..2167f60346fdd6 100644 --- a/deps/icu-small/source/common/unicode/ulistformatter.h +++ b/deps/icu-small/source/common/unicode/ulistformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015-2016, International Business Machines @@ -18,7 +20,7 @@ * \file * \brief C API: Format a list in a locale-appropriate way. * - * A UListFormatter is used to format a list of items in a locale-appropriate way, + * A UListFormatter is used to format a list of items in a locale-appropriate way, * using data from CLDR. * Example: Input data ["Alice", "Bob", "Charlie", "Delta"] will be formatted * as "Alice, Bob, Charlie, and Delta" in English. diff --git a/deps/icu-small/source/common/unicode/uloc.h b/deps/icu-small/source/common/unicode/uloc.h index 0caa02ed7e04dc..92ce20ec5fa2c9 100644 --- a/deps/icu-small/source/common/unicode/uloc.h +++ b/deps/icu-small/source/common/unicode/uloc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -24,9 +26,9 @@ #include "unicode/utypes.h" #include "unicode/uenum.h" -/** +/** * \file - * \brief C API: Locale + * \brief C API: Locale * *

      ULoc C API for Locale

      * A Locale represents a specific geographical, political, @@ -44,9 +46,9 @@ *
        * \code
        *       newLanguage
      - *
      + * 
        *       newLanguage + newCountry
      - *
      + * 
        *       newLanguage + newCountry + newVariant
        * \endcode
        * 
      @@ -67,7 +69,7 @@ * http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html * *

      - * The third option requires another additonal information--the + * The third option requires another additonal information--the * Variant. * The Variant codes are vendor and browser-specific. * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. @@ -117,7 +119,7 @@ *

      * The ICU provides a number of services that perform locale-sensitive * operations. For example, the unum_xxx functions format - * numbers, currency, or percentages in a locale-sensitive manner. + * numbers, currency, or percentages in a locale-sensitive manner. *

      * \htmlonly
      \endhtmlonly *
      @@ -125,12 +127,12 @@
        *     UErrorCode success = U_ZERO_ERROR;
        *     UNumberFormat *nf;
        *     const char* myLocale = "fr_FR";
      - *
      - *     nf = unum_open( UNUM_DEFAULT, NULL, success );
      + * 
      + *     nf = unum_open( UNUM_DEFAULT, NULL, success );          
        *     unum_close(nf);
        *     nf = unum_open( UNUM_CURRENCY, NULL, success );
        *     unum_close(nf);
      - *     nf = unum_open( UNUM_PERCENT, NULL, success );
      + *     nf = unum_open( UNUM_PERCENT, NULL, success );   
        *     unum_close(nf);
        * \endcode
        * 
      @@ -139,13 +141,13 @@ * and one without; the latter using the default locale. * \htmlonly
      \endhtmlonly *
      - * \code
      - *
      - *     nf = unum_open( UNUM_DEFAULT, myLocale, success );
      + * \code 
      + * 
      + *     nf = unum_open( UNUM_DEFAULT, myLocale, success );          
        *     unum_close(nf);
        *     nf = unum_open( UNUM_CURRENCY, myLocale, success );
        *     unum_close(nf);
      - *     nf = unum_open( UNUM_PERCENT, myLocale, success );
      + *     nf = unum_open( UNUM_PERCENT, myLocale, success );   
        *     unum_close(nf);
        * \endcode
        * 
      @@ -155,7 +157,7 @@ * just a mechanism for identifying these services. * *

      - * Each international serivce that performs locale-sensitive operations + * Each international serivce that performs locale-sensitive operations * allows you * to get all the available objects of that type. You can sift * through these objects by language, country, or variant, @@ -170,22 +172,22 @@ * int32_t uloc_countAvailable(); * int32_t * uloc_getDisplayName(const char* localeID, - * const char* inLocaleID, + * const char* inLocaleID, * UChar* result, * int32_t maxResultSize, * UErrorCode* err); - * + * * \endcode *

* \htmlonly\endhtmlonly *

- * Concerning POSIX/RFC1766 Locale IDs, + * Concerning POSIX/RFC1766 Locale IDs, * the getLanguage/getCountry/getVariant/getName functions do understand * the POSIX type form of language_COUNTRY.ENCODING\@VARIANT * and if there is not an ICU-stype variant, uloc_getVariant() for example * will return the one listed after the \@at sign. As well, the hyphen * "-" is recognized as a country/variant separator similarly to RFC1766. - * So for example, "en-us" will be interpreted as en_US. + * So for example, "en-us" will be interpreted as en_US. * As a result, uloc_getName() is far from a no-op, and will have the * effect of converting POSIX/RFC1766 IDs into ICU form, although it does * NOT map any of the actual codes (i.e. russian->ru) in any way. @@ -302,7 +304,7 @@ /** * Unicode code point for '=' for assigning value to a keyword. * @see ULOC_KEYWORD_ASSIGN - * @stable ICU 4.6 + * @stable ICU 4.6 */ #define ULOC_KEYWORD_ASSIGN_UNICODE 0x3D @@ -321,46 +323,50 @@ /** * Constants for *_getLocale() - * Allow user to select whether she wants information on + * Allow user to select whether she wants information on * requested, valid or actual locale. * For example, a collator for "en_US_CALIFORNIA" was - * requested. In the current state of ICU (2.0), + * requested. In the current state of ICU (2.0), * the requested locale is "en_US_CALIFORNIA", * the valid locale is "en_US" (most specific locale supported by ICU) - * and the actual locale is "root" (the collation data comes unmodified + * and the actual locale is "root" (the collation data comes unmodified * from the UCA) - * The locale is considered supported by ICU if there is a core ICU bundle + * The locale is considered supported by ICU if there is a core ICU bundle * for that locale (although it may be empty). * @stable ICU 2.1 */ typedef enum { - /** This is locale the data actually comes from + /** This is locale the data actually comes from * @stable ICU 2.1 */ ULOC_ACTUAL_LOCALE = 0, - /** This is the most specific locale supported by ICU + /** This is the most specific locale supported by ICU * @stable ICU 2.1 */ ULOC_VALID_LOCALE = 1, #ifndef U_HIDE_DEPRECATED_API /** This is the requested locale - * @deprecated ICU 2.8 + * @deprecated ICU 2.8 */ ULOC_REQUESTED_LOCALE = 2, -#endif /* U_HIDE_DEPRECATED_API */ - ULOC_DATA_LOCALE_TYPE_LIMIT = 3 -} ULocDataLocaleType ; + /** + * One more than the highest normal ULocDataLocaleType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + ULOC_DATA_LOCALE_TYPE_LIMIT = 3 +#endif // U_HIDE_DEPRECATED_API +} ULocDataLocaleType; #ifndef U_HIDE_SYSTEM_API /** - * Gets ICU's default locale. + * Gets ICU's default locale. * The returned string is a snapshot in time, and will remain valid * and unchanged even when uloc_setDefault() is called. * The returned storage is owned by ICU, and must not be altered or deleted * by the caller. - * + * * @return the ICU default locale * @system * @stable ICU 2.0 @@ -369,7 +375,7 @@ U_STABLE const char* U_EXPORT2 uloc_getDefault(void); /** - * Sets ICU's default locale. + * Sets ICU's default locale. * By default (without calling this function), ICU's default locale will be based * on information obtained from the underlying system environment. *

@@ -395,11 +401,11 @@ uloc_setDefault(const char* localeID, * * @param localeID the locale to get the ISO language code with * @param language the language code for localeID - * @param languageCapacity the size of the language buffer to store the + * @param languageCapacity the size of the language buffer to store the * language code with * @param err error information if retrieving the language code failed - * @return the actual buffer size needed for the language code. If it's greater - * than languageCapacity, the returned language code will be truncated. + * @return the actual buffer size needed for the language code. If it's greater + * than languageCapacity, the returned language code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -413,11 +419,11 @@ uloc_getLanguage(const char* localeID, * * @param localeID the locale to get the ISO language code with * @param script the language code for localeID - * @param scriptCapacity the size of the language buffer to store the + * @param scriptCapacity the size of the language buffer to store the * language code with * @param err error information if retrieving the language code failed - * @return the actual buffer size needed for the language code. If it's greater - * than scriptCapacity, the returned language code will be truncated. + * @return the actual buffer size needed for the language code. If it's greater + * than scriptCapacity, the returned language code will be truncated. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -431,11 +437,11 @@ uloc_getScript(const char* localeID, * * @param localeID the locale to get the country code with * @param country the country code for localeID - * @param countryCapacity the size of the country buffer to store the + * @param countryCapacity the size of the country buffer to store the * country code with * @param err error information if retrieving the country code failed - * @return the actual buffer size needed for the country code. If it's greater - * than countryCapacity, the returned country code will be truncated. + * @return the actual buffer size needed for the country code. If it's greater + * than countryCapacity, the returned country code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -449,11 +455,11 @@ uloc_getCountry(const char* localeID, * * @param localeID the locale to get the variant code with * @param variant the variant code for localeID - * @param variantCapacity the size of the variant buffer to store the + * @param variantCapacity the size of the variant buffer to store the * variant code with * @param err error information if retrieving the variant code failed - * @return the actual buffer size needed for the variant code. If it's greater - * than variantCapacity, the returned variant code will be truncated. + * @return the actual buffer size needed for the variant code. If it's greater + * than variantCapacity, the returned variant code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -475,8 +481,8 @@ uloc_getVariant(const char* localeID, * @param name fill in buffer for the name without keywords. * @param nameCapacity capacity of the fill in buffer. * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. + * @return the actual buffer size needed for the full name. If it's greater + * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -495,11 +501,11 @@ uloc_getName(const char* localeID, * * @param localeID the locale to get the full name with * @param name the full name for localeID - * @param nameCapacity the size of the name buffer to store the + * @param nameCapacity the size of the name buffer to store the * full name with * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. + * @return the actual buffer size needed for the full name. If it's greater + * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -549,11 +555,11 @@ uloc_getLCID(const char* localeID); * inLocale would result in "Anglais", while passing Locale::getGerman() * for inLocale would result in "Englisch". * @param language the displayable language code for localeID - * @param languageCapacity the size of the language buffer to store the + * @param languageCapacity the size of the language buffer to store the * displayable language code with * @param status error information if retrieving the displayable language code failed - * @return the actual buffer size needed for the displayable language code. If it's greater - * than languageCapacity, the returned language code will be truncated. + * @return the actual buffer size needed for the displayable language code. If it's greater + * than languageCapacity, the returned language code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -572,11 +578,11 @@ uloc_getDisplayLanguage(const char* locale, * inLocale would result in "", while passing Locale::getGerman() * for inLocale would result in "". NULL may be used to specify the default. * @param script the displayable country code for localeID - * @param scriptCapacity the size of the script buffer to store the + * @param scriptCapacity the size of the script buffer to store the * displayable script code with * @param status error information if retrieving the displayable script code failed - * @return the actual buffer size needed for the displayable script code. If it's greater - * than scriptCapacity, the returned displayable script code will be truncated. + * @return the actual buffer size needed for the displayable script code. If it's greater + * than scriptCapacity, the returned displayable script code will be truncated. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -597,11 +603,11 @@ uloc_getDisplayScript(const char* locale, * inLocale would result in "Anglais", while passing Locale::getGerman() * for inLocale would result in "Englisch". NULL may be used to specify the default. * @param country the displayable country code for localeID - * @param countryCapacity the size of the country buffer to store the + * @param countryCapacity the size of the country buffer to store the * displayable country code with * @param status error information if retrieving the displayable country code failed - * @return the actual buffer size needed for the displayable country code. If it's greater - * than countryCapacity, the returned displayable country code will be truncated. + * @return the actual buffer size needed for the displayable country code. If it's greater + * than countryCapacity, the returned displayable country code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -621,11 +627,11 @@ uloc_getDisplayCountry(const char* locale, * inLocale would result in "Anglais", while passing Locale::getGerman() * for inLocale would result in "Englisch". NULL may be used to specify the default. * @param variant the displayable variant code for localeID - * @param variantCapacity the size of the variant buffer to store the + * @param variantCapacity the size of the variant buffer to store the * displayable variant code with * @param status error information if retrieving the displayable variant code failed - * @return the actual buffer size needed for the displayable variant code. If it's greater - * than variantCapacity, the returned displayable variant code will be truncated. + * @return the actual buffer size needed for the displayable variant code. If it's greater + * than variantCapacity, the returned displayable variant code will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -637,8 +643,8 @@ uloc_getDisplayVariant(const char* locale, /** * Gets the keyword name suitable for display for the specified locale. - * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display - * string for the keyword collation. + * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display + * string for the keyword collation. * Usage: * * UErrorCode status = U_ZERO_ERROR; @@ -667,11 +673,11 @@ uloc_getDisplayVariant(const char* locale, * for inLocale would result in "Englisch". NULL may be used to specify the default. * @param dest the buffer to which the displayable keyword should be written. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param status error information if retrieving the displayable string failed. + * @param status error information if retrieving the displayable string failed. * Should not be NULL and should not indicate failure on entry. - * @return the actual buffer size needed for the displayable variant code. + * @return the actual buffer size needed for the displayable variant code. * @see #uloc_openKeywords * @stable ICU 2.8 */ @@ -683,7 +689,7 @@ uloc_getDisplayKeyword(const char* keyword, UErrorCode* status); /** * Gets the value of the keyword suitable for display for the specified locale. - * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display + * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display * string for PHONEBOOK, in the display locale, when "collation" is specified as the keyword. * * @param locale The locale to get the displayable variant code with. NULL may be used to specify the default. @@ -694,11 +700,11 @@ uloc_getDisplayKeyword(const char* keyword, * for inLocale would result in "Englisch". NULL may be used to specify the default. * @param dest the buffer to which the displayable keyword should be written. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param status error information if retrieving the displayable string failed. + * @param status error information if retrieving the displayable string failed. * Should not be NULL and must not indicate failure on entry. - * @return the actual buffer size needed for the displayable variant code. + * @return the actual buffer size needed for the displayable variant code. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -717,11 +723,11 @@ uloc_getDisplayKeywordValue( const char* locale, * inLocale would result in "Anglais", while passing Locale::getGerman() * for inLocale would result in "Englisch". NULL may be used to specify the default. * @param result the displayable name for localeID - * @param maxResultSize the size of the name buffer to store the + * @param maxResultSize the size of the name buffer to store the * displayable full name with * @param err error information if retrieving the displayable name failed - * @return the actual buffer size needed for the displayable name. If it's greater - * than maxResultSize, the returned displayable name will be truncated. + * @return the actual buffer size needed for the displayable name. If it's greater + * than maxResultSize, the returned displayable name will be truncated. * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -733,8 +739,8 @@ uloc_getDisplayName(const char* localeID, /** - * Gets the specified locale from a list of all available locales. - * The return value is a pointer to an item of + * Gets the specified locale from a list of all available locales. + * The return value is a pointer to an item of * a locale name array. Both this array and the pointers * it contains are owned by ICU and should not be deleted or written through * by the caller. The locale name is terminated by a null pointer. @@ -811,16 +817,16 @@ uloc_getParent(const char* localeID, * ICU format. It does NOT map aliased names in any way. * See the top of this header file. * - * This API strips off the keyword part, so "de_DE\@collation=phonebook" - * will become "de_DE". + * This API strips off the keyword part, so "de_DE\@collation=phonebook" + * will become "de_DE". * This API supports preflighting. * * @param localeID the locale to get the full name with * @param name fill in buffer for the name without keywords. * @param nameCapacity capacity of the fill in buffer. * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. + * @return the actual buffer size needed for the full name. If it's greater + * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -844,7 +850,7 @@ uloc_openKeywords(const char* localeID, /** * Get the value for a keyword. Locale name does not need to be normalized. - * + * * @param localeID locale name containing the keyword ("de_DE@currency=EURO;collation=PHONEBOOK") * @param keywordName name of the keyword for which we want the value. Case insensitive. * @param buffer receiving buffer @@ -873,7 +879,7 @@ uloc_getKeywordValue(const char* localeID, * * @param keywordName name of the keyword to be set. Case insensitive. * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed. No error is given if + * NULL, will result in the keyword being removed. No error is given if * that keyword does not exist. * @param buffer input buffer containing locale to be modified. * @param bufferCapacity capacity of receiving buffer @@ -920,7 +926,7 @@ typedef enum { /** * Get the layout character orientation for the specified locale. - * + * * @param localeId locale name * @param status Error status * @return an enum indicating the layout orientation for characters. @@ -932,7 +938,7 @@ uloc_getCharacterOrientation(const char* localeId, /** * Get the layout line orientation for the specified locale. - * + * * @param localeId locale name * @param status Error status * @return an enum indicating the layout orientation for lines. @@ -951,7 +957,7 @@ uloc_getLineOrientation(const char* localeId, typedef enum { ULOC_ACCEPT_FAILED = 0, /* No exact match was found. */ ULOC_ACCEPT_VALID = 1, /* An exact match was found. */ - ULOC_ACCEPT_FALLBACK = 2 /* A fallback was found, for example, + ULOC_ACCEPT_FALLBACK = 2 /* A fallback was found, for example, Accept list contained 'ja_JP' which matched available locale 'ja'. */ } UAcceptResult; @@ -990,7 +996,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, * @stable ICU 3.2 */ U_STABLE int32_t U_EXPORT2 -uloc_acceptLanguage(char *result, int32_t resultAvailable, +uloc_acceptLanguage(char *result, int32_t resultAvailable, UAcceptResult *outResult, const char **acceptList, int32_t acceptListCount, UEnumeration* availableLocales, @@ -1006,7 +1012,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, * @param localeCapacity the size of the output buffer * @param status an error is returned if the LCID is unrecognized or the output buffer * is too small - * @return actual the actual size of the locale ID, not including NUL-termination + * @return actual the actual size of the locale ID, not including NUL-termination * @stable ICU 3.8 */ U_STABLE int32_t U_EXPORT2 @@ -1097,7 +1103,7 @@ uloc_minimizeSubtags(const char* localeID, * Returns a locale ID for the specified BCP47 language tag string. * If the specified language tag contains any ill-formed subtags, * the first such subtag and all following subtags are ignored. - *

+ *

* This implements the 'Language-Tag' production of BCP47, and so * supports grandfathered (regular and irregular) as well as private * use language tags. Private use tags are represented as 'x-whatever', @@ -1124,8 +1130,8 @@ uloc_forLanguageTag(const char* langtag, UErrorCode* err); /** - * Returns a well-formed language tag for this locale ID. - *

+ * Returns a well-formed language tag for this locale ID. + *

* Note: When strict is FALSE, any locale * fields which do not satisfy the BCP47 syntax requirement will * be omitted from the result. When strict is @@ -1161,14 +1167,14 @@ uloc_toLanguageTag(const char* localeID, * then the pointer to the input keyword itself will be returned. * For example, * uloc_toUnicodeLocaleKey("ZZ") returns "ZZ". - * + * * @param keyword the input locale keyword (either legacy key * such as "collation" or BCP 47 Unicode locale extension * key such as "co"). * @return the well-formed BCP 47 Unicode locale extension key, * or NULL if the specified locale keyword cannot be * mapped to a well-formed BCP 47 Unicode locale extension - * key. + * key. * @see uloc_toLegacyKey * @stable ICU 54 */ @@ -1190,7 +1196,7 @@ uloc_toUnicodeLocaleKey(const char* keyword); * For example, * uloc_toUnicodeLocaleType("Foo", "Bar") returns "Bar", * uloc_toUnicodeLocaleType("variableTop", "00A4") returns "00A4". - * + * * @param keyword the locale keyword (either legacy key such as * "collation" or BCP 47 Unicode locale extension * key such as "co"). @@ -1210,7 +1216,7 @@ uloc_toUnicodeLocaleType(const char* keyword, const char* value); * Converts the specified keyword (BCP 47 Unicode locale extension key, or * legacy key) to the legacy key. For example, legacy key "collation" is * returned for the input BCP 47 Unicode locale extension key "co". - * + * * @param keyword the input locale keyword (either BCP 47 Unicode locale * extension key or legacy key). * @return the well-formed legacy key, or NULL if the specified diff --git a/deps/icu-small/source/common/unicode/umachine.h b/deps/icu-small/source/common/unicode/umachine.h index d7829bafacc6da..51581c7dcdc187 100644 --- a/deps/icu-small/source/common/unicode/umachine.h +++ b/deps/icu-small/source/common/unicode/umachine.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -49,6 +51,29 @@ */ #include +#ifndef U_HIDE_INTERNAL_API +/* + * U_USE_CHAR16_T + * When defined, force use of char16_t for UChar. + * Note: char16_t is expected to become the default and required in the future, + * and this option will be removed. + * @internal + */ +#ifdef U_USE_CHAR16_T +#ifdef UCHAR_TYPE +#undef UCHAR_TYPE +#endif +#define UCHAR_TYPE char16_t + +/* + * In plain C, is needed for the definition of char16_t + */ +#ifndef __cplusplus +#include +#endif +#endif +#endif /* U_HIDE_INTERNAL_API */ + /*==========================================================================*/ /* For C wrappers, we use the symbol U_STABLE. */ /* This works properly if the includer is C or C++. */ @@ -93,7 +118,7 @@ # define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated)) /** * \def U_ATTRIBUTE_DEPRECATED - * This is used for Visual C++ specific attributes + * This is used for Visual C++ specific attributes * @internal */ #elif defined(_MSC_VER) && (_MSC_VER >= 1400) @@ -335,7 +360,7 @@ typedef int32_t UChar32; * This value is intended for sentinel values for APIs that * (take or) return single code points (UChar32). * It is outside of the Unicode code point range 0..0x10ffff. - * + * * For example, a "done" or "error" value in a new API * could be indicated with U_SENTINEL. * diff --git a/deps/icu-small/source/common/unicode/umisc.h b/deps/icu-small/source/common/unicode/umisc.h index cbc2d9ceed319c..7b6d35f522421d 100644 --- a/deps/icu-small/source/common/unicode/umisc.h +++ b/deps/icu-small/source/common/unicode/umisc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2006, International Business Machines @@ -19,29 +21,29 @@ /** * \file - * \brief C API:misc definitions + * \brief C API:misc definitions * - * This file contains miscellaneous definitions for the C APIs. + * This file contains miscellaneous definitions for the C APIs. */ U_CDECL_BEGIN -/** A struct representing a range of text containing a specific field +/** A struct representing a range of text containing a specific field * @stable ICU 2.0 */ typedef struct UFieldPosition { /** - * The field + * The field * @stable ICU 2.0 */ int32_t field; /** - * The start of the text range containing field + * The start of the text range containing field * @stable ICU 2.0 */ int32_t beginIndex; - /** - * The limit of the text range containing field + /** + * The limit of the text range containing field * @stable ICU 2.0 */ int32_t endIndex; diff --git a/deps/icu-small/source/common/unicode/unifilt.h b/deps/icu-small/source/common/unicode/unifilt.h index c504d17ed9e8d0..0fdcd1482583ad 100644 --- a/deps/icu-small/source/common/unicode/unifilt.h +++ b/deps/icu-small/source/common/unicode/unifilt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2010, International Business Machines Corporation and others. @@ -14,7 +16,7 @@ #include "unicode/unimatch.h" /** - * \file + * \file * \brief C++ API: Unicode Filter */ diff --git a/deps/icu-small/source/common/unicode/unifunct.h b/deps/icu-small/source/common/unicode/unifunct.h index 3fda80a64b0c53..b40027c01deb3d 100644 --- a/deps/icu-small/source/common/unicode/unifunct.h +++ b/deps/icu-small/source/common/unicode/unifunct.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2005, International Business Machines Corporation @@ -14,10 +16,10 @@ #include "unicode/uobject.h" /** - * \file + * \file * \brief C++ API: Unicode Functor */ - + U_NAMESPACE_BEGIN class UnicodeMatcher; diff --git a/deps/icu-small/source/common/unicode/unimatch.h b/deps/icu-small/source/common/unicode/unimatch.h index 0ac66c49e26e1d..605f3f5e75e904 100644 --- a/deps/icu-small/source/common/unicode/unimatch.h +++ b/deps/icu-small/source/common/unicode/unimatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** @@ -11,7 +13,7 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: Unicode Matcher */ @@ -36,7 +38,7 @@ enum UMatchDegree { * @stable ICU 2.4 */ U_MISMATCH, - + /** * Constant returned by matches() indicating a * partial match between the text and this matcher. This value is @@ -48,7 +50,7 @@ enum UMatchDegree { * @stable ICU 2.4 */ U_PARTIAL_MATCH, - + /** * Constant returned by matches() indicating a * complete match between the text and this matcher. For an @@ -82,7 +84,7 @@ class U_COMMON_API UnicodeMatcher /* not : public UObject because this is an int * Matching in the forward direction is indicated by limit > * offset. Characters from offset forwards to limit-1 will be * considered for matching. - * + * * Matching in the reverse direction is indicated by limit < * offset. Characters from offset backwards to limit+1 will be * considered for matching. diff --git a/deps/icu-small/source/common/unicode/uniset.h b/deps/icu-small/source/common/unicode/uniset.h index 3277f11328a8f5..fdd7fc39ad351f 100644 --- a/deps/icu-small/source/common/unicode/uniset.h +++ b/deps/icu-small/source/common/unicode/uniset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2016, International Business Machines Corporation @@ -260,7 +262,7 @@ class RuleCharacterIterator; * * * \htmlonly\endhtmlonly - * + * *

Note: * - Most UnicodeSet methods do not take a UErrorCode parameter because * there are usually very few opportunities for failure other than a shortage @@ -360,7 +362,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { UnicodeSet(); /** - * Constructs a set containing the given range. If end > + * Constructs a set containing the given range. If end < * start then an empty set is created. * * @param start first character, inclusive, of range @@ -517,7 +519,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { * @stable ICU 4.2 */ inline static const UnicodeSet *fromUSet(const USet *uset); - + /** * Produce a USet * pointer for this UnicodeSet. * USet is the plain C type for UnicodeSet diff --git a/deps/icu-small/source/common/unicode/unistr.h b/deps/icu-small/source/common/unicode/unistr.h index bf00974fddb70f..6f62244a1e2824 100644 --- a/deps/icu-small/source/common/unicode/unistr.h +++ b/deps/icu-small/source/common/unicode/unistr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2016, International Business Machines @@ -74,7 +76,9 @@ UStringCaseMapper(const UCaseMap *csm, U_NAMESPACE_BEGIN +#if !UCONFIG_NO_BREAK_ITERATION class BreakIterator; // unicode/brkiter.h +#endif class Locale; // unicode/locid.h class StringCharacterIterator; class UnicodeStringAppendable; // unicode/appendable.h @@ -172,8 +176,6 @@ class UnicodeStringAppendable; // unicode/appendable.h # endif #endif -/* Cannot make the following #ifndef U_HIDE_DRAFT_API, - it is used to construct other non-internal constants */ /** * \def UNISTR_OBJECT_SIZE * Desired sizeof(UnicodeString) in bytes. @@ -205,7 +207,7 @@ class UnicodeStringAppendable; // unicode/appendable.h * and the internal buffer would hold up to 11 UChars in that case. * * @see U16_MAX_LENGTH - * @draft ICU 56 + * @stable ICU 56 */ #ifndef UNISTR_OBJECT_SIZE # define UNISTR_OBJECT_SIZE 64 @@ -1902,7 +1904,6 @@ class U_COMMON_API UnicodeString : public Replaceable */ UnicodeString &fastCopyFrom(const UnicodeString &src); -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, might leave src in bogus state. @@ -1910,12 +1911,13 @@ class U_COMMON_API UnicodeString : public Replaceable * The behavior is undefined if *this and src are the same object. * @param src source string * @return *this - * @draft ICU 56 + * @stable ICU 56 */ UnicodeString &operator=(UnicodeString &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, might leave src in bogus state. * This string will have the same contents and state that the source string had. @@ -1931,16 +1933,15 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Swap strings. * @param other other string - * @draft ICU 56 + * @stable ICU 56 */ void swap(UnicodeString &other) U_NOEXCEPT; -#endif /* U_HIDE_DRAFT_API */ /** * Non-member UnicodeString swap function. * @param s1 will get s2's contents and state * @param s2 will get s1's contents and state - * @draft ICU 56 + * @stable ICU 56 */ friend U_COMMON_API inline void U_EXPORT2 swap(UnicodeString &s1, UnicodeString &s2) U_NOEXCEPT { @@ -3212,17 +3213,15 @@ class U_COMMON_API UnicodeString : public Replaceable */ UnicodeString(const UnicodeString& that); -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move constructor, might leave src in bogus state. * This string will have the same contents and state that the source string had. * @param src source string - * @draft ICU 56 + * @stable ICU 56 */ UnicodeString(UnicodeString &&src) U_NOEXCEPT; #endif -#endif /* U_HIDE_DRAFT_API */ /** * 'Substring' constructor from tail of source string. @@ -3277,7 +3276,7 @@ class U_COMMON_API UnicodeString : public Replaceable * @see toUTF8String * @stable ICU 4.2 */ - static UnicodeString fromUTF8(const StringPiece &utf8); + static UnicodeString fromUTF8(StringPiece utf8); /** * Create a UnicodeString from a UTF-32 string. @@ -3392,7 +3391,7 @@ class U_COMMON_API UnicodeString : public Replaceable private: // For char* constructors. Could be made public. - UnicodeString &setToUTF8(const StringPiece &utf8); + UnicodeString &setToUTF8(StringPiece utf8); // For extract(char*). // We could make a toUTF8(target, capacity, errorCode) public but not // this version: New API will be cleaner if we make callers create substrings @@ -3617,7 +3616,6 @@ class U_COMMON_API UnicodeString : public Replaceable */ US_STACKBUF_SIZE=(int32_t)(UNISTR_OBJECT_SIZE-sizeof(void *)-2)/U_SIZEOF_UCHAR, kInvalidUChar=0xffff, // U+FFFF returned by charAt(invalid index) - kGrowSize=128, // grow size for this buffer kInvalidHashCode=0, // invalid hash code kEmptyHashCode=1, // hash code for empty string diff --git a/deps/icu-small/source/common/unicode/unorm.h b/deps/icu-small/source/common/unicode/unorm.h index ab3e34e84b3add..f527c263f0298a 100644 --- a/deps/icu-small/source/common/unicode/unorm.h +++ b/deps/icu-small/source/common/unicode/unorm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (c) 1996-2016, International Business Machines Corporation @@ -22,8 +24,6 @@ #include "unicode/uiter.h" #include "unicode/unorm2.h" -#ifndef U_HIDE_DEPRECATED_API - /** * \file * \brief C API: Unicode Normalization @@ -129,6 +129,8 @@ * For more usage examples, see the Unicode Standard Annex. */ +// Do not conditionalize the following enum with #ifndef U_HIDE_DEPRECATED_API, +// it is needed for layout of Normalizer object. /** * Constants for normalization modes. * @deprecated ICU 56 Use unorm2.h instead. @@ -153,6 +155,8 @@ typedef enum { UNORM_MODE_COUNT } UNormalizationMode; +#ifndef U_HIDE_DEPRECATED_API + /** * Constants for options flags for normalization. * Use 0 for default options, diff --git a/deps/icu-small/source/common/unicode/unorm2.h b/deps/icu-small/source/common/unicode/unorm2.h index b557d6a3ec2ebf..56e99b2a22b413 100644 --- a/deps/icu-small/source/common/unicode/unorm2.h +++ b/deps/icu-small/source/common/unicode/unorm2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uobject.h b/deps/icu-small/source/common/unicode/uobject.h index cdd14f42accb7e..ec231ee2c6bce7 100644 --- a/deps/icu-small/source/common/unicode/uobject.h +++ b/deps/icu-small/source/common/unicode/uobject.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -30,10 +32,10 @@ * Define this to define the throw() specification so * certain functions do not throw any exceptions * - * UMemory operator new methods should have the throw() specification - * appended to them, so that the compiler adds the additional NULL check - * before calling constructors. Without, if operator new returns NULL the - * constructor is still called, and if the constructor references member + * UMemory operator new methods should have the throw() specification + * appended to them, so that the compiler adds the additional NULL check + * before calling constructors. Without, if operator new returns NULL the + * constructor is still called, and if the constructor references member * data, (which it typically does), the result is a segmentation violation. * * @stable ICU 4.2 @@ -111,7 +113,7 @@ class U_COMMON_API UMemory { public: /* test versions for debugging shaper heap memory problems */ -#ifdef SHAPER_MEMORY_DEBUG +#ifdef SHAPER_MEMORY_DEBUG static void * NewArray(int size, int count); static void * GrowArray(void * array, int newSize ); static void FreeArray(void * array ); @@ -170,19 +172,19 @@ class U_COMMON_API UMemory { #if U_HAVE_DEBUG_LOCATION_NEW /** * This method overrides the MFC debug version of the operator new - * + * * @param size The requested memory size * @param file The file where the allocation was requested - * @param line The line where the allocation was requested - */ + * @param line The line where the allocation was requested + */ static void * U_EXPORT2 operator new(size_t size, const char* file, int line) U_NO_THROW; /** * This method provides a matching delete for the MFC debug new - * + * * @param p The pointer to the allocated memory * @param file The file where the allocation was requested - * @param line The line where the allocation was requested - */ + * @param line The line where the allocation was requested + */ static void U_EXPORT2 operator delete(void* p, const char* file, int line) U_NO_THROW; #endif /* U_HAVE_DEBUG_LOCATION_NEW */ #endif /* U_OVERRIDE_CXX_ALLOCATION */ diff --git a/deps/icu-small/source/common/unicode/urename.h b/deps/icu-small/source/common/unicode/urename.h index 627ffa9bdc46df..b220a546975e47 100644 --- a/deps/icu-small/source/common/unicode/urename.h +++ b/deps/icu-small/source/common/unicode/urename.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2002-2016, International Business Machines @@ -474,6 +476,9 @@ #define ubidi_setReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingOptions) #define ubidi_writeReordered U_ICU_ENTRY_POINT_RENAME(ubidi_writeReordered) #define ubidi_writeReverse U_ICU_ENTRY_POINT_RENAME(ubidi_writeReverse) +#define ubiditransform_close U_ICU_ENTRY_POINT_RENAME(ubiditransform_close) +#define ubiditransform_open U_ICU_ENTRY_POINT_RENAME(ubiditransform_open) +#define ubiditransform_transform U_ICU_ENTRY_POINT_RENAME(ubiditransform_transform) #define ublock_getCode U_ICU_ENTRY_POINT_RENAME(ublock_getCode) #define ubrk_close U_ICU_ENTRY_POINT_RENAME(ubrk_close) #define ubrk_countAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_countAvailable) @@ -1013,6 +1018,7 @@ #define ulist_getListSize U_ICU_ENTRY_POINT_RENAME(ulist_getListSize) #define ulist_getNext U_ICU_ENTRY_POINT_RENAME(ulist_getNext) #define ulist_next_keyword_value U_ICU_ENTRY_POINT_RENAME(ulist_next_keyword_value) +#define ulist_removeString U_ICU_ENTRY_POINT_RENAME(ulist_removeString) #define ulist_resetList U_ICU_ENTRY_POINT_RENAME(ulist_resetList) #define ulist_reset_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_reset_keyword_values_iterator) #define ulistfmt_close U_ICU_ENTRY_POINT_RENAME(ulistfmt_close) @@ -1355,6 +1361,7 @@ #define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper) #define uprv_trunc U_ICU_ENTRY_POINT_RENAME(uprv_trunc) #define uprv_tzname U_ICU_ENTRY_POINT_RENAME(uprv_tzname) +#define uprv_tzname_clear_cache U_ICU_ENTRY_POINT_RENAME(uprv_tzname_clear_cache) #define uprv_tzset U_ICU_ENTRY_POINT_RENAME(uprv_tzset) #define uprv_uint16Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint16Comparator) #define uprv_uint32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint32Comparator) @@ -1456,10 +1463,7 @@ #define ures_countArrayItems U_ICU_ENTRY_POINT_RENAME(ures_countArrayItems) #define ures_findResource U_ICU_ENTRY_POINT_RENAME(ures_findResource) #define ures_findSubResource U_ICU_ENTRY_POINT_RENAME(ures_findSubResource) -#define ures_getAllArrayItems U_ICU_ENTRY_POINT_RENAME(ures_getAllArrayItems) -#define ures_getAllArrayItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllArrayItemsWithFallback) -#define ures_getAllTableItems U_ICU_ENTRY_POINT_RENAME(ures_getAllTableItems) -#define ures_getAllTableItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllTableItemsWithFallback) +#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback) #define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary) #define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex) #define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey) @@ -1607,13 +1611,20 @@ #define uspoof_areConfusableUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUTF8) #define uspoof_areConfusableUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUnicodeString) #define uspoof_check U_ICU_ENTRY_POINT_RENAME(uspoof_check) +#define uspoof_check2 U_ICU_ENTRY_POINT_RENAME(uspoof_check2) +#define uspoof_check2UTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_check2UTF8) +#define uspoof_check2UnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_check2UnicodeString) #define uspoof_checkUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_checkUTF8) #define uspoof_checkUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_checkUnicodeString) #define uspoof_clone U_ICU_ENTRY_POINT_RENAME(uspoof_clone) #define uspoof_close U_ICU_ENTRY_POINT_RENAME(uspoof_close) +#define uspoof_closeCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_closeCheckResult) #define uspoof_getAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedChars) #define uspoof_getAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedLocales) #define uspoof_getAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedUnicodeSet) +#define uspoof_getCheckResultChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultChecks) +#define uspoof_getCheckResultNumerics U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultNumerics) +#define uspoof_getCheckResultRestrictionLevel U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultRestrictionLevel) #define uspoof_getChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getChecks) #define uspoof_getInclusionSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionSet) #define uspoof_getInclusionUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionUnicodeSet) @@ -1625,6 +1636,7 @@ #define uspoof_getSkeletonUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUnicodeString) #define uspoof_internalInitStatics U_ICU_ENTRY_POINT_RENAME(uspoof_internalInitStatics) #define uspoof_open U_ICU_ENTRY_POINT_RENAME(uspoof_open) +#define uspoof_openCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_openCheckResult) #define uspoof_openFromSerialized U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSerialized) #define uspoof_openFromSource U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSource) #define uspoof_serialize U_ICU_ENTRY_POINT_RENAME(uspoof_serialize) diff --git a/deps/icu-small/source/common/unicode/urep.h b/deps/icu-small/source/common/unicode/urep.h index 3d1b0b6902e386..b559b2485fccbc 100644 --- a/deps/icu-small/source/common/unicode/urep.h +++ b/deps/icu-small/source/common/unicode/urep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2010, International Business Machines @@ -86,7 +88,7 @@ typedef struct UReplaceableCallbacks { */ UChar32 (*char32At)(const UReplaceable* rep, int32_t offset); - + /** * Function pointer that replaces text between start and limit in * this text with the given text. Attributes (out of band info) @@ -108,7 +110,7 @@ typedef struct UReplaceableCallbacks { int32_t limit, const UChar* text, int32_t textLength); - + /** * Function pointer that copies the characters in the range * [start, limit) into the array dst. @@ -146,7 +148,7 @@ typedef struct UReplaceableCallbacks { void (*copy)(UReplaceable* rep, int32_t start, int32_t limit, - int32_t dest); + int32_t dest); } UReplaceableCallbacks; diff --git a/deps/icu-small/source/common/unicode/ures.h b/deps/icu-small/source/common/unicode/ures.h index 190a5050aefc4c..620d9268aaceeb 100644 --- a/deps/icu-small/source/common/unicode/ures.h +++ b/deps/icu-small/source/common/unicode/ures.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -120,9 +122,13 @@ typedef enum { RES_INT_VECTOR=URES_INT_VECTOR, /** @deprecated ICU 2.6 Not used. */ RES_RESERVED=15, -#endif /* U_HIDE_DEPRECATED_API */ + /** + * One more than the highest normal UResType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ URES_LIMIT = 16 +#endif // U_HIDE_DEPRECATED_API } UResType; /* diff --git a/deps/icu-small/source/common/unicode/uscript.h b/deps/icu-small/source/common/unicode/uscript.h index 7615a49998df89..a20cd157a45507 100644 --- a/deps/icu-small/source/common/unicode/uscript.h +++ b/deps/icu-small/source/common/unicode/uscript.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** - * Copyright (C) 1997-2015, International Business Machines + * Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -32,13 +34,13 @@ * See UAX #24 Unicode Script Property (http://www.unicode.org/reports/tr24/) * and http://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt . * - * Starting with ICU 3.6, constants for most ISO 15924 script codes + * In addition, constants for many ISO 15924 script codes * are included, for use with language tags, CLDR data, and similar. * Some of those codes are not used in the Unicode Character Database (UCD). * For example, there are no characters that have a UCD script property value of * Hans or Hant. All Han ideographs have the Hani script property value in Unicode. * - * Private-use codes Qaaa..Qabx are not included. + * Private-use codes Qaaa..Qabx are not included, except as used in the UCD or in CLDR. * * Starting with ICU 55, script codes are only added when their scripts * have been or will certainly be encoded in Unicode, @@ -424,18 +426,33 @@ typedef enum UScriptCode { /** @stable ICU 54 */ USCRIPT_SIDDHAM = 166,/* Sidd */ - /** - * One higher than the last script code constant. - * This value increases as constants for script codes are added. - * - * There are constants for Unicode 7 script property values. - * There are constants for ISO 15924 script codes assigned on or before 2013-10-12. - * There are no constants for private use codes from Qaaa - Qabx - * except as used in the UCD. - * - * @stable ICU 2.2 - */ - USCRIPT_CODE_LIMIT = 167 + /** @stable ICU 58 */ + USCRIPT_ADLAM = 167,/* Adlm */ + /** @stable ICU 58 */ + USCRIPT_BHAIKSUKI = 168,/* Bhks */ + /** @stable ICU 58 */ + USCRIPT_MARCHEN = 169,/* Marc */ + /** @stable ICU 58 */ + USCRIPT_NEWA = 170,/* Newa */ + /** @stable ICU 58 */ + USCRIPT_OSAGE = 171,/* Osge */ + + /** @stable ICU 58 */ + USCRIPT_HAN_WITH_BOPOMOFO = 172,/* Hanb */ + /** @stable ICU 58 */ + USCRIPT_JAMO = 173,/* Jamo */ + /** @stable ICU 58 */ + USCRIPT_SYMBOLS_EMOJI = 174,/* Zsye */ + +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UScriptCode value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SCRIPT). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + USCRIPT_CODE_LIMIT = 175 +#endif // U_HIDE_DEPRECATED_API } UScriptCode; /** @@ -503,9 +520,6 @@ uscript_getScript(UChar32 codepoint, UErrorCode *err); * * Some characters are commonly used in multiple scripts. * For more information, see UAX #24: http://www.unicode.org/reports/tr24/. - * - * The Script_Extensions property is provisional. It may be modified or removed - * in future versions of the Unicode Standard, and thus in ICU. * @param c code point * @param sc script code * @return TRUE if sc is in Script_Extensions(c) @@ -532,8 +546,6 @@ uscript_hasScript(UChar32 c, UScriptCode sc); * U_BUFFER_OVERFLOW_ERROR is set and the number of Script_Extensions is returned. * (Usual ICU buffer handling behavior.) * - * The Script_Extensions property is provisional. It may be modified or removed - * in future versions of the Unicode Standard, and thus in ICU. * @param c code point * @param scripts output script code array * @param capacity capacity of the scripts array diff --git a/deps/icu-small/source/common/unicode/uset.h b/deps/icu-small/source/common/unicode/uset.h index 1db3d3db59e938..8baabbe96b42ba 100644 --- a/deps/icu-small/source/common/unicode/uset.h +++ b/deps/icu-small/source/common/unicode/uset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -51,7 +53,7 @@ enum { * Ignore white space within patterns unless quoted or escaped. * @stable ICU 2.4 */ - USET_IGNORE_SPACE = 1, + USET_IGNORE_SPACE = 1, /** * Enable case insensitive matching. E.g., "[ab]" with this flag @@ -79,7 +81,7 @@ enum { * * @stable ICU 2.4 */ - USET_CASE_INSENSITIVE = 2, + USET_CASE_INSENSITIVE = 2, /** * Enable case insensitive matching. E.g., "[ab]" with this flag @@ -196,11 +198,13 @@ typedef enum USetSpanCondition { * @stable ICU 3.8 */ USET_SPAN_SIMPLE = 2, +#ifndef U_HIDE_DEPRECATED_API /** * One more than the last span condition. - * @stable ICU 3.8 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ USET_SPAN_CONDITION_COUNT +#endif // U_HIDE_DEPRECATED_API } USetSpanCondition; enum { @@ -257,7 +261,7 @@ uset_openEmpty(void); /** * Creates a USet object that contains the range of characters - * start..end, inclusive. If start > end + * start..end, inclusive. If start > end * then an empty set is created (same as using uset_openEmpty()). * @param start first character of the range, inclusive * @param end last character of the range, inclusive @@ -394,11 +398,11 @@ uset_set(USet* set, /** * Modifies the set to represent the set specified by the given - * pattern. See the UnicodeSet class description for the syntax of + * pattern. See the UnicodeSet class description for the syntax of * the pattern language. See also the User Guide chapter about UnicodeSet. * Empties the set passed before applying the pattern. * A frozen set will not be modified. - * @param set The set to which the pattern is to be applied. + * @param set The set to which the pattern is to be applied. * @param pattern A pointer to UChar string specifying what characters are in the set. * The character at pattern[0] must be a '['. * @param patternLength The length of the UChar string. -1 if NUL terminated. @@ -406,14 +410,14 @@ uset_set(USet* set, * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. * @param status Returns an error if the pattern cannot be parsed. * @return Upon successful parse, the value is either - * the index of the character after the closing ']' + * the index of the character after the closing ']' * of the parsed pattern. - * If the status code indicates failure, then the return value + * If the status code indicates failure, then the return value * is the index of the error in the source. * * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uset_applyPattern(USet *set, const UChar *pattern, int32_t patternLength, uint32_t options, diff --git a/deps/icu-small/source/common/unicode/usetiter.h b/deps/icu-small/source/common/unicode/usetiter.h index a0aae22115238d..26591d0439d061 100644 --- a/deps/icu-small/source/common/unicode/usetiter.h +++ b/deps/icu-small/source/common/unicode/usetiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines @@ -12,7 +14,7 @@ #include "unicode/unistr.h" /** - * \file + * \file * \brief C++ API: UnicodeSetIterator iterates over the contents of a UnicodeSet. */ @@ -160,14 +162,14 @@ class U_COMMON_API UnicodeSetIterator : public UObject { * Ownership of the returned string remains with the iterator. * The string is guaranteed to remain valid only until the iterator is * advanced to the next item, or until the iterator is deleted. - * + * * @stable ICU 2.4 */ const UnicodeString& getString(); /** - * Advances the iteration position to the next element in the set, - * which can be either a single code point or a string. + * Advances the iteration position to the next element in the set, + * which can be either a single code point or a string. * If there are no more elements in the set, return false. * *

diff --git a/deps/icu-small/source/common/unicode/ushape.h b/deps/icu-small/source/common/unicode/ushape.h index dcd8bfe6791f29..0ea323169a0ac4 100644 --- a/deps/icu-small/source/common/unicode/ushape.h +++ b/deps/icu-small/source/common/unicode/ushape.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -22,7 +24,7 @@ /** * \file * \brief C API: Arabic shaping - * + * */ /** @@ -115,7 +117,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, * This option is an alias to U_SHAPE_LENGTH_GROW_SHRINK * @stable ICU 4.2 */ -#define U_SHAPE_LAMALEF_RESIZE 0 +#define U_SHAPE_LAMALEF_RESIZE 0 /** * Memory option: the result must have the same length as the source. @@ -131,7 +133,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_NEAR * @stable ICU 4.2 */ -#define U_SHAPE_LAMALEF_NEAR 1 +#define U_SHAPE_LAMALEF_NEAR 1 /** * Memory option: the result must have the same length as the source. @@ -147,7 +149,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_END * @stable ICU 4.2 */ -#define U_SHAPE_LAMALEF_END 2 +#define U_SHAPE_LAMALEF_END 2 /** * Memory option: the result must have the same length as the source. @@ -163,7 +165,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_BEGINNING * @stable ICU 4.2 */ -#define U_SHAPE_LAMALEF_BEGIN 3 +#define U_SHAPE_LAMALEF_BEGIN 3 /** @@ -172,14 +174,14 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, * If there is no space at end, use spaces at beginning of the buffer. If there * is no space at beginning of the buffer, use spaces at the near (i.e. the space * after the LAMALEF character). - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) + * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) * will be set in pErrorCode * - * Deshaping Mode: Perform the same function as the flag equals U_SHAPE_LAMALEF_END. + * Deshaping Mode: Perform the same function as the flag equals U_SHAPE_LAMALEF_END. * Affects: LamAlef options * @stable ICU 4.2 */ -#define U_SHAPE_LAMALEF_AUTO 0x10000 +#define U_SHAPE_LAMALEF_AUTO 0x10000 /** Bit mask for memory options. @stable ICU 2.0 */ #define U_SHAPE_LENGTH_MASK 0x10003 /* Changed old value 3 */ @@ -299,7 +301,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, /** Bit mask for digit type options. @stable ICU 2.0 */ #define U_SHAPE_DIGIT_TYPE_MASK 0x300 /* I need to change this from 0x3f00 to 0x300 */ -/** +/** * Tashkeel aggregation option: * Replaces any combination of U+0651 with one of * U+064C, U+064D, U+064E, U+064F, U+0650 with @@ -312,28 +314,28 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, /** Bit mask for tashkeel aggregation. @stable ICU 3.6 */ #define U_SHAPE_AGGREGATE_TASHKEEL_MASK 0x4000 -/** +/** * Presentation form option: * Don't replace Arabic Presentation Forms-A and Arabic Presentation Forms-B * characters with 0+06xx characters, before shaping. * @stable ICU 3.6 */ #define U_SHAPE_PRESERVE_PRESENTATION 0x8000 -/** Presentation form option: - * Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with +/** Presentation form option: + * Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with * their unshaped correspondants in range 0+06xx, before shaping. - * @stable ICU 3.6 + * @stable ICU 3.6 */ #define U_SHAPE_PRESERVE_PRESENTATION_NOOP 0 /** Bit mask for preserve presentation form. @stable ICU 3.6 */ #define U_SHAPE_PRESERVE_PRESENTATION_MASK 0x8000 -/* Seen Tail option */ +/* Seen Tail option */ /** * Memory option: the result must have the same length as the source. - * Shaping mode: The SEEN family character will expand into two characters using space near + * Shaping mode: The SEEN family character will expand into two characters using space near * the SEEN family character(i.e. the space after the character). - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) + * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) * will be set in pErrorCode * * De-shaping mode: Any Seen character followed by Tail character will be @@ -344,17 +346,17 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, #define U_SHAPE_SEEN_TWOCELL_NEAR 0x200000 /** - * Bit mask for Seen memory options. + * Bit mask for Seen memory options. * @stable ICU 4.2 */ #define U_SHAPE_SEEN_MASK 0x700000 -/* YehHamza option */ +/* YehHamza option */ /** * Memory option: the result must have the same length as the source. - * Shaping mode: The YEHHAMZA character will expand into two characters using space near it + * Shaping mode: The YEHHAMZA character will expand into two characters using space near it * (i.e. the space after the character - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) + * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) * will be set in pErrorCode * * De-shaping mode: Any Yeh (final or isolated) character followed by Hamza character will be @@ -366,15 +368,15 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, /** - * Bit mask for YehHamza memory options. + * Bit mask for YehHamza memory options. * @stable ICU 4.2 */ #define U_SHAPE_YEHHAMZA_MASK 0x3800000 -/* New Tashkeel options */ +/* New Tashkeel options */ /** * Memory option: the result must have the same length as the source. - * Shaping mode: Tashkeel characters will be replaced by spaces. + * Shaping mode: Tashkeel characters will be replaced by spaces. * Spaces will be placed at beginning of the buffer * * De-shaping mode: N/A @@ -385,7 +387,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, /** * Memory option: the result must have the same length as the source. - * Shaping mode: Tashkeel characters will be replaced by spaces. + * Shaping mode: Tashkeel characters will be replaced by spaces. * Spaces will be placed at end of the buffer * * De-shaping mode: N/A @@ -396,8 +398,8 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, /** * Memory option: allow the result to have a different length than the source. - * Shaping mode: Tashkeel characters will be removed, buffer length will shrink. - * De-shaping mode: N/A + * Shaping mode: Tashkeel characters will be removed, buffer length will shrink. + * De-shaping mode: N/A * * Affect: Tashkeel options * @stable ICU 4.2 @@ -415,46 +417,46 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, */ #define U_SHAPE_TASHKEEL_REPLACE_BY_TATWEEL 0xC0000 -/** - * Bit mask for Tashkeel replacement with Space or Tatweel memory options. +/** + * Bit mask for Tashkeel replacement with Space or Tatweel memory options. * @stable ICU 4.2 */ #define U_SHAPE_TASHKEEL_MASK 0xE0000 -/* Space location Control options */ +/* Space location Control options */ /** * This option affect the meaning of BEGIN and END options. if this option is not used the default - * for BEGIN and END will be as following: + * for BEGIN and END will be as following: * The Default (for both Visual LTR, Visual RTL and Logical Text) * 1. BEGIN always refers to the start address of physical memory. * 2. END always refers to the end address of physical memory. * - * If this option is used it will swap the meaning of BEGIN and END only for Visual LTR text. + * If this option is used it will swap the meaning of BEGIN and END only for Visual LTR text. * * The effect on BEGIN and END Memory Options will be as following: * A. BEGIN For Visual LTR text: This will be the beginning (right side) of the visual text( - * corresponding to the physical memory address end for Visual LTR text, Same as END in + * corresponding to the physical memory address end for Visual LTR text, Same as END in * default behavior) - * B. BEGIN For Logical text: Same as BEGIN in default behavior. + * B. BEGIN For Logical text: Same as BEGIN in default behavior. * C. END For Visual LTR text: This will be the end (left side) of the visual text (corresponding * to the physical memory address beginning for Visual LTR text, Same as BEGIN in default behavior. - * D. END For Logical text: Same as END in default behavior). + * D. END For Logical text: Same as END in default behavior). * Affects: All LamAlef BEGIN, END and AUTO options. * @stable ICU 4.2 */ #define U_SHAPE_SPACES_RELATIVE_TO_TEXT_BEGIN_END 0x4000000 /** - * Bit mask for swapping BEGIN and END for Visual LTR text + * Bit mask for swapping BEGIN and END for Visual LTR text * @stable ICU 4.2 */ #define U_SHAPE_SPACES_RELATIVE_TO_TEXT_MASK 0x4000000 /** - * If this option is used, shaping will use the new Unicode code point for TAIL (i.e. 0xFE73). + * If this option is used, shaping will use the new Unicode code point for TAIL (i.e. 0xFE73). * If this option is not specified (Default), old unofficial Unicode TAIL code point is used (i.e. 0x200B) - * De-shaping will not use this option as it will always search for both the new Unicode code point for the + * De-shaping will not use this option as it will always search for both the new Unicode code point for the * TAIL (i.e. 0xFE73) or the old unofficial Unicode TAIL code point (i.e. 0x200B) and de-shape the * Seen-Family letter accordingly. * @@ -466,7 +468,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, #define U_SHAPE_TAIL_NEW_UNICODE 0x8000000 /** - * Bit mask for new Unicode Tail option + * Bit mask for new Unicode Tail option * @stable ICU 4.8 */ #define U_SHAPE_TAIL_TYPE_MASK 0x8000000 diff --git a/deps/icu-small/source/common/unicode/usprep.h b/deps/icu-small/source/common/unicode/usprep.h index 767279857adb47..5bd837e046309d 100644 --- a/deps/icu-small/source/common/unicode/usprep.h +++ b/deps/icu-small/source/common/unicode/usprep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -18,7 +20,7 @@ #define __USPREP_H__ /** - * \file + * \file * \brief C API: Implements the StringPrep algorithm. */ @@ -33,14 +35,14 @@ * Unicode Strings are prepared. Each profiles contains tables which describe * how a code point should be treated. The tables are broadly classied into *

    - *
  • Unassinged Table: Contains code points that are unassigned - * in the Unicode Version supported by StringPrep. Currently + *
  • Unassinged Table: Contains code points that are unassigned + * in the Unicode Version supported by StringPrep. Currently * RFC 3454 supports Unicode 3.2.
  • *
  • Prohibited Table: Contains code points that are prohibted from * the output of the StringPrep processing function.
  • *
  • Mapping Table: Contains code ponts that are deleted from the output or case mapped.
  • *
- * + * * The procedure for preparing Unicode strings: *
    *
  1. Map: For each character in the input, check if it has a mapping @@ -68,17 +70,17 @@ typedef struct UStringPrepProfile UStringPrepProfile; -/** +/** * Option to prohibit processing of unassigned code points in the input - * + * * @see usprep_prepare * @stable ICU 2.8 */ #define USPREP_DEFAULT 0x0000 -/** +/** * Option to allow processing of unassigned code points in the input - * + * * @see usprep_prepare * @stable ICU 2.8 */ @@ -180,7 +182,7 @@ typedef enum UStringPrepProfileType { * @stable ICU 2.8 */ U_STABLE UStringPrepProfile* U_EXPORT2 -usprep_open(const char* path, +usprep_open(const char* path, const char* fileName, UErrorCode* status); @@ -231,7 +233,7 @@ U_NAMESPACE_END * checks for prohited and BiDi characters in the order defined by RFC 3454 * depending on the options specified in the profile. * - * @param prep The profile to use + * @param prep The profile to use * @param src Pointer to UChar buffer containing the string to prepare * @param srcLength Number of characters in the source string * @param dest Pointer to the destination buffer to receive the output @@ -240,10 +242,10 @@ U_NAMESPACE_END * * - USPREP_DEFAULT Prohibit processing of unassigned code points in the input * - * - USPREP_ALLOW_UNASSIGNED Treat the unassigned code points are in the input + * - USPREP_ALLOW_UNASSIGNED Treat the unassigned code points are in the input * as normal Unicode code points. * - * @param parseError Pointer to UParseError struct to receive information on position + * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. * U_INVALID_CHAR_FOUND if src contains @@ -257,7 +259,7 @@ U_NAMESPACE_END U_STABLE int32_t U_EXPORT2 usprep_prepare( const UStringPrepProfile* prep, - const UChar* src, int32_t srcLength, + const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, diff --git a/deps/icu-small/source/common/unicode/ustring.h b/deps/icu-small/source/common/unicode/ustring.h index 10080350d66144..e62fef534856ec 100644 --- a/deps/icu-small/source/common/unicode/ustring.h +++ b/deps/icu-small/source/common/unicode/ustring.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2014, International Business Machines @@ -22,7 +24,7 @@ /** * \def UBRK_TYPEDEF_UBREAK_ITERATOR - * @internal + * @internal */ #ifndef UBRK_TYPEDEF_UBREAK_ITERATOR @@ -139,11 +141,11 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number); * @stable ICU 2.0 */ U_STABLE UChar* U_EXPORT2 -u_strcat(UChar *dst, +u_strcat(UChar *dst, const UChar *src); /** - * Concatenate two ustrings. + * Concatenate two ustrings. * Appends at most n characters from src to dst. * Adds a terminating NUL. * If src is too long, then only n-1 characters will be copied @@ -157,8 +159,8 @@ u_strcat(UChar *dst, * @stable ICU 2.0 */ U_STABLE UChar* U_EXPORT2 -u_strncat(UChar *dst, - const UChar *src, +u_strncat(UChar *dst, + const UChar *src, int32_t n); /** @@ -408,7 +410,7 @@ u_strspn(const UChar *string, const UChar *matchSet); * @stable ICU 2.0 */ U_STABLE UChar * U_EXPORT2 -u_strtok_r(UChar *src, +u_strtok_r(UChar *src, const UChar *delim, UChar **saveState); @@ -423,7 +425,7 @@ u_strtok_r(UChar *src, * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 -u_strcmp(const UChar *s1, +u_strcmp(const UChar *s1, const UChar *s2); /** @@ -552,7 +554,7 @@ u_strCaseCompare(const UChar *s1, int32_t length1, UErrorCode *pErrorCode); /** - * Compare two ustrings for bitwise equality. + * Compare two ustrings for bitwise equality. * Compares at most n characters. * * @param ucs1 A string to compare (can be NULL/invalid if n<=0). @@ -564,8 +566,8 @@ u_strCaseCompare(const UChar *s1, int32_t length1, * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 -u_strncmp(const UChar *ucs1, - const UChar *ucs2, +u_strncmp(const UChar *ucs1, + const UChar *ucs2, int32_t n); /** @@ -663,7 +665,7 @@ u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options) * @stable ICU 2.0 */ U_STABLE UChar* U_EXPORT2 -u_strcpy(UChar *dst, +u_strcpy(UChar *dst, const UChar *src); /** @@ -678,8 +680,8 @@ u_strcpy(UChar *dst, * @stable ICU 2.0 */ U_STABLE UChar* U_EXPORT2 -u_strncpy(UChar *dst, - const UChar *src, +u_strncpy(UChar *dst, + const UChar *src, int32_t n); #if !UCONFIG_NO_CONVERSION @@ -912,7 +914,7 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11); * U_STRING_DECL(ustringVar2, "jumps 5%", 8); * static UBool didInit=FALSE; - * + * * int32_t function() { * if(!didInit) { * U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11); @@ -922,16 +924,16 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * return u_strcmp(ustringVar1, ustringVar2); * } *
- * - * Note that the macros will NOT consistently work if their argument is another #define. + * + * Note that the macros will NOT consistently work if their argument is another #define. * The following will not work on all platforms, don't use it. - * + * *
  *     #define GLUCK "Mr. Gluck"
  *     U_STRING_DECL(var, GLUCK, 9)
  *     U_STRING_INIT(var, GLUCK, 9)
  * 
- * + * * Instead, use the string literal "Mr. Gluck" as the argument to both macro * calls. * @@ -1198,11 +1200,11 @@ u_strFoldCase(UChar *dest, int32_t destCapacity, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of wchar_t's). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1212,10 +1214,10 @@ u_strFoldCase(UChar *dest, int32_t destCapacity, * @stable ICU 2.0 */ U_STABLE wchar_t* U_EXPORT2 -u_strToWCS(wchar_t *dest, +u_strToWCS(wchar_t *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode); /** @@ -1227,11 +1229,11 @@ u_strToWCS(wchar_t *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1242,7 +1244,7 @@ u_strToWCS(wchar_t *dest, */ U_STABLE UChar* U_EXPORT2 u_strFromWCS(UChar *dest, - int32_t destCapacity, + int32_t destCapacity, int32_t *pDestLength, const wchar_t *src, int32_t srcLength, @@ -1256,11 +1258,11 @@ u_strFromWCS(UChar *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of chars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1271,11 +1273,11 @@ u_strFromWCS(UChar *dest, * @see u_strToUTF8WithSub * @see u_strFromUTF8 */ -U_STABLE char* U_EXPORT2 -u_strToUTF8(char *dest, +U_STABLE char* U_EXPORT2 +u_strToUTF8(char *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode); @@ -1286,11 +1288,11 @@ u_strToUTF8(char *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1302,10 +1304,10 @@ u_strToUTF8(char *dest, * @see u_strFromUTF8Lenient */ U_STABLE UChar* U_EXPORT2 -u_strFromUTF8(UChar *dest, +u_strFromUTF8(UChar *dest, int32_t destCapacity, int32_t *pDestLength, - const char *src, + const char *src, int32_t srcLength, UErrorCode *pErrorCode); @@ -1319,11 +1321,11 @@ u_strFromUTF8(UChar *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of chars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1363,11 +1365,11 @@ u_strToUTF8WithSub(char *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * @param src The original source string * @param srcLength The length of the original string. If -1, then src must be zero-terminated. @@ -1425,13 +1427,13 @@ u_strFromUTF8WithSub(UChar *dest, * @param dest A buffer for the result string. The result will be zero-terminated if * the buffer is large enough. * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the + * dest may be NULL and the function will only return the length of the * result without writing any of the result string (pre-flighting). * Unlike for other ICU functions, if srcLength>=0 then it * must be destCapacity>=srcLength. - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of * all the input units, even in case of a buffer overflow. * Unlike for other ICU functions, if srcLength>=0 but * destCapacitychunkOffset <= (ut)->nativeIndexingLimit? \ (ut)->chunkNativeStart+(ut)->chunkOffset : \ - (ut)->pFuncs->mapOffsetToNative(ut)) + (ut)->pFuncs->mapOffsetToNative(ut)) /** * inline version of utext_setNativeIndex(), for performance-critical situations. @@ -880,7 +882,7 @@ utext_replace(UText *ut, * copied or moved. * @param move If TRUE, then the substring is moved, not copied/duplicated. * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION - * + * * @stable ICU 3.4 */ U_STABLE void U_EXPORT2 @@ -946,7 +948,7 @@ enum { * There is meta data associated with the text. * @see Replaceable::hasMetaData() * @stable ICU 3.4 - */ + */ UTEXT_PROVIDER_HAS_META_DATA = 4, /** * Text provider owns the text storage. @@ -971,7 +973,7 @@ enum { * and be prepared to handle failures. * * A shallow clone replicates only the UText data structures; it does not make - * a copy of the underlying text. Shallow clones can be used as an efficient way to + * a copy of the underlying text. Shallow clones can be used as an efficient way to * have multiple iterators active in a single text string that is not being * modified. * @@ -1180,7 +1182,7 @@ UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex); * Function type declaration for UText.utextClose(). * * A Text Provider close function is only required for provider types that make - * allocations in their open function (or other functions) that must be + * allocations in their open function (or other functions) that must be * cleaned when the UText is closed. * * The allocation of the UText struct itself and any "extra" storage @@ -1309,7 +1311,7 @@ struct UTextFuncs { * @internal */ UTextClose *spare1; - + /** * (private) Spare function pointer * @internal @@ -1378,9 +1380,9 @@ struct UText { * @stable ICU 3.4 */ int32_t sizeOfStruct; - + /* ------ 16 byte alignment boundary ----------- */ - + /** * (protected) Native index of the first character position following @@ -1405,7 +1407,7 @@ struct UText { int32_t nativeIndexingLimit; /* ---- 16 byte alignment boundary------ */ - + /** * (protected) Native index of the first character in the text chunk. * @stable ICU 3.6 @@ -1426,7 +1428,7 @@ struct UText { int32_t chunkLength; /* ---- 16 byte alignment boundary-- */ - + /** * (protected) pointer to a chunk of text in UTF-16 format. @@ -1464,7 +1466,7 @@ struct UText { * Not used by UText common code. * @stable ICU 3.6 */ - const void *p; + const void *p; /** * (protected) Pointer fields available for use by the text provider. * Not used by UText common code. @@ -1487,7 +1489,7 @@ struct UText { /* --- 16 byte alignment boundary--- */ - + /** * (protected) Integer field reserved for use by the text provider. diff --git a/deps/icu-small/source/common/unicode/utf.h b/deps/icu-small/source/common/unicode/utf.h index 679e8f6e630e77..ffb094f49fef61 100644 --- a/deps/icu-small/source/common/unicode/utf.h +++ b/deps/icu-small/source/common/unicode/utf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -102,7 +104,7 @@ * * Usage: * ICU coding guidelines for if() statements should be followed when using these macros. - * Compound statements (curly braces {}) must be used for if-else-while... + * Compound statements (curly braces {}) must be used for if-else-while... * bodies and all macro statements should be terminated with semicolon. * * @stable ICU 2.4 @@ -165,7 +167,7 @@ * @stable ICU 2.8 */ #define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff) - + /** * Is this code point a lead surrogate (U+d800..U+dbff)? * @param c 32-bit code point diff --git a/deps/icu-small/source/common/unicode/utf16.h b/deps/icu-small/source/common/unicode/utf16.h index 986b4137170476..6e7d1da79d7dd2 100644 --- a/deps/icu-small/source/common/unicode/utf16.h +++ b/deps/icu-small/source/common/unicode/utf16.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -17,7 +19,7 @@ /** * \file * \brief C API: 16-bit Unicode handling macros - * + * * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings. * * For more information see utf.h and the ICU User Guide Strings chapter @@ -25,7 +27,7 @@ * * Usage: * ICU coding guidelines for if() statements should be followed when using these macros. - * Compound statements (curly braces {}) must be used for if-else-while... + * Compound statements (curly braces {}) must be used for if-else-while... * bodies and all macro statements should be terminated with semicolon. */ diff --git a/deps/icu-small/source/common/unicode/utf32.h b/deps/icu-small/source/common/unicode/utf32.h index bf63e69dba00c7..f93727c109442a 100644 --- a/deps/icu-small/source/common/unicode/utf32.h +++ b/deps/icu-small/source/common/unicode/utf32.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf8.h b/deps/icu-small/source/common/unicode/utf8.h index 94a01342407745..55f7b9d21d862e 100644 --- a/deps/icu-small/source/common/unicode/utf8.h +++ b/deps/icu-small/source/common/unicode/utf8.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -17,7 +19,7 @@ /** * \file * \brief C API: 8-bit Unicode handling macros - * + * * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings. * * For more information see utf.h and the ICU User Guide Strings chapter @@ -25,7 +27,7 @@ * * Usage: * ICU coding guidelines for if() statements should be followed when using these macros. - * Compound statements (curly braces {}) must be used for if-else-while... + * Compound statements (curly braces {}) must be used for if-else-while... * bodies and all macro statements should be terminated with semicolon. */ @@ -51,11 +53,11 @@ * @internal */ #ifdef U_UTF8_IMPL -U_EXPORT const uint8_t +U_EXPORT const uint8_t #elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) U_CFUNC const uint8_t #else -U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ +U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ #endif utf8_countTrailBytes[256]; diff --git a/deps/icu-small/source/common/unicode/utf_old.h b/deps/icu-small/source/common/unicode/utf_old.h index 47dd1da3cc98d8..c7d5145a231cd6 100644 --- a/deps/icu-small/source/common/unicode/utf_old.h +++ b/deps/icu-small/source/common/unicode/utf_old.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -15,12 +17,12 @@ */ /** - * \file + * \file * \brief C API: Deprecated macros for Unicode string handling */ /** - * + * * The macros in utf_old.h are all deprecated and their use discouraged. * Some of the design principles behind the set of UTF macros * have changed or proved impractical. @@ -1166,3 +1168,4 @@ typedef int32_t UTextOffset; #endif /* U_HIDE_DEPRECATED_API */ #endif + diff --git a/deps/icu-small/source/common/unicode/utrace.h b/deps/icu-small/source/common/unicode/utrace.h index 1a51ff9a62d467..c55f8c11233083 100644 --- a/deps/icu-small/source/common/unicode/utrace.h +++ b/deps/icu-small/source/common/unicode/utrace.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -25,15 +27,15 @@ /** * \file - * \brief C API: Definitions for ICU tracing/logging. + * \brief C API: Definitions for ICU tracing/logging. * * This provides API for debugging the internals of ICU without the use of * a traditional debugger. * - * By default, tracing is disabled in ICU. If you need to debug ICU with + * By default, tracing is disabled in ICU. If you need to debug ICU with * tracing, please compile ICU with the --enable-tracing configure option. */ - + U_CDECL_BEGIN /** @@ -64,7 +66,13 @@ typedef enum UTraceFunctionNumber { UTRACE_FUNCTION_START=0, UTRACE_U_INIT=UTRACE_FUNCTION_START, UTRACE_U_CLEANUP, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_FUNCTION_LIMIT, +#endif // U_HIDE_DEPRECATED_API UTRACE_CONVERSION_START=0x1000, UTRACE_UCNV_OPEN=UTRACE_CONVERSION_START, @@ -75,7 +83,13 @@ typedef enum UTraceFunctionNumber { UTRACE_UCNV_FLUSH_CACHE, UTRACE_UCNV_LOAD, UTRACE_UCNV_UNLOAD, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_CONVERSION_LIMIT, +#endif // U_HIDE_DEPRECATED_API UTRACE_COLLATION_START=0x2000, UTRACE_UCOL_OPEN=UTRACE_COLLATION_START, @@ -87,7 +101,13 @@ typedef enum UTraceFunctionNumber { UTRACE_UCOL_STRCOLLITER, UTRACE_UCOL_OPEN_FROM_SHORT_STRING, UTRACE_UCOL_STRCOLLUTF8, /**< @stable ICU 50 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_COLLATION_LIMIT +#endif // U_HIDE_DEPRECATED_API } UTraceFunctionNumber; /** @@ -131,7 +151,7 @@ UTraceEntry(const void *context, int32_t fnNumber); * @stable ICU 2.8 */ typedef void U_CALLCONV -UTraceExit(const void *context, int32_t fnNumber, +UTraceExit(const void *context, int32_t fnNumber, const char *fmt, va_list args); /** @@ -167,11 +187,11 @@ UTraceData(const void *context, int32_t fnNumber, int32_t level, * here will in turn be passed to each of the tracing * functions UTraceEntry, UTraceExit and UTraceData. * ICU does not use or alter this pointer. - * @param e Callback function to be called on entry to a + * @param e Callback function to be called on entry to a * a traced ICU function. * @param x Callback function to be called on exit from a * traced ICU function. - * @param d Callback function to be called from within a + * @param d Callback function to be called from within a * traced ICU function, for the purpose of providing * data to the trace. * @@ -239,7 +259,7 @@ utrace_getFunctions(const void **context, * - S A UChar * string. Requires two params, (ptr, length). Length=-1 for nul term. * - b A byte (8-bit integer). * - h A 16-bit integer. Also a 16 bit Unicode code unit. - * - d A 32-bit integer. Also a 20 bit Unicode code point value. + * - d A 32-bit integer. Also a 20 bit Unicode code point value. * - l A 64-bit integer. * - p A data pointer. * @@ -271,7 +291,7 @@ utrace_getFunctions(const void **context, * the type casts will not be necessary in actual code * * UTraceDataFunc(context, fnNumber, level, - * "There is a character %c in the string %s.", // Format String + * "There is a character %c in the string %s.", // Format String * (char)c, (const char *)s); // varargs parameters * -> There is a character 0x42 'B' in the string "Bravo". * @@ -310,7 +330,7 @@ utrace_getFunctions(const void **context, * @param fmt Format specification for the data to output * @param args Data to be formatted. * @return Length of formatted output, including the terminating NUL. - * If buffer capacity is insufficient, the required capacity is returned. + * If buffer capacity is insufficient, the required capacity is returned. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 @@ -331,7 +351,7 @@ utrace_vformat(char *outBuf, int32_t capacity, * @param fmt Format specification for the data to output * @param ... Data to be formatted. * @return Length of formatted output, including the terminating NUL. - * If buffer capacity is insufficient, the required capacity is returned. + * If buffer capacity is insufficient, the required capacity is returned. * @stable ICU 2.8 */ U_STABLE int32_t U_EXPORT2 diff --git a/deps/icu-small/source/common/unicode/utypes.h b/deps/icu-small/source/common/unicode/utypes.h index 5a761c094b8e48..3d19c503839efd 100644 --- a/deps/icu-small/source/common/unicode/utypes.h +++ b/deps/icu-small/source/common/unicode/utypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1996-2016, International Business Machines @@ -209,16 +211,16 @@ typedef double UDate; /** The number of milliseconds per day @stable ICU 2.0 */ #define U_MILLIS_PER_DAY (86400000) -/** - * Maximum UDate value - * @stable ICU 4.8 - */ +/** + * Maximum UDate value + * @stable ICU 4.8 + */ #define U_DATE_MAX DBL_MAX /** - * Minimum UDate value - * @stable ICU 4.8 - */ + * Minimum UDate value + * @stable ICU 4.8 + */ #define U_DATE_MIN -U_DATE_MAX /*===========================================================================*/ @@ -373,88 +375,6 @@ typedef double UDate; #define U_STANDARD_CPP_NAMESPACE #endif - -/*===========================================================================*/ -/* Global delete operator */ -/*===========================================================================*/ - -/* - * The ICU4C library must not use the global new and delete operators. - * These operators here are defined to enable testing for this. - * See Jitterbug 2581 for details of why this is necessary. - * - * Verification that ICU4C's memory usage is correct, i.e., - * that global new/delete are not used: - * - * a) Check for imports of global new/delete (see uobject.cpp for details) - * b) Verify that new is never imported. - * c) Verify that delete is only imported from object code for interface/mixin classes. - * d) Add global delete and delete[] only for the ICU4C library itself - * and define them in a way that crashes or otherwise easily shows a problem. - * - * The following implements d). - * The operator implementations crash; this is intentional and used for library debugging. - * - * Note: This is currently only done on Windows because - * some Linux/Unix compilers have problems with defining global new/delete. - * On Windows, it is _MSC_VER>=1200 for MSVC 6.0 and higher. - */ -#if defined(__cplusplus) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION)) - -#ifndef U_HIDE_INTERNAL_API -/** - * Global operator new, defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void * -operator new(size_t /*size*/) { - char *q=NULL; - *q=5; /* break it */ - return q; -} - -#ifdef _Ret_bytecap_ -/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */ -_Ret_bytecap_(_Size) -#endif -/** - * Global operator new[], defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void * -operator new[](size_t /*size*/) { - char *q=NULL; - *q=5; /* break it */ - return q; -} - -/** - * Global operator delete, defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void -operator delete(void * /*p*/) { - char *q=NULL; - *q=5; /* break it */ -} - -/** - * Global operator delete[], defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void -operator delete[](void * /*p*/) { - char *q=NULL; - *q=5; /* break it */ -} - -#endif /* U_HIDE_INTERNAL_API */ -#endif - /*===========================================================================*/ /* UErrorCode */ /*===========================================================================*/ @@ -496,11 +416,16 @@ typedef enum UErrorCode { U_AMBIGUOUS_ALIAS_WARNING = -122, /**< This converter alias can go to different converter implementations */ U_DIFFERENT_UCA_VERSION = -121, /**< ucol_open encountered a mismatch between UCA version and collator image version, so the collator was constructed from rules. No impact to further function */ - + U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */ - U_ERROR_WARNING_LIMIT, /**< This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1) */ - +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UErrorCode warning value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_ERROR_WARNING_LIMIT, +#endif // U_HIDE_DEPRECATED_API U_ZERO_ERROR = 0, /**< No error, no warning. */ @@ -536,9 +461,16 @@ typedef enum UErrorCode { U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */ U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */ - U_STANDARD_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for standard errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest standard error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_STANDARD_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API + /* - * the error code range 0x10000 0x10100 are reserved for Transliterator + * Error codes in the range 0x10000 0x10100 are reserved for Transliterator. */ U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */ U_PARSE_ERROR_START = 0x10000, /**< Start of Transliterator errors */ @@ -576,10 +508,16 @@ typedef enum UErrorCode { U_INTERNAL_TRANSLITERATOR_ERROR, /**< Internal transliterator system error */ U_INVALID_ID, /**< A "::id" rule specifies an unknown transliterator */ U_INVALID_FUNCTION, /**< A "&fn()" rule specifies an unknown transliterator */ - U_PARSE_ERROR_LIMIT, /**< The limit for Transliterator errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal Transliterator error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_PARSE_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * the error code range 0x10100 0x10200 are reserved for formatting API parsing error + * Error codes in the range 0x10100 0x10200 are reserved for the formatting API. */ U_UNEXPECTED_TOKEN=0x10100, /**< Syntax error in format pattern */ U_FMT_PARSE_ERROR_START=0x10100, /**< Start of format library errors */ @@ -601,10 +539,16 @@ typedef enum UErrorCode { U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */ U_DECIMAL_NUMBER_SYNTAX_ERROR, /**< Decimal number syntax error */ U_FORMAT_INEXACT_ERROR, /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */ - U_FMT_PARSE_ERROR_LIMIT, /**< The limit for format library errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal formatting API error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_FMT_PARSE_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * the error code range 0x10200 0x102ff are reserved for Break Iterator related error + * Error codes in the range 0x10200 0x102ff are reserved for BreakIterator. */ U_BRK_INTERNAL_ERROR=0x10200, /**< An internal error (bug) was detected. */ U_BRK_ERROR_START=0x10200, /**< Start of codes indicating Break Iterator failures */ @@ -621,10 +565,16 @@ typedef enum UErrorCode { U_BRK_RULE_EMPTY_SET, /**< Rule contains an empty Unicode Set. */ U_BRK_UNRECOGNIZED_OPTION, /**< !!option in RBBI rules not recognized. */ U_BRK_MALFORMED_RULE_TAG, /**< The {nnn} tag on a rule is mal formed */ - U_BRK_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for Break Iterator failures */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal BreakIterator error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_BRK_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs + * Error codes in the range 0x10300-0x103ff are reserved for regular expression related errors. */ U_REGEX_INTERNAL_ERROR=0x10300, /**< An internal error (bug) was detected. */ U_REGEX_ERROR_START=0x10300, /**< Start of codes indicating Regexp failures */ @@ -651,10 +601,16 @@ typedef enum UErrorCode { U_REGEX_STOPPED_BY_CALLER, /**< Matching operation aborted by user callback fn. */ U_REGEX_PATTERN_TOO_BIG, /**< Pattern exceeds limits on size or complexity. @stable ICU 55 */ U_REGEX_INVALID_CAPTURE_GROUP_NAME, /**< Invalid capture group name. @stable ICU 55 */ - U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3, /**< This must always be the last value to indicate the limit for regexp errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal regular expression error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3, +#endif // U_HIDE_DEPRECATED_API /* - * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes + * Error codes in the range 0x10400-0x104ff are reserved for IDNA related error codes. */ U_IDNA_PROHIBITED_ERROR=0x10400, U_IDNA_ERROR_START=0x10400, @@ -666,23 +622,41 @@ typedef enum UErrorCode { U_IDNA_LABEL_TOO_LONG_ERROR, U_IDNA_ZERO_LENGTH_LABEL_ERROR, U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal IDNA error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_IDNA_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* * Aliases for StringPrep */ U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR, U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR, U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR, - + /* - * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes + * Error codes in the range 0x10500-0x105ff are reserved for Plugin related error codes. */ U_PLUGIN_ERROR_START=0x10500, /**< Start of codes indicating plugin failures */ U_PLUGIN_TOO_HIGH=0x10500, /**< The plugin's level is too high to be loaded right now. */ U_PLUGIN_DIDNT_SET_LEVEL, /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */ - U_PLUGIN_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for plugin errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal plug-in error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_PLUGIN_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API - U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT /**< This must always be the last value to indicate the limit for UErrorCode (last error code +1) */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT +#endif // U_HIDE_DEPRECATED_API } UErrorCode; /* Use the following to determine if an UErrorCode represents */ diff --git a/deps/icu-small/source/common/unicode/uvernum.h b/deps/icu-small/source/common/unicode/uvernum.h index 9c6edc3730d045..fb7b48bc07055c 100644 --- a/deps/icu-small/source/common/unicode/uvernum.h +++ b/deps/icu-small/source/common/unicode/uvernum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2016, International Business Machines @@ -32,13 +34,12 @@ * by running the UNIX makefile target 'update-windows-makefiles' in icu/source. * * - * source/common/common.vcproj - update 'Output file name' on the link tab so + * source/common/common.vcxproj - update 'Output file name' on the link tab so * that it contains the new major/minor combination - * source/i18n/i18n.vcproj - same as for the common.vcproj - * source/layout/layout.vcproj - same as for the common.vcproj + * source/i18n/i18n.vcxproj - same as for the common.vcxproj * source/layoutex/layoutex.vcproj - same - * source/stubdata/stubdata.vcproj - same as for the common.vcproj - * source/io/io.vcproj - same as for the common.vcproj + * source/stubdata/stubdata.vcproj - same as for the common.vcxproj + * source/io/io.vcproj - same as for the common.vcxproj * source/data/makedata.mak - change U_ICUDATA_NAME so that it contains * the new major/minor combination and the Unicode version. */ @@ -51,13 +52,13 @@ * @stable ICU 2.4 */ #define U_COPYRIGHT_STRING \ - " Copyright (C) 2016, International Business Machines Corporation and others. All Rights Reserved. " + " Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html " /** The current ICU major version as an integer. * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 57 +#define U_ICU_VERSION_MAJOR_NUM 58 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU @@ -83,7 +84,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _57 +#define U_ICU_VERSION_SUFFIX _58 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -118,19 +119,19 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "57.1" +#define U_ICU_VERSION "58.1" /** The current ICU library major/minor version as a string without dots, for library name suffixes. * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "57" +#define U_ICU_VERSION_SHORT "58" #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "57.1" +#define U_ICU_DATA_VERSION "58.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/deps/icu-small/source/common/unicode/uversion.h b/deps/icu-small/source/common/unicode/uversion.h index 2200cfaff199af..3f8ad360f17978 100644 --- a/deps/icu-small/source/common/unicode/uversion.h +++ b/deps/icu-small/source/common/unicode/uversion.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2011, International Business Machines @@ -16,7 +18,7 @@ /** * \file - * \brief C API: API for accessing ICU version numbers. + * \brief C API: API for accessing ICU version numbers. */ /*===========================================================================*/ /* Main ICU version information */ diff --git a/deps/icu-small/source/common/unifiedcache.cpp b/deps/icu-small/source/common/unifiedcache.cpp index d7450f785a3e1c..6e7156f87140b8 100644 --- a/deps/icu-small/source/common/unifiedcache.cpp +++ b/deps/icu-small/source/common/unifiedcache.cpp @@ -1,10 +1,12 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2015, International Business Machines Corporation and -* others. All Rights Reserved. +* Copyright (C) 2015, International Business Machines Corporation and +* others. All Rights Reserved. ****************************************************************************** -* -* File UNIFIEDCACHE.CPP +* +* File UNIFIEDCACHE.CPP ****************************************************************************** */ @@ -194,7 +196,7 @@ void UnifiedCache::_dumpContents() const { ++cnt; fprintf( stderr, - "Unified Cache: Key '%s', error %d, value %p, total refcount %d, soft refcount %d\n", + "Unified Cache: Key '%s', error %d, value %p, total refcount %d, soft refcount %d\n", key->writeDescription(buffer, 256), key->creationStatus, sharedObject == gNoValue ? NULL :sharedObject, @@ -211,7 +213,7 @@ UnifiedCache::~UnifiedCache() { flush(); { // Now all that should be left in the cache are entries that refer to - // each other and entries with hard references from outside the cache. + // each other and entries with hard references from outside the cache. // Nothing we can do about these so proceed to wipe out the cache. Mutex lock(&gCacheMutex); _flush(TRUE); @@ -293,11 +295,11 @@ void UnifiedCache::_runEvictionSlice() const { // Places a new value and creationStatus in the cache for the given key. -// On entry, gCacheMutex must be held. key must not exist in the cache. +// On entry, gCacheMutex must be held. key must not exist in the cache. // On exit, value and creation status placed under key. Soft reference added // to value on successful add. On error sets status. void UnifiedCache::_putNew( - const CacheKeyBase &key, + const CacheKeyBase &key, const SharedObject *value, const UErrorCode creationStatus, UErrorCode &status) const { @@ -449,7 +451,7 @@ void UnifiedCache::_registerMaster( // entry. Soft reference removed from previous stored value. Waiting // threads notified. void UnifiedCache::_put( - const UHashElement *element, + const UHashElement *element, const SharedObject *value, const UErrorCode status) const { U_ASSERT(_inProgress(element)); diff --git a/deps/icu-small/source/common/unifiedcache.h b/deps/icu-small/source/common/unifiedcache.h index 7807b5dbbb146e..72b8a791313a66 100644 --- a/deps/icu-small/source/common/unifiedcache.h +++ b/deps/icu-small/source/common/unifiedcache.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and @@ -37,7 +39,7 @@ class U_COMMON_API CacheKeyBase : public UObject { /** * Copy constructor. Needed to support cloning. */ - CacheKeyBase(const CacheKeyBase &other) + CacheKeyBase(const CacheKeyBase &other) : UObject(other), fCreationStatus(other.fCreationStatus), fIsMaster(FALSE) { } virtual ~CacheKeyBase(); @@ -93,7 +95,7 @@ class U_COMMON_API CacheKeyBase : public UObject { /** - * Templated version of CacheKeyBase. + * Templated version of CacheKeyBase. * A key of type LocaleCacheKey maps to a value of type T. */ template @@ -140,7 +142,7 @@ class LocaleCacheKey : public CacheKey { : CacheKey(other), fLoc(other.fLoc) { } virtual ~LocaleCacheKey() { } virtual int32_t hashCode() const { - return 37 *CacheKey::hashCode() + fLoc.hashCode(); + return (int32_t)(37u * (uint32_t)CacheKey::hashCode() + (uint32_t)fLoc.hashCode()); } virtual UBool operator == (const CacheKeyBase &other) const { // reflexive @@ -374,7 +376,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { const UHashElement *_nextElement() const; int32_t _computeCountOfItemsToEvict() const; void _runEvictionSlice() const; - void _registerMaster( + void _registerMaster( const CacheKeyBase *theKey, const SharedObject *value) const; void _put( const UHashElement *element, diff --git a/deps/icu-small/source/common/unifilt.cpp b/deps/icu-small/source/common/unifilt.cpp index 5e1a131f11d2be..2d8ce355c7532a 100644 --- a/deps/icu-small/source/common/unifilt.cpp +++ b/deps/icu-small/source/common/unifilt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2012, International Business Machines diff --git a/deps/icu-small/source/common/unifunct.cpp b/deps/icu-small/source/common/unifunct.cpp index b834eeed53526d..8fdc638407dee6 100644 --- a/deps/icu-small/source/common/unifunct.cpp +++ b/deps/icu-small/source/common/unifunct.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2004, International Business Machines diff --git a/deps/icu-small/source/common/uniset.cpp b/deps/icu-small/source/common/uniset.cpp index 355dc40ac8ae02..7866719a171c4a 100644 --- a/deps/icu-small/source/common/uniset.cpp +++ b/deps/icu-small/source/common/uniset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines @@ -234,7 +236,7 @@ UnicodeSet::UnicodeSet(const UnicodeSet& o, UBool /* asThawed */) : if(list!=NULL){ // *this = o except for bmpSet and stringSpan len = o.len; - uprv_memcpy(list, o.list, len*sizeof(UChar32)); + uprv_memcpy(list, o.list, (size_t)len*sizeof(UChar32)); if (strings != NULL && o.strings != NULL) { strings->assign(*o.strings, cloneUnicodeString, status); } else { // Invalid strings. @@ -286,7 +288,7 @@ UnicodeSet& UnicodeSet::operator=(const UnicodeSet& o) { return *this; // There is no way to report this error :-( } len = o.len; - uprv_memcpy(list, o.list, len*sizeof(UChar32)); + uprv_memcpy(list, o.list, (size_t)len*sizeof(UChar32)); if (o.bmpSet == NULL) { bmpSet = NULL; } else { @@ -1253,14 +1255,14 @@ UnicodeSet& UnicodeSet::complement(void) { if (U_FAILURE(status)) { return *this; } - uprv_memcpy(buffer, list + 1, (len-1)*sizeof(UChar32)); + uprv_memcpy(buffer, list + 1, (size_t)(len-1)*sizeof(UChar32)); --len; } else { ensureBufferCapacity(len+1, status); if (U_FAILURE(status)) { return *this; } - uprv_memcpy(buffer + 1, list, len*sizeof(UChar32)); + uprv_memcpy(buffer + 1, list, (size_t)len*sizeof(UChar32)); buffer[0] = UNICODESET_LOW; ++len; } @@ -1647,7 +1649,7 @@ UBool UnicodeSet::allocateStrings(UErrorCode &status) { delete strings; strings = NULL; return FALSE; - } + } return TRUE; } diff --git a/deps/icu-small/source/common/uniset_closure.cpp b/deps/icu-small/source/common/uniset_closure.cpp index e7aeff846a79a7..b6bc64f03c0a5e 100644 --- a/deps/icu-small/source/common/uniset_closure.cpp +++ b/deps/icu-small/source/common/uniset_closure.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -56,7 +58,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity); /* test for NULL */ if(list == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + status = U_MEMORY_ALLOCATION_ERROR; }else{ allocateStrings(status); applyPattern(pattern, options, symbols, status); @@ -77,7 +79,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, ParsePosition& pos, list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity); /* test for NULL */ if(list == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + status = U_MEMORY_ALLOCATION_ERROR; }else{ allocateStrings(status); applyPattern(pattern, pos, options, symbols, status); diff --git a/deps/icu-small/source/common/uniset_props.cpp b/deps/icu-small/source/common/uniset_props.cpp index d8b7042b83ebed..ed31946849ce88 100644 --- a/deps/icu-small/source/common/uniset_props.cpp +++ b/deps/icu-small/source/common/uniset_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -333,7 +335,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity); /* test for NULL */ if(list == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + status = U_MEMORY_ALLOCATION_ERROR; }else{ allocateStrings(status); applyPattern(pattern, status); @@ -510,7 +512,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars, mode = 1; patLocal.append((UChar) 0x5B /*'['*/); chars.getPos(backup); // prepare to backup - c = chars.next(opts, literal, ec); + c = chars.next(opts, literal, ec); if (U_FAILURE(ec)) return; if (c == 0x5E /*'^'*/ && !literal) { invert = TRUE; @@ -1242,7 +1244,7 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern, else { // Handle case where no '=' is seen, and \N{} pattern.extractBetween(pos, close, propName); - + // Handle \N{name} if (isName) { // This is a little inefficient since it means we have to @@ -1261,7 +1263,7 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern, if (invert) { complement(); } - + // Move to the limit position after the close delimiter if the // parse succeeded. ppos.setIndex(close + (posix ? 2 : 1)); diff --git a/deps/icu-small/source/common/unisetspan.cpp b/deps/icu-small/source/common/unisetspan.cpp index 63cf985c034fc8..2e77dfd548aaa8 100644 --- a/deps/icu-small/source/common/unisetspan.cpp +++ b/deps/icu-small/source/common/unisetspan.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -1007,7 +1009,7 @@ int32_t UnicodeSetStringSpan::spanUTF8(const uint8_t *s, int32_t length, USetSpa if( !U8_IS_TRAIL(s[pos-overlap]) && !offsets.containsOffset(inc) && matches8(s+pos-overlap, s8, length8) - + ) { if(inc==rest) { return length; // Reached the end of the string. @@ -1053,7 +1055,7 @@ int32_t UnicodeSetStringSpan::spanUTF8(const uint8_t *s, int32_t length, USetSpa if( !U8_IS_TRAIL(s[pos-overlap]) && (overlap>maxOverlap || /* redundant overlap==maxOverlap && */ inc>maxInc) && matches8(s+pos-overlap, s8, length8) - + ) { maxInc=inc; // Longest match from earliest start. maxOverlap=overlap; diff --git a/deps/icu-small/source/common/unisetspan.h b/deps/icu-small/source/common/unisetspan.h index 2fe0fc30d9f158..36cdd98d044d09 100644 --- a/deps/icu-small/source/common/unisetspan.h +++ b/deps/icu-small/source/common/unisetspan.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unistr.cpp b/deps/icu-small/source/common/unistr.cpp index 4804083b207066..bdd58ecd267c2e 100644 --- a/deps/icu-small/source/common/unistr.cpp +++ b/deps/icu-small/source/common/unistr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2016, International Business Machines Corporation and @@ -82,7 +84,7 @@ us_arrayCopy(const UChar *src, int32_t srcStart, UChar *dst, int32_t dstStart, int32_t count) { if(count>0) { - uprv_memmove(dst+dstStart, src+srcStart, (size_t)(count*sizeof(*src))); + uprv_memmove(dst+dstStart, src+srcStart, (size_t)count*sizeof(*src)); } } @@ -151,41 +153,39 @@ UnicodeString::UnicodeString(int32_t capacity, UChar32 c, int32_t count) { if(count <= 0 || (uint32_t)c > 0x10ffff) { // just allocate and do not do anything else allocate(capacity); - } else { - // count > 0, allocate and fill the new string with count c's - int32_t unitCount = U16_LENGTH(c), length = count * unitCount; + } else if(c <= 0xffff) { + int32_t length = count; if(capacity < length) { capacity = length; } if(allocate(capacity)) { UChar *array = getArrayStart(); - int32_t i = 0; - - // fill the new string with c - if(unitCount == 1) { - // fill with length UChars - while(i < length) { - array[i++] = (UChar)c; - } - } else { - // get the code units for c - UChar units[U16_MAX_LENGTH]; - U16_APPEND_UNSAFE(units, i, c); - - // now it must be i==unitCount - i = 0; - - // for Unicode, unitCount can only be 1, 2, 3, or 4 - // 1 is handled above - while(i < length) { - int32_t unitIdx = 0; - while(unitIdx < unitCount) { - array[i++]=units[unitIdx++]; - } - } + UChar unit = (UChar)c; + for(int32_t i = 0; i < length; ++i) { + array[i] = unit; + } + setLength(length); + } + } else { // supplementary code point, write surrogate pairs + if(count > (INT32_MAX / 2)) { + // We would get more than 2G UChars. + allocate(capacity); + return; + } + int32_t length = count * 2; + if(capacity < length) { + capacity = length; + } + if(allocate(capacity)) { + UChar *array = getArrayStart(); + UChar lead = U16_LEAD(c); + UChar trail = U16_TRAIL(c); + for(int32_t i = 0; i < length; i += 2) { + array[i] = lead; + array[i + 1] = trail; } + setLength(length); } - setLength(length); } } @@ -342,33 +342,60 @@ UnicodeString::clone() const { // array allocation //======================================== +namespace { + +const int32_t kGrowSize = 128; + +// The number of bytes for one int32_t reference counter and capacity UChars +// must fit into a 32-bit size_t (at least when on a 32-bit platform). +// We also add one for the NUL terminator, to avoid reallocation in getTerminatedBuffer(), +// and round up to a multiple of 16 bytes. +// This means that capacity must be at most (0xfffffff0 - 4) / 2 - 1 = 0x7ffffff5. +// (With more complicated checks we could go up to 0x7ffffffd without rounding up, +// but that does not seem worth it.) +const int32_t kMaxCapacity = 0x7ffffff5; + +int32_t getGrowCapacity(int32_t newLength) { + int32_t growSize = (newLength >> 2) + kGrowSize; + if(growSize <= (kMaxCapacity - newLength)) { + return newLength + growSize; + } else { + return kMaxCapacity; + } +} + +} // namespace + UBool UnicodeString::allocate(int32_t capacity) { if(capacity <= US_STACKBUF_SIZE) { fUnion.fFields.fLengthAndFlags = kShortString; - } else { - // count bytes for the refCounter and the string capacity, and - // round up to a multiple of 16; then divide by 4 and allocate int32_t's - // to be safely aligned for the refCount - // the +1 is for the NUL terminator, to avoid reallocation in getTerminatedBuffer() - int32_t words = (int32_t)(((sizeof(int32_t) + (capacity + 1) * U_SIZEOF_UCHAR + 15) & ~15) >> 2); - int32_t *array = (int32_t*) uprv_malloc( sizeof(int32_t) * words ); - if(array != 0) { + return TRUE; + } + if(capacity <= kMaxCapacity) { + ++capacity; // for the NUL + // Switch to size_t which is unsigned so that we can allocate up to 4GB. + // Reference counter + UChars. + size_t numBytes = sizeof(int32_t) + (size_t)capacity * U_SIZEOF_UCHAR; + // Round up to a multiple of 16. + numBytes = (numBytes + 15) & ~15; + int32_t *array = (int32_t *) uprv_malloc(numBytes); + if(array != NULL) { // set initial refCount and point behind the refCount *array++ = 1; + numBytes -= sizeof(int32_t); // have fArray point to the first UChar fUnion.fFields.fArray = (UChar *)array; - fUnion.fFields.fCapacity = (int32_t)((words - 1) * (sizeof(int32_t) / U_SIZEOF_UCHAR)); + fUnion.fFields.fCapacity = (int32_t)(numBytes / U_SIZEOF_UCHAR); fUnion.fFields.fLengthAndFlags = kLongString; - } else { - fUnion.fFields.fLengthAndFlags = kIsBogus; - fUnion.fFields.fArray = 0; - fUnion.fFields.fCapacity = 0; - return FALSE; + return TRUE; } } - return TRUE; + fUnion.fFields.fLengthAndFlags = kIsBogus; + fUnion.fFields.fArray = 0; + fUnion.fFields.fCapacity = 0; + return FALSE; } //======================================== @@ -415,7 +442,7 @@ UnicodeString::~UnicodeString() // Factory methods //======================================== -UnicodeString UnicodeString::fromUTF8(const StringPiece &utf8) { +UnicodeString UnicodeString::fromUTF8(StringPiece utf8) { UnicodeString result; result.setToUTF8(utf8); return result; @@ -526,7 +553,7 @@ UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) { // src is a writable alias; we make a copy of that instead int32_t srcLength = src.length(); if(allocate(srcLength)) { - uprv_memcpy(getArrayStart(), src.getArrayStart(), srcLength * U_SIZEOF_UCHAR); + u_memcpy(getArrayStart(), src.getArrayStart(), srcLength); setLength(srcLength); break; } @@ -646,7 +673,7 @@ UnicodeString::doCompare( int32_t start, if(isBogus()) { return -1; } - + // pin indices to legal values pinIndices(start, length); @@ -694,7 +721,7 @@ UnicodeString::doCompare( int32_t start, if(minLength > 0 && chars != srcChars) { int32_t result; -# if U_IS_BIG_ENDIAN +# if U_IS_BIG_ENDIAN // big-endian: byte comparison works result = uprv_memcmp(chars, srcChars, minLength * sizeof(UChar)); if(result != 0) { @@ -855,7 +882,7 @@ UnicodeString::extract(UChar *dest, int32_t destCapacity, } else { const UChar *array = getArrayStart(); if(len>0 && len<=destCapacity && array!=dest) { - uprv_memcpy(dest, array, len*U_SIZEOF_UCHAR); + u_memcpy(dest, array, len); } return u_terminateUChars(dest, destCapacity, len, &errorCode); } @@ -926,7 +953,7 @@ UnicodeString::extract(int32_t start, int32_t len, // else see unistr_cnv.cpp #endif -void +void UnicodeString::extractBetween(int32_t start, int32_t limit, UnicodeString& target) const { @@ -995,7 +1022,7 @@ UnicodeString::toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) return length32; } -int32_t +int32_t UnicodeString::indexOf(const UChar *srcChars, int32_t srcStart, int32_t srcLength, @@ -1059,7 +1086,7 @@ UnicodeString::doIndexOf(UChar32 c, } } -int32_t +int32_t UnicodeString::lastIndexOf(const UChar *srcChars, int32_t srcStart, int32_t srcLength, @@ -1131,7 +1158,7 @@ UnicodeString::doLastIndexOf(UChar32 c, // Write implementation //======================================== -UnicodeString& +UnicodeString& UnicodeString::findAndReplace(int32_t start, int32_t length, const UnicodeString& oldText, @@ -1217,7 +1244,7 @@ UnicodeString::getTerminatedBuffer() { return array; } } - if(cloneArrayIfNeeded(len+1)) { + if(len (INT32_MAX - newLength)) { + setToBogus(); + return *this; + } + newLength += srcLength; // cloneArrayIfNeeded(doCopyArray=FALSE) may change fArray but will not copy the current contents; // therefore we need to keep the current fArray @@ -1446,7 +1479,7 @@ UnicodeString::doReplace(int32_t start, // clone our array and allocate a bigger array if needed int32_t *bufferToDelete = 0; - if(!cloneArrayIfNeeded(newLength, newLength + (newLength >> 2) + kGrowSize, + if(!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength), FALSE, &bufferToDelete) ) { return *this; @@ -1513,7 +1546,7 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng int32_t newLength = oldLength + srcLength; // optimize append() onto a large-enough, owned string if((newLength <= getCapacity() && isBufferWritable()) || - cloneArrayIfNeeded(newLength, newLength + (newLength >> 2) + kGrowSize)) { + cloneArrayIfNeeded(newLength, getGrowCapacity(newLength))) { UChar *newArray = getArrayStart(); // Do not copy characters when // UChar *buffer=str.getAppendBuffer(...); @@ -1543,7 +1576,7 @@ UnicodeString::handleReplaceBetween(int32_t start, /** * Replaceable API */ -void +void UnicodeString::copy(int32_t start, int32_t limit, int32_t dest) { if (limit <= start) { return; // Nothing to do; avoid bogus malloc call @@ -1552,7 +1585,7 @@ UnicodeString::copy(int32_t start, int32_t limit, int32_t dest) { // Check to make sure text is not null. if (text != NULL) { extractBetween(start, limit, text, 0); - insert(dest, text, 0, limit - start); + insert(dest, text, 0, limit - start); uprv_free(text); } } @@ -1620,7 +1653,7 @@ UnicodeString::doReverse(int32_t start, int32_t length) { return *this; } -UBool +UBool UnicodeString::padLeading(int32_t targetLength, UChar padChar) { @@ -1642,7 +1675,7 @@ UnicodeString::padLeading(int32_t targetLength, } } -UBool +UBool UnicodeString::padTrailing(int32_t targetLength, UChar padChar) { @@ -1861,7 +1894,9 @@ UnicodeStringAppendable::getAppendBuffer(int32_t minCapacity, return NULL; } int32_t oldLength = str.length(); - if(str.cloneArrayIfNeeded(oldLength + minCapacity, oldLength + desiredCapacityHint)) { + if(minCapacity <= (kMaxCapacity - oldLength) && + desiredCapacityHint <= (kMaxCapacity - oldLength) && + str.cloneArrayIfNeeded(oldLength + minCapacity, oldLength + desiredCapacityHint)) { *resultCapacity = str.getCapacity() - oldLength; return str.getArrayStart() + oldLength; } diff --git a/deps/icu-small/source/common/unistr_case.cpp b/deps/icu-small/source/common/unistr_case.cpp index 1b52eb60decb8e..1715b6ec66e268 100644 --- a/deps/icu-small/source/common/unistr_case.cpp +++ b/deps/icu-small/source/common/unistr_case.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unistr_case_locale.cpp b/deps/icu-small/source/common/unistr_case_locale.cpp index a8d5704431ec17..a01be5c30b372a 100644 --- a/deps/icu-small/source/common/unistr_case_locale.cpp +++ b/deps/icu-small/source/common/unistr_case_locale.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/unistr_cnv.cpp b/deps/icu-small/source/common/unistr_cnv.cpp index 38998ffd026c4d..a9b44ee424c33f 100644 --- a/deps/icu-small/source/common/unistr_cnv.cpp +++ b/deps/icu-small/source/common/unistr_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unistr_props.cpp b/deps/icu-small/source/common/unistr_props.cpp index 87e19275946f72..f09977906678ec 100644 --- a/deps/icu-small/source/common/unistr_props.cpp +++ b/deps/icu-small/source/common/unistr_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -23,7 +25,7 @@ U_NAMESPACE_BEGIN -UnicodeString& +UnicodeString& UnicodeString::trim() { if(isBogus()) { diff --git a/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp b/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp index 9b60e2a0358748..3d6737cfc5e3d9 100644 --- a/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp +++ b/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/unistrappender.h b/deps/icu-small/source/common/unistrappender.h index a6f7c2efc44714..330f3a5f987998 100644 --- a/deps/icu-small/source/common/unistrappender.h +++ b/deps/icu-small/source/common/unistrappender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and @@ -24,7 +26,7 @@ U_NAMESPACE_BEGIN * one character at a time in a loop. It stores appends in a buffer while * never actually calling append on the unicode string unless the buffer * fills up or is flushed. - * + * * proper usage: * { * UnicodeStringAppender appender(astring); @@ -36,7 +38,7 @@ U_NAMESPACE_BEGIN */ class UnicodeStringAppender : public UMemory { public: - + /** * dest is the UnicodeString being appended to. It must always * exist while this instance exists. diff --git a/deps/icu-small/source/common/unorm.cpp b/deps/icu-small/source/common/unorm.cpp index fb948b88051d15..a9df6d2cb22548 100644 --- a/deps/icu-small/source/common/unorm.cpp +++ b/deps/icu-small/source/common/unorm.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (c) 1996-2014, International Business Machines @@ -13,8 +15,8 @@ * 02/01/01 synwee Added normalization quickcheck enum and method. * 02/12/01 synwee Commented out quickcheck util api has been approved * Added private method for doing FCD checks -* 02/23/01 synwee Modified quickcheck and checkFCE to run through -* string for codepoints < 0x300 for the normalization +* 02/23/01 synwee Modified quickcheck and checkFCE to run through +* string for codepoints < 0x300 for the normalization * mode NFC. * 05/25/01+ Markus Scherer total rewrite, implement all normalization here * instead of just wrappers around normlzr.cpp, @@ -43,7 +45,7 @@ U_NAMESPACE_USE U_CAPI UNormalizationCheckResult U_EXPORT2 unorm_quickCheck(const UChar *src, - int32_t srcLength, + int32_t srcLength, UNormalizationMode mode, UErrorCode *pErrorCode) { const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, *pErrorCode); @@ -51,7 +53,7 @@ unorm_quickCheck(const UChar *src, } U_CAPI UNormalizationCheckResult U_EXPORT2 -unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, +unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, UNormalizationMode mode, int32_t options, UErrorCode *pErrorCode) { const Normalizer2 *n2=Normalizer2Factory::getInstance(mode, *pErrorCode); diff --git a/deps/icu-small/source/common/unormcmp.cpp b/deps/icu-small/source/common/unormcmp.cpp index 1b072c4c34d8be..b40a10a1385fb4 100644 --- a/deps/icu-small/source/common/unormcmp.cpp +++ b/deps/icu-small/source/common/unormcmp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unormimp.h b/deps/icu-small/source/common/unormimp.h index 3dce76bc8fd361..cd1d9a86acb3e3 100644 --- a/deps/icu-small/source/common/unormimp.h +++ b/deps/icu-small/source/common/unormimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -186,7 +188,7 @@ enum { * int32_t indexes[_NORM_INDEX_TOP]; -- _NORM_INDEX_TOP=32, see enum in this file * * UTrie normTrie; -- size in bytes=indexes[_NORM_INDEX_TRIE_SIZE] - * + * * uint16_t extraData[extraDataTop]; -- extraDataTop=indexes[_NORM_INDEX_UCHAR_COUNT] * extraData[0] contains the number of units for * FC_NFKC_Closure (formatVersion>=2.1) diff --git a/deps/icu-small/source/common/uobject.cpp b/deps/icu-small/source/common/uobject.cpp index 900e0345952cdc..37406e4a0dc07a 100644 --- a/deps/icu-small/source/common/uobject.cpp +++ b/deps/icu-small/source/common/uobject.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uposixdefs.h b/deps/icu-small/source/common/uposixdefs.h index ca84fefad1eff3..495deea49e3f7c 100644 --- a/deps/icu-small/source/common/uposixdefs.h +++ b/deps/icu-small/source/common/uposixdefs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines diff --git a/deps/icu-small/source/common/uprops.cpp b/deps/icu-small/source/common/uprops.cpp index 3bf44317b26466..46ceb66d8cf632 100644 --- a/deps/icu-small/source/common/uprops.cpp +++ b/deps/icu-small/source/common/uprops.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uprops.h b/deps/icu-small/source/common/uprops.h index d45fc6c79b433f..63c588088ad1c3 100644 --- a/deps/icu-small/source/common/uprops.h +++ b/deps/icu-small/source/common/uprops.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -86,8 +88,15 @@ enum { * ((ntv>>2)-0xbf) * 60^((ntv&3)+1) = (1..9)*(60^1..60^4) */ UPROPS_NTV_BASE60_START=0x300, + /** + * Fraction-20 values: + * frac20 = ntv-0x324 = 0..0x17 -> 1|3|5|7 / 20|40|80|160|320|640 + * numerator: num = 2*(frac20&3)+1 + * denominator: den = 20<<(frac20>>2) + */ + UPROPS_NTV_FRACTION20_START=UPROPS_NTV_BASE60_START+36, // 0x300+9*4=0x324 /** No numeric value (yet). */ - UPROPS_NTV_RESERVED_START=UPROPS_NTV_BASE60_START+36, /* 0x300+9*4=0x324 */ + UPROPS_NTV_RESERVED_START=UPROPS_NTV_FRACTION20_START+24, // 0x324+6*4=0x34c UPROPS_NTV_MAX_SMALL_INT=UPROPS_NTV_FRACTION_START-UPROPS_NTV_NUMERIC_START-1 }; diff --git a/deps/icu-small/source/common/ures_cnv.c b/deps/icu-small/source/common/ures_cnv.c index 6a16c50b624c7d..58c6cd0746fb93 100644 --- a/deps/icu-small/source/common/ures_cnv.c +++ b/deps/icu-small/source/common/ures_cnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -25,8 +27,8 @@ #include "ustr_cnv.h" U_CAPI UResourceBundle * U_EXPORT2 -ures_openU(const UChar *myPath, - const char *localeID, +ures_openU(const UChar *myPath, + const char *localeID, UErrorCode *status) { char pathBuffer[1024]; diff --git a/deps/icu-small/source/common/uresbund.cpp b/deps/icu-small/source/common/uresbund.cpp index bb6b039495399f..a32bfd132fea4d 100644 --- a/deps/icu-small/source/common/uresbund.cpp +++ b/deps/icu-small/source/common/uresbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2016, International Business Machines Corporation and @@ -72,7 +74,7 @@ static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) { /** - * Internal function, gets parts of locale name according + * Internal function, gets parts of locale name according * to the position of '_' character */ static UBool chopLocale(char *name) { @@ -100,7 +102,7 @@ static void entryIncrease(UResourceDataEntry *entry) { } /** - * Internal function. Tries to find a resource in given Resource + * Internal function. Tries to find a resource in given Resource * Bundle, as well as in its parents */ static const ResourceData *getFallbackData(const UResourceBundle* resBundle, const char* * resTag, UResourceDataEntry* *realData, Resource *res, UErrorCode *status) { @@ -225,7 +227,7 @@ U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void) { int32_t pos = UHASH_FIRST; const UHashElement *e; UResourceDataEntry *resB; - + umtx_lock(&resbMutex); if (cache == NULL) { umtx_unlock(&resbMutex); @@ -243,13 +245,13 @@ U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void) { resB->fPath?resB->fPath:"NULL", (void*)resB->fPool, (void*)resB->fAlias, - (void*)resB->fParent); + (void*)resB->fParent); } - + fprintf(stderr,"%s:%d: RB Cache still contains %d items.\n", __FILE__, __LINE__, uhash_count(cache)); umtx_unlock(&resbMutex); - + return cacheNotEmpty; } @@ -267,12 +269,12 @@ static UBool U_CALLCONV ures_cleanup(void) } /** INTERNAL: Initializes the cache for resources */ -static void createCache(UErrorCode &status) { +static void U_CALLCONV createCache(UErrorCode &status) { U_ASSERT(cache == NULL); cache = uhash_open(hashEntry, compareEntries, NULL, &status); ucln_common_registerCleanup(UCLN_COMMON_URES, ures_cleanup); } - + static void initCache(UErrorCode *status) { umtx_initOnce(gCacheInitOnce, &createCache, *status); } @@ -365,7 +367,7 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE /* this is the actual loading */ res_load(&(r->fData), r->fPath, r->fName, status); - if (U_FAILURE(*status)) { + if (U_FAILURE(*status)) { /* we have no such entry in dll, so it will always use fallback */ *status = U_USING_FALLBACK_WARNING; r->fBogus = U_USING_FALLBACK_WARNING; @@ -634,7 +636,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, usrDataPath[sizeof(usrDataPath) - 1] = 0; } } - + umtx_lock(&resbMutex); { /* umtx_lock */ /* We're going to skip all the locales that do not have any data */ @@ -680,7 +682,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, goto finishUnlock; } } - } + } } /* we could still have r == NULL at this point - maybe even default locale is not */ @@ -717,7 +719,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, if(U_SUCCESS(*status)) { if(intStatus != U_ZERO_ERROR) { - *status = intStatus; + *status = intStatus; } return r; } else { @@ -814,7 +816,7 @@ static void entryCloseInt(UResourceDataEntry *resB) { } } -/** +/** * API: closes a resource bundle and cleans up. */ @@ -829,7 +831,7 @@ U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd) { if(resB->fResPath == NULL) { resB->fResPath = resB->fResBuf; *(resB->fResPath) = 0; - } + } resB->fResPathLen = uprv_strlen(toAdd); if(RES_BUFSIZE <= resB->fResPathLen+1) { if(resB->fResPath == resB->fResBuf) { @@ -847,7 +849,7 @@ static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t resB->fResPath = resB->fResBuf; *(resB->fResPath) = 0; resB->fResPathLen = 0; - } + } resB->fResPathLen += lenToAdd; if(RES_BUFSIZE <= resB->fResPathLen+1) { if(resB->fResPath == resB->fResBuf) { @@ -909,10 +911,10 @@ ures_close(UResourceBundle* resB) ures_closeBundle(resB, TRUE); } -static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, - const char *key, int32_t idx, UResourceDataEntry *realData, +static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, + const char *key, int32_t idx, UResourceDataEntry *realData, const UResourceBundle *parent, int32_t noAlias, - UResourceBundle *resB, UErrorCode *status) + UResourceBundle *resB, UErrorCode *status) { if(status == NULL || U_FAILURE(*status)) { return resB; @@ -922,9 +924,9 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, return NULL; } if(RES_GET_TYPE(r) == URES_ALIAS) { /* This is an alias, need to exchange with real data */ - if(noAlias < URES_MAX_ALIAS_LEVEL) { + if(noAlias < URES_MAX_ALIAS_LEVEL) { int32_t len = 0; - const UChar *alias = res_getAlias(rdata, r, &len); + const UChar *alias = res_getAlias(rdata, r, &len); if(len > 0) { /* we have an alias, now let's cut it up */ char stackAlias[200]; @@ -980,7 +982,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, /* this is an XPath alias, starting with "/LOCALE/" */ /* it contains the path to a resource which should be looked up */ /* starting in the requested locale */ - keyPath = locale; + keyPath = locale; locale = parent->fTopLevelData->fName; /* this is the requested locale's name */ path = realData->fPath; /* we will be looking in the same package */ } else { @@ -1011,14 +1013,14 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, UResourceBundle *result = resB; const char* temp = NULL; UErrorCode intStatus = U_ZERO_ERROR; - UResourceBundle *mainRes = ures_openDirect(path, locale, &intStatus); + UResourceBundle *mainRes = ures_openDirect(path, locale, &intStatus); if(U_SUCCESS(intStatus)) { if(keyPath == NULL) { - /* no key path. This means that we are going to + /* no key path. This means that we are going to * to use the corresponding resource from * another bundle */ - /* first, we are going to get a corresponding parent + /* first, we are going to get a corresponding parent * resource to the one we are searching. */ char *aKey = parent->fResPath; @@ -1067,9 +1069,9 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, result = resB; } } else { - /* this one is a bit trickier. + /* this one is a bit trickier. * we start finding keys, but after we resolve one alias, the path might continue. - * Consider: + * Consider: * aliastest:alias { "testtypes/anotheralias/Sequence" } * anotheralias:alias { "/ICUDATA/sh/CollationElements" } * aliastest resource should finally have the sequence, not collation elements. @@ -1088,7 +1090,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, result = mainRes; /* now we have fallback following here */ do { - r = dataEntry->fData.rootRes; + r = dataEntry->fData.rootRes; /* this loop handles 'found' resources over several levels */ while(*myPath && U_SUCCESS(*status)) { r = res_findResource(&(dataEntry->fData), r, &myPath, &temp); @@ -1127,7 +1129,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, return result; } } else { - /* bad alias, should be an error */ + /* bad alias, should be an error */ *status = U_ILLEGAL_ARGUMENT_ERROR; return resB; } @@ -1153,9 +1155,9 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, if(resB->fVersion != NULL) { uprv_free(resB->fVersion); } - /* + /* weiv: if stack object was passed in, it doesn't really need to be reinited, - since the purpose of initing is to remove stack junk. However, at this point + since the purpose of initing is to remove stack junk. However, at this point we would not do anything to an allocated object, so stack object should be treated the same */ @@ -1173,7 +1175,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, resB->fHasFallback = FALSE; resB->fIsTopLevel = FALSE; resB->fIndex = -1; - resB->fKey = key; + resB->fKey = key; /*resB->fParentRes = parent;*/ resB->fTopLevelData = parent->fTopLevelData; if(parent->fResPath && parent != resB) { @@ -1330,7 +1332,7 @@ ures_getUTF8String(const UResourceBundle *resB, return ures_toUTF8String(s16, length16, dest, pLength, forceCopy, status); } -U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resB, int32_t* len, +U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resB, int32_t* len, UErrorCode* status) { const uint8_t *p; if (status==NULL || U_FAILURE(*status)) { @@ -1347,7 +1349,7 @@ U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resB, int3 return p; } -U_CAPI const int32_t* U_EXPORT2 ures_getIntVector(const UResourceBundle* resB, int32_t* len, +U_CAPI const int32_t* U_EXPORT2 ures_getIntVector(const UResourceBundle* resB, int32_t* len, UErrorCode* status) { const int32_t *p; if (status==NULL || U_FAILURE(*status)) { @@ -1364,7 +1366,7 @@ U_CAPI const int32_t* U_EXPORT2 ures_getIntVector(const UResourceBundle* resB, i return p; } -/* this function returns a signed integer */ +/* this function returns a signed integer */ /* it performs sign extension */ U_CAPI int32_t U_EXPORT2 ures_getInt(const UResourceBundle* resB, UErrorCode *status) { if (status==NULL || U_FAILURE(*status)) { @@ -1407,7 +1409,7 @@ U_CAPI const char * U_EXPORT2 ures_getKey(const UResourceBundle *resB) { if(resB == NULL) { return NULL; } - + return(resB->fKey); } @@ -1415,7 +1417,7 @@ U_CAPI int32_t U_EXPORT2 ures_getSize(const UResourceBundle *resB) { if(resB == NULL) { return 0; } - + return resB->fSize; } @@ -1427,7 +1429,7 @@ static const UChar* ures_getStringWithAlias(const UResourceBundle *resB, Resourc ures_close(tempRes); return result; } else { - return res_getString(&(resB->fResData), r, len); + return res_getString(&(resB->fResData), r, len); } } @@ -1447,7 +1449,7 @@ U_CAPI UBool U_EXPORT2 ures_hasNext(const UResourceBundle *resB) { U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t* len, const char ** key, UErrorCode *status) { Resource r = RES_BOGUS; - + if (status==NULL || U_FAILURE(*status)) { return NULL; } @@ -1455,7 +1457,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t* *status = U_ILLEGAL_ARGUMENT_ERROR; return NULL; } - + if(resB->fIndex == resB->fSize-1) { *status = U_INDEX_OUTOFBOUNDS_ERROR; } else { @@ -1463,7 +1465,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t* switch(RES_GET_TYPE(resB->fRes)) { case URES_STRING: case URES_STRING_V2: - return res_getString(&(resB->fResData), resB->fRes, len); + return res_getString(&(resB->fResData), resB->fRes, len); case URES_TABLE: case URES_TABLE16: case URES_TABLE32: @@ -1658,9 +1660,9 @@ ures_getUTF8StringByIndex(const UResourceBundle *resB, }*/ U_CAPI UResourceBundle* U_EXPORT2 -ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) +ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) { - UResourceBundle *first = NULL; + UResourceBundle *first = NULL; UResourceBundle *result = fillIn; char *packageName = NULL; char *pathToResource = NULL, *save = NULL; @@ -1713,7 +1715,7 @@ ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) } U_CAPI UResourceBundle* U_EXPORT2 -ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *fillIn, UErrorCode *status) +ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *fillIn, UErrorCode *status) { Resource res = RES_BOGUS; UResourceBundle *result = fillIn; @@ -1727,7 +1729,7 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f /* this loop is here because aliasing is resolved on this level, not on res level */ /* so, when we encounter an alias, it is not an aggregate resource, so we return */ do { - res = res_findResource(&(resB->fResData), resB->fRes, &path, &key); + res = res_findResource(&(resB->fResData), resB->fRes, &path, &key); if(res != RES_BOGUS) { result = init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status); resB = result; @@ -1739,9 +1741,9 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f return result; } -U_INTERNAL const UChar* U_EXPORT2 -ures_getStringByKeyWithFallback(const UResourceBundle *resB, - const char* inKey, +U_INTERNAL const UChar* U_EXPORT2 +ures_getStringByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, int32_t* len, UErrorCode *status) { @@ -1768,7 +1770,7 @@ ures_getStringByKeyWithFallback(const UResourceBundle *resB, /* Like res_getTableItemByKey but accepts full paths like "NumberElements/latn/patternsShort". -*/ +*/ static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource table, const char *key) { Resource resource = table; /* The current resource */ icu::CharString path; @@ -1789,7 +1791,7 @@ static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource tab const char *pathP = pathPart; resource = res_getTableItemByKey(pResData, resource, &t, &pathP); type = (UResType)RES_GET_TYPE(resource); - pathPart = nextPathPart; + pathPart = nextPathPart; } if (*pathPart) { return RES_BOGUS; @@ -1797,10 +1799,10 @@ static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource tab return resource; } -U_CAPI UResourceBundle* U_EXPORT2 -ures_getByKeyWithFallback(const UResourceBundle *resB, - const char* inKey, - UResourceBundle *fillIn, +U_CAPI UResourceBundle* U_EXPORT2 +ures_getByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, + UResourceBundle *fillIn, UErrorCode *status) { Resource res = RES_BOGUS, rootRes = RES_BOGUS; /*UResourceDataEntry *realData = NULL;*/ @@ -1844,7 +1846,7 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, res = res_findResource(&(dataEntry->fData), rootRes, &myPath, &key); if (RES_GET_TYPE(res) == URES_ALIAS && *myPath) { /* We hit an alias, but we didn't finish following the path. */ - helper = init_resb_result(&(dataEntry->fData), res, NULL, -1, dataEntry, resB, 0, helper, status); + helper = init_resb_result(&(dataEntry->fData), res, NULL, -1, dataEntry, resB, 0, helper, status); /*helper = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, helper, status);*/ if(helper) { dataEntry = helper->fData; @@ -1875,7 +1877,7 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, } else { fillIn = init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status); } - } + } else { *status = U_RESOURCE_TYPE_MISMATCH; } @@ -1885,32 +1887,27 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, namespace { -void getAllContainerItemsWithFallback( +void getAllItemsWithFallback( const UResourceBundle *bundle, ResourceDataValue &value, - ResourceArraySink *arraySink, ResourceTableSink *tableSink, + ResourceSink &sink, UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } // We recursively enumerate child-first, // only storing parent items in the absence of child items. - // We store a placeholder value for the no-fallback/no-inheritance marker + // The sink needs to store a placeholder value for the no-fallback/no-inheritance marker // to prevent a parent item from being stored. // // It would be possible to recursively enumerate parent-first, // overriding parent items with child items. - // When we see the no-fallback/no-inheritance marker, - // then we would remove the parent's item. + // When the sink sees the no-fallback/no-inheritance marker, + // then it would remove the parent's item. // We would deserialize parent values even though they are overridden in a child bundle. - UResType expectedType = arraySink != NULL ? URES_ARRAY : URES_TABLE; - if (ures_getType(bundle) == expectedType) { - value.pResData = &bundle->fResData; - if (arraySink != NULL) { - ures_getAllArrayItems(&bundle->fResData, bundle->fRes, value, *arraySink, errorCode); - } else /* tableSink != NULL */ { - ures_getAllTableItems(&bundle->fResData, bundle->fRes, value, *tableSink, errorCode); - } - } - UResourceDataEntry *entry = bundle->fData->fParent; - if (entry != NULL && U_SUCCESS(entry->fBogus)) { + value.pResData = &bundle->fResData; + UResourceDataEntry *parentEntry = bundle->fData->fParent; + UBool hasParent = parentEntry != NULL && U_SUCCESS(parentEntry->fBogus); + value.setResource(bundle->fRes); + sink.put(bundle->fKey, value, !hasParent, errorCode); + if (hasParent) { // We might try to query the sink whether // any fallback from the parent bundle is still possible. @@ -1921,40 +1918,41 @@ void getAllContainerItemsWithFallback( // so that we need not create UResourceBundle objects. UResourceBundle parentBundle; ures_initStackObject(&parentBundle); - parentBundle.fTopLevelData = parentBundle.fData = entry; + parentBundle.fTopLevelData = parentBundle.fData = parentEntry; // TODO: What is the difference between bundle fData and fTopLevelData? - uprv_memcpy(&parentBundle.fResData, &entry->fData, sizeof(ResourceData)); + uprv_memcpy(&parentBundle.fResData, &parentEntry->fData, sizeof(ResourceData)); // TODO: Try to replace bundle.fResData with just using bundle.fData->fData. parentBundle.fHasFallback = !parentBundle.fResData.noFallback; parentBundle.fIsTopLevel = TRUE; parentBundle.fRes = parentBundle.fResData.rootRes; parentBundle.fSize = res_countArrayItems(&(parentBundle.fResData), parentBundle.fRes); parentBundle.fIndex = -1; - entryIncrease(entry); + entryIncrease(parentEntry); // Look up the container item in the parent bundle. UResourceBundle containerBundle; ures_initStackObject(&containerBundle); const UResourceBundle *rb; + UErrorCode pathErrorCode = U_ZERO_ERROR; // Ignore if parents up to root do not have this path. if (bundle->fResPath == NULL || *bundle->fResPath == 0) { rb = &parentBundle; } else { rb = ures_getByKeyWithFallback(&parentBundle, bundle->fResPath, - &containerBundle, &errorCode); + &containerBundle, &pathErrorCode); } - if (U_SUCCESS(errorCode) && ures_getType(rb) == expectedType) { - getAllContainerItemsWithFallback(rb, value, - arraySink, tableSink, errorCode); + if (U_SUCCESS(pathErrorCode)) { + getAllItemsWithFallback(rb, value, sink, errorCode); } ures_close(&containerBundle); ures_close(&parentBundle); } } -void getAllContainerItemsWithFallback( - const UResourceBundle *bundle, const char *path, - ResourceArraySink *arraySink, ResourceTableSink *tableSink, - UErrorCode &errorCode) { +} // namespace + +U_CAPI void U_EXPORT2 +ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path, + icu::ResourceSink &sink, UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } if (path == NULL) { errorCode = U_ILLEGAL_ARGUMENT_ERROR; @@ -1973,32 +1971,12 @@ void getAllContainerItemsWithFallback( return; } } - UResType expectedType = arraySink != NULL ? URES_ARRAY : URES_TABLE; - if (ures_getType(rb) != expectedType) { - errorCode = U_RESOURCE_TYPE_MISMATCH; - ures_close(&stackBundle); - return; - } // Get all table items with fallback. ResourceDataValue value; - getAllContainerItemsWithFallback(rb, value, arraySink, tableSink, errorCode); + getAllItemsWithFallback(rb, value, sink, errorCode); ures_close(&stackBundle); } -} // namespace - -U_CAPI void U_EXPORT2 -ures_getAllArrayItemsWithFallback(const UResourceBundle *bundle, const char *path, - ResourceArraySink &sink, UErrorCode &errorCode) { - getAllContainerItemsWithFallback(bundle, path, &sink, NULL, errorCode); -} - -U_CAPI void U_EXPORT2 -ures_getAllTableItemsWithFallback(const UResourceBundle *bundle, const char *path, - ResourceTableSink &sink, UErrorCode &errorCode) { - getAllContainerItemsWithFallback(bundle, path, NULL, &sink, errorCode); -} - U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) { Resource res = RES_BOGUS; UResourceDataEntry *realData = NULL; @@ -2032,7 +2010,7 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con } else { return init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status); } - } + } #if 0 /* this is a kind of TODO item. If we have an array with an index table, we could do this. */ /* not currently */ @@ -2045,7 +2023,7 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con *status = U_MISSING_RESOURCE_ERROR; } } -#endif +#endif else { *status = U_RESOURCE_TYPE_MISMATCH; } @@ -2114,10 +2092,10 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c *status = U_RESOURCE_TYPE_MISMATCH; } } - } -#if 0 + } +#if 0 /* this is a kind of TODO item. If we have an array with an index table, we could do this. */ - /* not currently */ + /* not currently */ else if(RES_GET_TYPE(resB->fRes) == URES_ARRAY && resB->fHasFallback == TRUE) { /* here should go a first attempt to locate the key using index table */ const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status); @@ -2126,8 +2104,8 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c } else { *status = U_MISSING_RESOURCE_ERROR; } - } -#endif + } +#endif else { *status = U_RESOURCE_TYPE_MISMATCH; } @@ -2148,7 +2126,7 @@ ures_getUTF8StringByKey(const UResourceBundle *resB, /* TODO: clean from here down */ /** - * INTERNAL: Get the name of the first real locale (not placeholder) + * INTERNAL: Get the name of the first real locale (not placeholder) * that has resource bundle data. */ U_INTERNAL const char* U_EXPORT2 @@ -2165,17 +2143,17 @@ ures_getLocaleInternal(const UResourceBundle* resourceBundle, UErrorCode* status } } -U_CAPI const char* U_EXPORT2 -ures_getLocale(const UResourceBundle* resourceBundle, +U_CAPI const char* U_EXPORT2 +ures_getLocale(const UResourceBundle* resourceBundle, UErrorCode* status) { return ures_getLocaleInternal(resourceBundle, status); } -U_CAPI const char* U_EXPORT2 -ures_getLocaleByType(const UResourceBundle* resourceBundle, - ULocDataLocaleType type, +U_CAPI const char* U_EXPORT2 +ures_getLocaleByType(const UResourceBundle* resourceBundle, + ULocDataLocaleType type, UErrorCode* status) { if (status==NULL || U_FAILURE(*status)) { return NULL; @@ -2281,7 +2259,7 @@ ures_openNoDefault(const char* path, const char* localeID, UErrorCode* status) { } /** - * Opens a resource bundle without "canonicalizing" the locale name. No fallback will be performed + * Opens a resource bundle without "canonicalizing" the locale name. No fallback will be performed * or sought. However, alias substitution will happen! */ U_CAPI UResourceBundle* U_EXPORT2 @@ -2290,8 +2268,8 @@ ures_openDirect(const char* path, const char* localeID, UErrorCode* status) { } /** - * API: This function is used to open a resource bundle - * proper fallback chaining is executed while initialization. + * API: This function is used to open a resource bundle + * proper fallback chaining is executed while initialization. * The result is stored in cache for later fallback search. */ U_CAPI void U_EXPORT2 @@ -2323,7 +2301,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, return 0; } ures_getByKey(resourceBundle, resourceKey, &resData, status); - + if(resData.fResData.data != NULL) { int32_t result = res_countArrayItems(&resData.fResData, resData.fRes); ures_close(&resData); @@ -2345,7 +2323,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, * @see ures_getVersion * @internal */ -U_INTERNAL const char* U_EXPORT2 +U_INTERNAL const char* U_EXPORT2 ures_getVersionNumberInternal(const UResourceBundle *resourceBundle) { if (!resourceBundle) return NULL; @@ -2359,24 +2337,24 @@ ures_getVersionNumberInternal(const UResourceBundle *resourceBundle) int32_t len; const UChar* minor_version = ures_getStringByKey(resourceBundle, kVersionTag, &minor_len, &status); - + /* Determine the length of of the final version string. This is */ /* the length of the major part + the length of the separator */ /* (==1) + the length of the minor part (+ 1 for the zero byte at */ /* the end). */ len = (minor_len > 0) ? minor_len : 1; - + /* Allocate the string, and build it up. */ /* + 1 for zero byte */ - ((UResourceBundle *)resourceBundle)->fVersion = (char *)uprv_malloc(1 + len); + ((UResourceBundle *)resourceBundle)->fVersion = (char *)uprv_malloc(1 + len); /* Check for null pointer. */ if (((UResourceBundle *)resourceBundle)->fVersion == NULL) { return NULL; } - + if(minor_len > 0) { u_UCharsToChars(minor_version, resourceBundle->fVersion , minor_len); resourceBundle->fVersion[len] = '\0'; @@ -2430,7 +2408,10 @@ ures_loc_countLocales(UEnumeration *en, UErrorCode * /*status*/) { return ures_getSize(&ctx->installed); } -static const char* U_CALLCONV +U_CDECL_BEGIN + + +static const char * U_CALLCONV ures_loc_nextLocale(UEnumeration* en, int32_t* resultLength, UErrorCode* status) { @@ -2449,13 +2430,14 @@ ures_loc_nextLocale(UEnumeration* en, return result; } -static void U_CALLCONV -ures_loc_resetLocales(UEnumeration* en, +static void U_CALLCONV +ures_loc_resetLocales(UEnumeration* en, UErrorCode* /*status*/) { UResourceBundle *res = &((ULocalesContext *)en->context)->installed; ures_resetIterator(res); } +U_CDECL_END static const UEnumeration gLocalesEnum = { NULL, @@ -2494,7 +2476,7 @@ ures_openAvailableLocales(const char *path, UErrorCode *status) ures_getByKey(idx, INDEX_TAG, &myContext->installed, status); if(U_SUCCESS(*status)) { #if defined(URES_TREE_DEBUG) - fprintf(stderr, "Got %s::%s::[%s] : %s\n", + fprintf(stderr, "Got %s::%s::[%s] : %s\n", path, INDEX_LOCALE_NAME, INDEX_TAG, ures_getKey(&myContext->installed)); #endif en->context = myContext; @@ -2507,9 +2489,9 @@ ures_openAvailableLocales(const char *path, UErrorCode *status) uprv_free(en); en = NULL; } - + ures_close(idx); - + return en; } @@ -2546,17 +2528,17 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, } uloc_getBaseName(locid, base, 1024-1,&subStatus); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "getFunctionalEquivalent: \"%s\" [%s=%s] in %s - %s\n", + fprintf(stderr, "getFunctionalEquivalent: \"%s\" [%s=%s] in %s - %s\n", locid, keyword, kwVal, base, u_errorName(subStatus)); #endif ures_initStackObject(&bund1); ures_initStackObject(&bund2); - - + + uprv_strcpy(parent, base); uprv_strcpy(found, base); - if(isAvailable) { + if(isAvailable) { UEnumeration *locEnum = ures_openAvailableLocales(path, &subStatus); *isAvailable = TRUE; if (U_SUCCESS(subStatus)) { @@ -2569,7 +2551,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, *status = subStatus; return 0; } - + do { subStatus = U_ZERO_ERROR; res = ures_open(path, parent, &subStatus); @@ -2579,7 +2561,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, *isAvailable = FALSE; } isAvailable = NULL; /* only want to set this the first time around */ - + #if defined(URES_TREE_DEBUG) fprintf(stderr, "%s;%s -> %s [%s]\n", path?path:"ICUDATA", parent, u_errorName(subStatus), ures_getLocale(res, &subStatus)); #endif @@ -2599,21 +2581,21 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, if(U_SUCCESS(subStatus) && defLen) { u_UCharsToChars(defUstr, defVal, u_strlen(defUstr)); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> default %s=%s, %s\n", + fprintf(stderr, "%s;%s -> default %s=%s, %s\n", path?path:"ICUDATA", parent, keyword, defVal, u_errorName(subStatus)); #endif uprv_strcpy(defLoc, parent); if(kwVal[0]==0) { uprv_strcpy(kwVal, defVal); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> kwVal = %s\n", + fprintf(stderr, "%s;%s -> kwVal = %s\n", path?path:"ICUDATA", parent, keyword, kwVal); #endif } } } } - + subStatus = U_ZERO_ERROR; if (res != NULL) { @@ -2623,11 +2605,11 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, uloc_getParent(found,parent,sizeof(parent),&subStatus); ures_close(res); } while(!defVal[0] && *found && uprv_strcmp(found, "root") != 0 && U_SUCCESS(*status)); - + /* Now, see if we can find the kwVal collator.. start the search over.. */ uprv_strcpy(parent, base); uprv_strcpy(found, base); - + do { subStatus = U_ZERO_ERROR; res = ures_open(path, parent, &subStatus); @@ -2635,9 +2617,9 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, *isAvailable = FALSE; } isAvailable = NULL; /* only want to set this the first time around */ - + #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> %s (looking for %s)\n", + fprintf(stderr, "%s;%s -> %s (looking for %s)\n", path?path:"ICUDATA", parent, u_errorName(subStatus), kwVal); #endif if(U_FAILURE(subStatus)) { @@ -2654,7 +2636,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, #endif if(subStatus == U_ZERO_ERROR) { #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> full0 %s=%s, %s\n", + fprintf(stderr, "%s;%s -> full0 %s=%s, %s\n", path?path:"ICUDATA", parent, keyword, kwVal, u_errorName(subStatus)); #endif uprv_strcpy(full, parent); @@ -2667,14 +2649,14 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, int32_t defLen; /* look for default item */ #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> recalculating Default0\n", + fprintf(stderr, "%s;%s -> recalculating Default0\n", path?path:"ICUDATA", full); #endif defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus); if(U_SUCCESS(subStatus) && defLen) { u_UCharsToChars(defUstr, defVal, u_strlen(defUstr)); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> default0 %s=%s, %s\n", + fprintf(stderr, "%s;%s -> default0 %s=%s, %s\n", path?path:"ICUDATA", full, keyword, defVal, u_errorName(subStatus)); #endif uprv_strcpy(defLoc, full); @@ -2687,20 +2669,20 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, #endif } else { #if defined(URES_TREE_DEBUG) - fprintf(stderr, "err=%s in %s looking for %s\n", + fprintf(stderr, "err=%s in %s looking for %s\n", u_errorName(subStatus), parent, kwVal); #endif } } } - + subStatus = U_ZERO_ERROR; - + uprv_strcpy(found, parent); uloc_getParent(found,parent,1023,&subStatus); ures_close(res); } while(!full[0] && *found && U_SUCCESS(*status)); - + if((full[0]==0) && uprv_strcmp(kwVal, defVal)) { #if defined(URES_TREE_DEBUG) fprintf(stderr, "Failed to locate kw %s - try default %s\n", kwVal, defVal); @@ -2708,7 +2690,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, uprv_strcpy(kwVal, defVal); uprv_strcpy(parent, base); uprv_strcpy(found, base); - + do { /* search for 'default' named item */ subStatus = U_ZERO_ERROR; res = ures_open(path, parent, &subStatus); @@ -2716,7 +2698,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, *isAvailable = FALSE; } isAvailable = NULL; /* only want to set this the first time around */ - + #if defined(URES_TREE_DEBUG) fprintf(stderr, "%s;%s -> %s (looking for default %s)\n", path?path:"ICUDATA", parent, u_errorName(subStatus), kwVal); @@ -2736,21 +2718,21 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, if(*full == 0) { uprv_strcpy(full, "root"); } - + /* now, recalculate default kw if need be */ if(uprv_strlen(defLoc) > uprv_strlen(full)) { const UChar *defUstr; int32_t defLen; /* look for default item */ #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> recalculating Default1\n", + fprintf(stderr, "%s;%s -> recalculating Default1\n", path?path:"ICUDATA", full); #endif defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus); if(U_SUCCESS(subStatus) && defLen) { u_UCharsToChars(defUstr, defVal, u_strlen(defUstr)); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s;%s -> default %s=%s, %s\n", + fprintf(stderr, "%s;%s -> default %s=%s, %s\n", path?path:"ICUDATA", full, keyword, defVal, u_errorName(subStatus)); #endif uprv_strcpy(defLoc, full); @@ -2765,13 +2747,13 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, } } subStatus = U_ZERO_ERROR; - + uprv_strcpy(found, parent); uloc_getParent(found,parent,1023,&subStatus); ures_close(res); } while(!full[0] && *found && U_SUCCESS(*status)); } - + if(U_SUCCESS(*status)) { if(!full[0]) { #if defined(URES_TREE_DEBUG) @@ -2781,7 +2763,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, } else if(omitDefault) { #if defined(URES_TREE_DEBUG) fprintf(stderr,"Trim? full=%s, defLoc=%s, found=%s\n", full, defLoc, found); -#endif +#endif if(uprv_strlen(defLoc) <= uprv_strlen(full)) { /* found the keyword in a *child* of where the default tag was present. */ if(!uprv_strcmp(kwVal, defVal)) { /* if the requested kw is default, */ @@ -2807,10 +2789,10 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, } } /* we found the default locale - no need to repeat it.*/ - + ures_close(&bund1); ures_close(&bund2); - + length = (int32_t)uprv_strlen(found); if(U_SUCCESS(*status)) { @@ -2819,7 +2801,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, uprv_strncpy(result, found, copyLength); } if(length == 0) { - *status = U_MISSING_RESOURCE_ERROR; + *status = U_MISSING_RESOURCE_ERROR; } } else { length = 0; @@ -2833,58 +2815,58 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) { #define VALUES_BUF_SIZE 2048 #define VALUES_LIST_SIZE 512 - + char valuesBuf[VALUES_BUF_SIZE]; int32_t valuesIndex = 0; const char *valuesList[VALUES_LIST_SIZE]; int32_t valuesCount = 0; - + const char *locale; int32_t locLen; - + UEnumeration *locs = NULL; - + UResourceBundle item; UResourceBundle subItem; - + ures_initStackObject(&item); ures_initStackObject(&subItem); locs = ures_openAvailableLocales(path, status); - + if(U_FAILURE(*status)) { ures_close(&item); ures_close(&subItem); return NULL; } - + valuesBuf[0]=0; valuesBuf[1]=0; - + while((locale = uenum_next(locs, &locLen, status))) { UResourceBundle *bund = NULL; UResourceBundle *subPtr = NULL; UErrorCode subStatus = U_ZERO_ERROR; /* don't fail if a bundle is unopenable */ bund = ures_openDirect(path, locale, &subStatus); - + #if defined(URES_TREE_DEBUG) if(!bund || U_FAILURE(subStatus)) { - fprintf(stderr, "%s-%s values: Can't open %s locale - skipping. (%s)\n", + fprintf(stderr, "%s-%s values: Can't open %s locale - skipping. (%s)\n", path?path:"", keyword, locale, u_errorName(subStatus)); } #endif - + ures_getByKey(bund, keyword, &item, &subStatus); - + if(!bund || U_FAILURE(subStatus)) { #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s-%s values: Can't find in %s - skipping. (%s)\n", + fprintf(stderr, "%s-%s values: Can't find in %s - skipping. (%s)\n", path?path:"", keyword, locale, u_errorName(subStatus)); #endif ures_close(bund); bund = NULL; continue; } - + while((subPtr = ures_getNextResource(&item,&subItem,&subStatus)) && U_SUCCESS(subStatus)) { const char *k; @@ -2925,12 +2907,12 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) ures_close(bund); } valuesBuf[valuesIndex++] = 0; /* terminate */ - + ures_close(&item); ures_close(&subItem); uenum_close(locs); #if defined(URES_TREE_DEBUG) - fprintf(stderr, "%s: size %d, #%d\n", u_errorName(*status), + fprintf(stderr, "%s: size %d, #%d\n", u_errorName(*status), valuesIndex, valuesCount); #endif return uloc_openKeywordList(valuesBuf, valuesIndex, status); @@ -3005,7 +2987,7 @@ ures_getVersionByKey(const UResourceBundle* res, const char *key, UVersionInfo v str = ures_getStringByKey(res, key, &len, status); if(U_SUCCESS(*status)) { u_versionFromUString(ver, str); - } + } } /* eof */ diff --git a/deps/icu-small/source/common/uresdata.cpp b/deps/icu-small/source/common/uresdata.cpp index 00231d7fc20018..44654dcf57973c 100644 --- a/deps/icu-small/source/common/uresdata.cpp +++ b/deps/icu-small/source/common/uresdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1999-2016, International Business Machines Corporation @@ -380,6 +382,36 @@ UBool isNoInheritanceMarker(const ResourceData *pResData, Resource res) { return FALSE; } +int32_t getStringArray(const ResourceData *pResData, const icu::ResourceArray &array, + icu::UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) { + if(U_FAILURE(errorCode)) { + return 0; + } + if(dest == NULL ? capacity != 0 : capacity < 0) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + int32_t length = array.getSize(); + if(length == 0) { + return 0; + } + if(length > capacity) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + return length; + } + for(int32_t i = 0; i < length; ++i) { + int32_t sLength; + const UChar *s = res_getString(pResData, array.internalGetResource(pResData, i), &sLength); + if(s == NULL) { + errorCode = U_RESOURCE_TYPE_MISMATCH; + return 0; + } + dest[i].setTo(TRUE, s, sLength); + } + return length; +} + } // namespace U_CAPI const UChar * U_EXPORT2 @@ -463,42 +495,6 @@ res_countArrayItems(const ResourceData *pResData, Resource res) { } } -namespace { - -int32_t getArrayLength(const ResourceData *pResData, Resource res) { - uint32_t offset=RES_GET_OFFSET(res); - if(offset == 0) { - return 0; - } - int32_t type = RES_GET_TYPE(res); - if(type == URES_ARRAY) { - return *(pResData->pRoot+offset); - } else if(type == URES_ARRAY16) { - return pResData->p16BitUnits[offset]; - } else { - return 0; - } -} - -int32_t getTableLength(const ResourceData *pResData, Resource res) { - uint32_t offset=RES_GET_OFFSET(res); - if(offset == 0) { - return 0; - } - int32_t type = RES_GET_TYPE(res); - if(type == URES_TABLE) { - return *((const uint16_t *)(pResData->pRoot+offset)); - } else if(type == URES_TABLE16) { - return pResData->p16BitUnits[offset]; - } else if(type == URES_TABLE32) { - return *(pResData->pRoot+offset); - } else { - return 0; - } -} - -} // namespace - U_NAMESPACE_BEGIN ResourceDataValue::~ResourceDataValue() {} @@ -571,6 +567,130 @@ const uint8_t *ResourceDataValue::getBinary(int32_t &length, UErrorCode &errorCo return b; } +ResourceArray ResourceDataValue::getArray(UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return ResourceArray(); + } + const uint16_t *items16 = NULL; + const Resource *items32 = NULL; + uint32_t offset=RES_GET_OFFSET(res); + int32_t length = 0; + switch(RES_GET_TYPE(res)) { + case URES_ARRAY: + if (offset!=0) { // empty if offset==0 + items32 = (const Resource *)pResData->pRoot+offset; + length = *items32++; + } + break; + case URES_ARRAY16: + items16 = pResData->p16BitUnits+offset; + length = *items16++; + break; + default: + errorCode = U_RESOURCE_TYPE_MISMATCH; + return ResourceArray(); + } + return ResourceArray(items16, items32, length); +} + +ResourceTable ResourceDataValue::getTable(UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return ResourceTable(); + } + const uint16_t *keys16 = NULL; + const int32_t *keys32 = NULL; + const uint16_t *items16 = NULL; + const Resource *items32 = NULL; + uint32_t offset = RES_GET_OFFSET(res); + int32_t length = 0; + switch(RES_GET_TYPE(res)) { + case URES_TABLE: + if (offset != 0) { // empty if offset==0 + keys16 = (const uint16_t *)(pResData->pRoot+offset); + length = *keys16++; + items32 = (const Resource *)(keys16+length+(~length&1)); + } + break; + case URES_TABLE16: + keys16 = pResData->p16BitUnits+offset; + length = *keys16++; + items16 = keys16 + length; + break; + case URES_TABLE32: + if (offset != 0) { // empty if offset==0 + keys32 = pResData->pRoot+offset; + length = *keys32++; + items32 = (const Resource *)keys32 + length; + } + break; + default: + errorCode = U_RESOURCE_TYPE_MISMATCH; + return ResourceTable(); + } + return ResourceTable(keys16, keys32, items16, items32, length); +} + +UBool ResourceDataValue::isNoInheritanceMarker() const { + return ::isNoInheritanceMarker(pResData, res); +} + +int32_t ResourceDataValue::getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const { + return ::getStringArray(pResData, getArray(errorCode), dest, capacity, errorCode); +} + +int32_t ResourceDataValue::getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const { + if(URES_IS_ARRAY(res)) { + return ::getStringArray(pResData, getArray(errorCode), dest, capacity, errorCode); + } + if(U_FAILURE(errorCode)) { + return 0; + } + if(dest == NULL ? capacity != 0 : capacity < 0) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + if(capacity < 1) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + return 1; + } + int32_t sLength; + const UChar *s = res_getString(pResData, res, &sLength); + if(s != NULL) { + dest[0].setTo(TRUE, s, sLength); + return 1; + } + errorCode = U_RESOURCE_TYPE_MISMATCH; + return 0; +} + +UnicodeString ResourceDataValue::getStringOrFirstOfArray(UErrorCode &errorCode) const { + UnicodeString us; + if(U_FAILURE(errorCode)) { + return us; + } + int32_t sLength; + const UChar *s = res_getString(pResData, res, &sLength); + if(s != NULL) { + us.setTo(TRUE, s, sLength); + return us; + } + ResourceArray array = getArray(errorCode); + if(U_FAILURE(errorCode)) { + return us; + } + if(array.getSize() > 0) { + s = res_getString(pResData, array.internalGetResource(pResData, 0), &sLength); + if(s != NULL) { + us.setTo(TRUE, s, sLength); + return us; + } + } + errorCode = U_RESOURCE_TYPE_MISMATCH; + return us; +} + U_NAMESPACE_END static Resource @@ -691,91 +811,26 @@ res_getResource(const ResourceData *pResData, const char *key) { return res_getTableItemByKey(pResData, pResData->rootRes, &idx, &realKey); } -// TODO: Ported from Java, but enumerating at this low level may prevent us -// from doing necessary things, like resolving aliases, -// which need access to higher-level UResourceBundle code. -// Consider porting the low-level Container/Array/Table classes from Java, -// with getters for keys and values, -// and doing the enumeration in the higher-level code on top of those accessors. -U_CFUNC void -ures_getAllTableItems(const ResourceData *pResData, Resource table, - icu::ResourceDataValue &value, icu::ResourceTableSink &sink, - UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { return; } - const uint16_t *keys16 = NULL; - const int32_t *keys32 = NULL; - const uint16_t *items16 = NULL; - const Resource *items32 = NULL; - uint32_t offset = RES_GET_OFFSET(table); - int32_t length = 0; - switch(RES_GET_TYPE(table)) { - case URES_TABLE: { - if (offset != 0) { /* empty if offset==0 */ - keys16 = (const uint16_t *)(pResData->pRoot+offset); - length = *keys16++; - items32 = (const Resource *)(keys16+length+(~length&1)); - } - break; - } - case URES_TABLE16: { - keys16 = pResData->p16BitUnits+offset; - length = *keys16++; - items16 = keys16 + length; - break; - } - case URES_TABLE32: { - if (offset != 0) { /* empty if offset==0 */ - keys32 = pResData->pRoot+offset; - length = *keys32++; - items32 = (const Resource *)keys32 + length; - } - break; - } - default: - errorCode = U_RESOURCE_TYPE_MISMATCH; - return; - } - for (int32_t i = 0; i < length; ++i) { - const char *key; +UBool icu::ResourceTable::getKeyAndValue(int32_t i, + const char *&key, icu::ResourceValue &value) const { + if(0 <= i && i < length) { + icu::ResourceDataValue &rdValue = static_cast(value); if (keys16 != NULL) { - key=RES_GET_KEY16(pResData, keys16[i]); + key = RES_GET_KEY16(rdValue.pResData, keys16[i]); } else { - key=RES_GET_KEY32(pResData, keys32[i]); + key = RES_GET_KEY32(rdValue.pResData, keys32[i]); } Resource res; if (items16 != NULL) { - res = makeResourceFrom16(pResData, items16[i]); + res = makeResourceFrom16(rdValue.pResData, items16[i]); } else { res = items32[i]; } - int32_t type = RES_GET_TYPE(res); - if (URES_IS_ARRAY(type)) { - int32_t numItems = getArrayLength(pResData, res); - icu::ResourceArraySink *subSink = sink.getOrCreateArraySink(key, numItems, errorCode); - if (subSink != NULL) { - ures_getAllArrayItems(pResData, res, value, *subSink, errorCode); - } - } else if (URES_IS_TABLE(type)) { - int32_t numItems = getTableLength(pResData, res); - icu::ResourceTableSink *subSink = sink.getOrCreateTableSink(key, numItems, errorCode); - if (subSink != NULL) { - ures_getAllTableItems(pResData, res, value, *subSink, errorCode); - } - /* TODO: settle on how to deal with aliases, port to Java - } else if (type == URES_ALIAS) { - // aliases not handled in resource enumeration - errorCode = U_UNSUPPORTED_ERROR; - return; */ - } else if (isNoInheritanceMarker(pResData, res)) { - sink.putNoFallback(key, errorCode); - } else { - value.setResource(res); - sink.put(key, value, errorCode); - } - if(U_FAILURE(errorCode)) { return; } + rdValue.setResource(res); + return TRUE; } - sink.leave(errorCode); + return FALSE; } U_CAPI Resource U_EXPORT2 @@ -805,65 +860,21 @@ res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexR) { return RES_BOGUS; } -U_CFUNC void -ures_getAllArrayItems(const ResourceData *pResData, Resource array, - icu::ResourceDataValue &value, icu::ResourceArraySink &sink, - UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { return; } - const uint16_t *items16 = NULL; - const Resource *items32 = NULL; - uint32_t offset=RES_GET_OFFSET(array); - int32_t length = 0; - switch(RES_GET_TYPE(array)) { - case URES_ARRAY: { - if (offset!=0) { /* empty if offset==0 */ - items32 = (const Resource *)pResData->pRoot+offset; - length = *items32++; - } - break; - } - case URES_ARRAY16: { - items16 = pResData->p16BitUnits+offset; - length = *items16++; - break; - } - default: - errorCode = U_RESOURCE_TYPE_MISMATCH; - return; +uint32_t icu::ResourceArray::internalGetResource(const ResourceData *pResData, int32_t i) const { + if (items16 != NULL) { + return makeResourceFrom16(pResData, items16[i]); + } else { + return items32[i]; } +} - for (int32_t i = 0; i < length; ++i) { - Resource res; - if (items16 != NULL) { - res = makeResourceFrom16(pResData, items16[i]); - } else { - res = items32[i]; - } - int32_t type = RES_GET_TYPE(res); - if (URES_IS_ARRAY(type)) { - int32_t numItems = getArrayLength(pResData, res); - icu::ResourceArraySink *subSink = sink.getOrCreateArraySink(i, numItems, errorCode); - if (subSink != NULL) { - ures_getAllArrayItems(pResData, res, value, *subSink, errorCode); - } - } else if (URES_IS_TABLE(type)) { - int32_t numItems = getTableLength(pResData, res); - icu::ResourceTableSink *subSink = sink.getOrCreateTableSink(i, numItems, errorCode); - if (subSink != NULL) { - ures_getAllTableItems(pResData, res, value, *subSink, errorCode); - } - /* TODO: settle on how to deal with aliases, port to Java - } else if (type == URES_ALIAS) { - // aliases not handled in resource enumeration - errorCode = U_UNSUPPORTED_ERROR; - return; */ - } else { - value.setResource(res); - sink.put(i, value, errorCode); - } - if(U_FAILURE(errorCode)) { return; } +UBool icu::ResourceArray::getValue(int32_t i, icu::ResourceValue &value) const { + if(0 <= i && i < length) { + icu::ResourceDataValue &rdValue = static_cast(value); + rdValue.setResource(internalGetResource(rdValue.pResData, i)); + return TRUE; } - sink.leave(errorCode); + return FALSE; } U_CFUNC Resource @@ -884,13 +895,13 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch if(!URES_IS_CONTAINER(type)) { return RES_BOGUS; } - + while(nextSepP && *pathP && t1 != RES_BOGUS && URES_IS_CONTAINER(type)) { /* Iteration stops if: the path has been consumed, we found a non-existing * resource (t1 == RES_BOGUS) or we found a scalar resource (including alias) */ nextSepP = uprv_strchr(pathP, RES_PATH_SEPARATOR); - /* if there are more separators, terminate string + /* if there are more separators, terminate string * and set path to the remaining part of the string */ if(nextSepP != NULL) { @@ -909,7 +920,7 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch if(URES_IS_TABLE(type)) { *key = pathP; t2 = res_getTableItemByKey(pResData, t1, &indexR, key); - if(t2 == RES_BOGUS) { + if(t2 == RES_BOGUS) { /* if we fail to get the resource by key, maybe we got an index */ indexR = uprv_strtol(pathP, &closeIndex, 10); if(*closeIndex == 0) { @@ -974,7 +985,7 @@ typedef struct Row { int32_t keyIndex, sortIndex; } Row; -static int32_t +static int32_t U_CALLCONV ures_compareRows(const void *context, const void *left, const void *right) { const char *keyChars=(const char *)context; return (int32_t)uprv_strcmp(keyChars+((const Row *)left)->keyIndex, diff --git a/deps/icu-small/source/common/uresdata.h b/deps/icu-small/source/common/uresdata.h index 1afa77c0748eb4..ae7d9a817d2b2f 100644 --- a/deps/icu-small/source/common/uresdata.h +++ b/deps/icu-small/source/common/uresdata.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 1999-2015, International Business Machines +* Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: uresdata.h @@ -379,7 +381,7 @@ enum { /* * Structure for a single, memory-mapped ResourceBundle. */ -typedef struct { +typedef struct ResourceData { UDataMemory *data; const int32_t *pRoot; const uint16_t *p16BitUnits; @@ -486,6 +488,14 @@ class ResourceDataValue : public ResourceValue { virtual uint32_t getUInt(UErrorCode &errorCode) const; virtual const int32_t *getIntVector(int32_t &length, UErrorCode &errorCode) const; virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const; + virtual ResourceArray getArray(UErrorCode &errorCode) const; + virtual ResourceTable getTable(UErrorCode &errorCode) const; + virtual UBool isNoInheritanceMarker() const; + virtual int32_t getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const; + virtual int32_t getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const; + virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const; const ResourceData *pResData; @@ -495,24 +505,6 @@ class ResourceDataValue : public ResourceValue { U_NAMESPACE_END -/** - * @param value will be set during enumeration; input contents is ignored - * @param sink receives all table item key-value pairs - */ -U_CFUNC void -ures_getAllTableItems(const ResourceData *pResData, Resource table, - icu::ResourceDataValue &value, icu::ResourceTableSink &sink, - UErrorCode &errorCode); - -/** - * @param value will be set during enumeration; input contents is ignored - * @param sink receives all array item values - */ -U_CFUNC void -ures_getAllArrayItems(const ResourceData *pResData, Resource array, - icu::ResourceDataValue &value, icu::ResourceArraySink &sink, - UErrorCode &errorCode); - #endif /* __cplusplus */ /** diff --git a/deps/icu-small/source/common/uresimp.h b/deps/icu-small/source/common/uresimp.h index ce0b03ccf8233f..5645ee92165c00 100644 --- a/deps/icu-small/source/common/uresimp.h +++ b/deps/icu-small/source/common/uresimp.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** -* Copyright (C) 2000-2015, International Business Machines +* Copyright (C) 2000-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -112,10 +114,10 @@ U_CFUNC UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle * Returns a resource that can be located using the pathToResource argument. One needs optional package, locale * and path inside the locale, for example: "/myData/en/zoneStrings/3". Keys and indexes are supported. Keys * need to reference data in named structures, while indexes can reference both named and anonymous resources. - * Features a fill-in parameter. - * + * Features a fill-in parameter. + * * Note, this function does NOT have a syntax for specifying items within a tree. May want to consider a - * syntax that delineates between package/tree and resource. + * syntax that delineates between package/tree and resource. * * @param pathToResource a path that will lead to the requested resource * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. @@ -124,16 +126,16 @@ U_CFUNC UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it */ U_CAPI UResourceBundle* U_EXPORT2 -ures_findResource(const char* pathToResource, - UResourceBundle *fillIn, UErrorCode *status); +ures_findResource(const char* pathToResource, + UResourceBundle *fillIn, UErrorCode *status); /** - * Returns a sub resource that can be located using the pathToResource argument. One needs a path inside + * Returns a sub resource that can be located using the pathToResource argument. One needs a path inside * the supplied resource, for example, if you have "en_US" resource bundle opened, you might ask for * "zoneStrings/3". Keys and indexes are supported. Keys - * need to reference data in named structures, while indexes can reference both + * need to reference data in named structures, while indexes can reference both * named and anonymous resources. - * Features a fill-in parameter. + * Features a fill-in parameter. * * @param resourceBundle a resource * @param pathToResource a path that will lead to the requested resource @@ -143,8 +145,8 @@ ures_findResource(const char* pathToResource, * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it */ U_CAPI UResourceBundle* U_EXPORT2 -ures_findSubResource(const UResourceBundle *resB, - char* pathToResource, +ures_findSubResource(const UResourceBundle *resB, + char* pathToResource, UResourceBundle *fillIn, UErrorCode *status); /** @@ -155,23 +157,23 @@ ures_findSubResource(const UResourceBundle *resB, * @param resName top level resource. Example: "collations" * @param keyword locale keyword. Example: "collation" * @param locid The requested locale - * @param isAvailable If non-null, pointer to fillin parameter that indicates whether the - * requested locale was available. The locale is defined as 'available' if it physically + * @param isAvailable If non-null, pointer to fillin parameter that indicates whether the + * requested locale was available. The locale is defined as 'available' if it physically * exists within the specified tree. * @param omitDefault if TRUE, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE' * @param status error code - * @return the actual buffer size needed for the full locale. If it's greater + * @return the actual buffer size needed for the full locale. If it's greater * than resultCapacity, the returned full name will be truncated and an error code will be returned. */ U_CAPI int32_t U_EXPORT2 -ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, +ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, const char *path, const char *resName, const char *keyword, const char *locid, UBool *isAvailable, UBool omitDefault, UErrorCode *status); /** * Given a tree path and keyword, return a string enumeration of all possible values for that keyword. * @param path path to the tree, or NULL for ICU data - * @param keyword a particular keyword to consider, must match a top level resource name + * @param keyword a particular keyword to consider, must match a top level resource name * within the tree. * @param status error code */ @@ -191,14 +193,14 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) * Alternatively, you can supply a struct to be filled by this function. * @param status: fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it */ -U_CAPI UResourceBundle* U_EXPORT2 -ures_getByKeyWithFallback(const UResourceBundle *resB, - const char* inKey, - UResourceBundle *fillIn, +U_CAPI UResourceBundle* U_EXPORT2 +ures_getByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, + UResourceBundle *fillIn, UErrorCode *status); @@ -212,25 +214,21 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, * @param inKey a key associated with the requested resource * @param status: fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it */ -U_CAPI const UChar* U_EXPORT2 -ures_getStringByKeyWithFallback(const UResourceBundle *resB, - const char* inKey, +U_CAPI const UChar* U_EXPORT2 +ures_getStringByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, int32_t* len, UErrorCode *status); #ifdef __cplusplus U_CAPI void U_EXPORT2 -ures_getAllArrayItemsWithFallback(const UResourceBundle *bundle, const char *path, - icu::ResourceArraySink &sink, UErrorCode &errorCode); - -U_CAPI void U_EXPORT2 -ures_getAllTableItemsWithFallback(const UResourceBundle *bundle, const char *path, - icu::ResourceTableSink &sink, UErrorCode &errorCode); +ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path, + icu::ResourceSink &sink, UErrorCode &errorCode); #endif /* __cplusplus */ @@ -257,13 +255,13 @@ ures_getVersionByKey(const UResourceBundle *resB, * The caller does not own this string. * @see ures_getVersion */ -U_CAPI const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ures_getVersionNumberInternal(const UResourceBundle *resourceBundle); /** * Return the name of the Locale associated with this ResourceBundle. This API allows - * you to query for the real locale of the resource. For example, if you requested - * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. + * you to query for the real locale of the resource. For example, if you requested + * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. * For subresources, the locale where this resource comes from will be returned. * If fallback has occured, getLocale will reflect this. * @@ -273,8 +271,8 @@ ures_getVersionNumberInternal(const UResourceBundle *resourceBundle); * @param status just for catching illegal arguments * @return A Locale name */ -U_CAPI const char* U_EXPORT2 -ures_getLocaleInternal(const UResourceBundle* resourceBundle, +U_CAPI const char* U_EXPORT2 +ures_getLocaleInternal(const UResourceBundle* resourceBundle, UErrorCode* status); #endif /*URESIMP_H*/ diff --git a/deps/icu-small/source/common/ureslocs.h b/deps/icu-small/source/common/ureslocs.h index e89ddb95ff69dd..85dd8fb4b7f211 100644 --- a/deps/icu-small/source/common/ureslocs.h +++ b/deps/icu-small/source/common/ureslocs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2009-2014 International Business Machines diff --git a/deps/icu-small/source/common/usc_impl.c b/deps/icu-small/source/common/usc_impl.c index a66e0d5edca020..1fff0c4482d7f3 100644 --- a/deps/icu-small/source/common/usc_impl.c +++ b/deps/icu-small/source/common/usc_impl.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines @@ -77,7 +79,7 @@ static void push(UScriptRun *scriptRun, int32_t pairIndex, UScriptCode scriptCod { scriptRun->pushCount = LIMIT_INC(scriptRun->pushCount); scriptRun->fixupCount = LIMIT_INC(scriptRun->fixupCount); - + scriptRun->parenSP = INC1(scriptRun->parenSP); scriptRun->parenStack[scriptRun->parenSP].pairIndex = pairIndex; scriptRun->parenStack[scriptRun->parenSP].scriptCode = scriptCode; @@ -88,14 +90,14 @@ static void pop(UScriptRun *scriptRun) if (STACK_IS_EMPTY(scriptRun)) { return; } - + if (scriptRun->fixupCount > 0) { scriptRun->fixupCount -= 1; } - + scriptRun->pushCount -= 1; scriptRun->parenSP = DEC1(scriptRun->parenSP); - + /* If the stack is now empty, reset the stack pointers to their initial values. */ @@ -107,7 +109,7 @@ static void pop(UScriptRun *scriptRun) static void fixup(UScriptRun *scriptRun, UScriptCode scriptCode) { int32_t fixupSP = DEC(scriptRun->parenSP, scriptRun->fixupCount); - + while (scriptRun->fixupCount-- > 0) { fixupSP = INC1(fixupSP); scriptRun->parenStack[fixupSP].scriptCode = scriptCode; @@ -261,7 +263,7 @@ uscript_nextRun(UScriptRun *scriptRun, int32_t *pRunStart, int32_t *pRunLimit, U if (scriptRun == NULL || scriptRun->scriptLimit >= scriptRun->textLength) { return FALSE; } - + SYNC_FIXUP(scriptRun); scriptRun->scriptCode = USCRIPT_COMMON; diff --git a/deps/icu-small/source/common/usc_impl.h b/deps/icu-small/source/common/usc_impl.h index 2e972b0e9a9378..7c9c5e095052ff 100644 --- a/deps/icu-small/source/common/usc_impl.h +++ b/deps/icu-small/source/common/usc_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/uscript.c b/deps/icu-small/source/common/uscript.c index 3700099cd2a70e..336e185799ab96 100644 --- a/deps/icu-small/source/common/uscript.c +++ b/deps/icu-small/source/common/uscript.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2014, International Business Machines diff --git a/deps/icu-small/source/common/uscript_props.cpp b/deps/icu-small/source/common/uscript_props.cpp index fa7f78afd99c2e..20c7cdce2ffad1 100644 --- a/deps/icu-small/source/common/uscript_props.cpp +++ b/deps/icu-small/source/common/uscript_props.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2013-2015, International Business Machines +* Copyright (C) 2013-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: uscript_props.cpp @@ -72,7 +74,7 @@ const int32_t SCRIPT_PROPS[] = { 0x1826 | ASPIRATIONAL, // Mong 0x1000 | RECOMMENDED | LB_LETTERS, // Mymr 0x168F | EXCLUSION, // Ogam - 0x10308 | EXCLUSION, // Ital + 0x10300 | EXCLUSION, // Ital 0x0B15 | RECOMMENDED, // Orya 0x16A0 | EXCLUSION, // Runr 0x0D85 | RECOMMENDED, // Sinh @@ -102,7 +104,7 @@ const int32_t SCRIPT_PROPS[] = { 0x10A00 | EXCLUSION | RTL, // Khar 0xA800 | LIMITED_USE, // Sylo 0x1980 | LIMITED_USE | LB_LETTERS, // Talu - 0x2D5E | ASPIRATIONAL, // Tfng + 0x2D30 | ASPIRATIONAL, // Tfng 0x103A0 | EXCLUSION, // Xpeo 0x1B05 | LIMITED_USE, // Bali 0x1BC0 | LIMITED_USE, // Batk @@ -129,7 +131,7 @@ const int32_t SCRIPT_PROPS[] = { 0x0840 | LIMITED_USE | RTL, // Mand 0, 0x10980 | EXCLUSION | RTL, // Mero - 0x07D8 | LIMITED_USE | RTL, // Nkoo + 0x07CA | LIMITED_USE | RTL, // Nkoo 0x10C00 | EXCLUSION | RTL, // Orkh 0x1036B | EXCLUSION, // Perm 0xA840 | EXCLUSION, // Phag @@ -146,7 +148,7 @@ const int32_t SCRIPT_PROPS[] = { 0x12000 | EXCLUSION, // Xsux 0, 0xFDD0 | UNKNOWN, // Zzzz - 0x102B7 | EXCLUSION, // Cari + 0x102A0 | EXCLUSION, // Cari 0x304B | RECOMMENDED | LB_LETTERS, // Jpan 0x1A20 | LIMITED_USE | LB_LETTERS, // Lana 0x10280 | EXCLUSION, // Lyci @@ -163,7 +165,7 @@ const int32_t SCRIPT_PROPS[] = { 0x11103 | LIMITED_USE, // Cakm 0xAC00 | RECOMMENDED, // Kore 0x11083 | EXCLUSION, // Kthi - 0x10AC1 | EXCLUSION | RTL, // Mani + 0x10AD8 | EXCLUSION | RTL, // Mani 0x10B60 | EXCLUSION | RTL, // Phli 0x10B8F | EXCLUSION | RTL, // Phlp 0, @@ -173,7 +175,7 @@ const int32_t SCRIPT_PROPS[] = { 0, 0, 0xA6A0 | LIMITED_USE, // Bamu - 0xA4E8 | LIMITED_USE, // Lisu + 0xA4D0 | LIMITED_USE, // Lisu 0, 0x10A60 | EXCLUSION | RTL, // Sarb 0x16AE6 | EXCLUSION, // Bass @@ -196,7 +198,7 @@ const int32_t SCRIPT_PROPS[] = { 0x11183 | EXCLUSION, // Shrd 0x110D0 | EXCLUSION, // Sora 0x11680 | EXCLUSION, // Takr - 0, + 0x18229 | EXCLUSION | LB_LETTERS, // Tang 0, 0x14400 | EXCLUSION, // Hluw 0x11208 | EXCLUSION, // Khoj @@ -209,6 +211,14 @@ const int32_t SCRIPT_PROPS[] = { 0x1128F | EXCLUSION, // Mult 0x11AC0 | EXCLUSION, // Pauc 0x1158E | EXCLUSION, // Sidd + 0x1E909 | LIMITED_USE | RTL | CASED, // Adlm + 0x11C0E | EXCLUSION, // Bhks + 0x11C72 | EXCLUSION, // Marc + 0x11412 | LIMITED_USE, // Newa + 0x104B5 | LIMITED_USE | CASED, // Osge + 0x5B57 | RECOMMENDED | LB_LETTERS, // Hanb + 0x1112 | RECOMMENDED, // Jamo + 0, // End copy-paste from parsescriptmetadata.py }; diff --git a/deps/icu-small/source/common/uset.cpp b/deps/icu-small/source/common/uset.cpp index 717ea0430aaa4a..dbbf6944cd4973 100644 --- a/deps/icu-small/source/common/uset.cpp +++ b/deps/icu-small/source/common/uset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -81,7 +83,7 @@ uset_add(USet* set, UChar32 c) { U_CAPI void U_EXPORT2 uset_addRange(USet* set, UChar32 start, UChar32 end) { - ((UnicodeSet*) set)->UnicodeSet::add(start, end); + ((UnicodeSet*) set)->UnicodeSet::add(start, end); } U_CAPI void U_EXPORT2 @@ -525,40 +527,40 @@ uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, // efficiency. // --- // #define USET_GROW_DELTA 20 -// +// // static int32_t // findChar(const UChar32* array, int32_t length, UChar32 c) { // int32_t i; -// +// // /* check the last range limit first for more efficient appending */ // if(length>0) { // if(c>=array[length-1]) { // return length; // } -// +// // /* do not check the last range limit again in the loop below */ // --length; // } -// +// // for(i=0; i=array[i]; ++i) {} // return i; // } -// +// // static UBool // addRemove(USet* set, UChar32 c, int32_t doRemove) { // int32_t i, length, more; -// +// // if(set==NULL || (uint32_t)c>0x10ffff) { // return FALSE; // } -// +// // length=set->length; // i=findChar(set->array, length, c); // if((i&1)^doRemove) { // /* c is already in the set */ // return TRUE; // } -// +// // /* how many more array items do we need? */ // if(iarray[i]) { // /* c is just before the following range, extend that in-place by one */ @@ -598,7 +600,7 @@ uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, // /* insert two range limits c, c+1 */ // more=2; // } -// +// // /* insert range limits */ // if(length+more>set->capacity) { // /* reallocate */ @@ -609,13 +611,13 @@ uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, // } // set->capacity=newCapacity; // uprv_memcpy(newArray, set->array, length*4); -// +// // if(set->array!=set->staticBuffer) { // uprv_free(set->array); // } // set->array=newArray; // } -// +// // if(iarray+i+more, set->array+i, (length-i)*4); // } @@ -624,15 +626,15 @@ uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, // set->array[i+1]=c+1; // } // set->length+=more; -// +// // return TRUE; // } -// +// // U_CAPI UBool U_EXPORT2 // uset_add(USet* set, UChar32 c) { // return addRemove(set, c, 0); // } -// +// // U_CAPI void U_EXPORT2 // uset_remove(USet* set, UChar32 c) { // addRemove(set, c, 1); diff --git a/deps/icu-small/source/common/uset_imp.h b/deps/icu-small/source/common/uset_imp.h index a7171ad715765c..703c881ddde1d7 100644 --- a/deps/icu-small/source/common/uset_imp.h +++ b/deps/icu-small/source/common/uset_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -57,3 +59,4 @@ typedef struct USetAdder USetAdder; U_CDECL_END #endif + diff --git a/deps/icu-small/source/common/uset_props.cpp b/deps/icu-small/source/common/uset_props.cpp index ccbaf91e34eeac..fd48f45a5fe15f 100644 --- a/deps/icu-small/source/common/uset_props.cpp +++ b/deps/icu-small/source/common/uset_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -67,13 +69,13 @@ uset_openPatternOptions(const UChar* pattern, int32_t patternLength, } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_applyPattern(USet *set, const UChar *pattern, int32_t patternLength, uint32_t options, UErrorCode *status){ - // status code needs to be checked since we + // status code needs to be checked since we // dereference it if(status == NULL || U_FAILURE(*status)){ return 0; @@ -90,9 +92,9 @@ uset_applyPattern(USet *set, UnicodeString pat(pattern, patternLength); ParsePosition pos; - + ((UnicodeSet*) set)->applyPattern(pat, pos, options, NULL, *status); - + return pos.getIndex(); } diff --git a/deps/icu-small/source/common/usetiter.cpp b/deps/icu-small/source/common/usetiter.cpp index bd1ecaa0e7753a..514dc03c4c973b 100644 --- a/deps/icu-small/source/common/usetiter.cpp +++ b/deps/icu-small/source/common/usetiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2006, International Business Machines @@ -118,7 +120,7 @@ void UnicodeSetIterator::reset() { } range = 0; endElement = -1; - nextElement = 0; + nextElement = 0; if (endRange >= 0) { loadRange(range); } diff --git a/deps/icu-small/source/common/ushape.cpp b/deps/icu-small/source/common/ushape.cpp index 16442072702dbd..8420cc95c6096f 100644 --- a/deps/icu-small/source/common/ushape.cpp +++ b/deps/icu-small/source/common/ushape.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -777,7 +779,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, count--; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = u_strlen(dest); } @@ -816,9 +818,9 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, if(lamAlefOption || tashkeelOption){ uprv_memset(tempbuffer, 0, (sourceLength+1)*U_SIZEOF_UCHAR); - + i = j = sourceLength; count = 0; - + while(i >= 0) { if ( (lamAlefOption && dest[i] == LAMALEF_SPACE_SUB) || (tashkeelOption && dest[i] == TASHKEEL_SPACE_SUB) ){ @@ -835,7 +837,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, tempbuffer[i] = SPACE_CHAR; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = sourceLength; } @@ -877,7 +879,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, count--; } - uprv_memcpy(dest,tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = sourceLength; } @@ -941,7 +943,7 @@ expandCompositCharAtBegin(UChar *dest, int32_t sourceLength, int32_t destSize,UE i--; j--; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); uprv_free(tempbuffer); @@ -1002,14 +1004,14 @@ expandCompositCharAtEnd(UChar *dest, int32_t sourceLength, int32_t destSize,UErr } if(countr > 0) { - uprv_memmove(tempbuffer, tempbuffer+countr, sourceLength*U_SIZEOF_UCHAR); + u_memmove(tempbuffer, tempbuffer+countr, sourceLength); if(u_strlen(tempbuffer) < sourceLength) { for(i=sourceLength-1;i>=sourceLength-countr;i--) { tempbuffer[i] = SPACE_CHAR; } } } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); uprv_free(tempbuffer); @@ -1177,7 +1179,7 @@ expandCompositChar(UChar *dest, int32_t sourceLength, j++; } - uprv_memcpy(dest, tempbuffer, destSize*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, destSize); } } @@ -1571,7 +1573,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, return 0; } } - uprv_memcpy(tempbuffer, source, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(tempbuffer, source, sourceLength); if (tempsource != NULL){ uprv_free(tempsource); } @@ -1637,7 +1639,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, countSpaces(tempbuffer,destLength,options,&spacesCountl,&spacesCountr); invertBuffer(tempbuffer,destLength,options,spacesCountl,spacesCountr); } - uprv_memcpy(dest, tempbuffer, uprv_min(destLength, destCapacity)*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, uprv_min(destLength, destCapacity)); if(tempbuffer!=buffer) { uprv_free(tempbuffer); @@ -1659,7 +1661,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return sourceLength; } - uprv_memcpy(dest, source, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, source, sourceLength); destLength=sourceLength; } diff --git a/deps/icu-small/source/common/usprep.cpp b/deps/icu-small/source/common/usprep.cpp index a3ff4e289d4b27..565d9e55160e2e 100644 --- a/deps/icu-small/source/common/usprep.cpp +++ b/deps/icu-small/source/common/usprep.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -73,7 +75,7 @@ static const char * const PROFILE_NAMES[] = { static UBool U_CALLCONV isSPrepAcceptable(void * /* context */, - const char * /* type */, + const char * /* type */, const char * /* name */, const UDataInfo *pInfo) { if( @@ -104,7 +106,7 @@ getSPrepFoldingOffset(uint32_t data) { } /* hashes an entry */ -static int32_t U_CALLCONV +static int32_t U_CALLCONV hashEntry(const UHashTok parm) { UStringPrepKey *b = (UStringPrepKey *)parm.pointer; UHashTok namekey, pathkey; @@ -114,7 +116,7 @@ hashEntry(const UHashTok parm) { } /* compares two entries */ -static UBool U_CALLCONV +static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) { UStringPrepKey *b1 = (UStringPrepKey *)p1.pointer; UStringPrepKey *b2 = (UStringPrepKey *)p2.pointer; @@ -123,16 +125,16 @@ compareEntries(const UHashTok p1, const UHashTok p2) { name2.pointer = b2->name; path1.pointer = b1->path; path2.pointer = b2->path; - return ((UBool)(uhash_compareChars(name1, name2) & + return ((UBool)(uhash_compareChars(name1, name2) & uhash_compareChars(path1, path2))); } -static void +static void usprep_unload(UStringPrepProfile* data){ udata_close(data->sprepData); } -static int32_t +static int32_t usprep_internal_flushCache(UBool noRefCount){ UStringPrepProfile *profile = NULL; UStringPrepKey *key = NULL; @@ -156,7 +158,7 @@ usprep_internal_flushCache(UBool noRefCount){ profile = (UStringPrepProfile *) e->value.pointer; key = (UStringPrepKey *) e->key.pointer; - if ((noRefCount== FALSE && profile->refCount == 0) || + if ((noRefCount== FALSE && profile->refCount == 0) || noRefCount== TRUE) { deletedNum++; uhash_removeElement(SHARED_DATA_HASHTABLE, e); @@ -175,15 +177,15 @@ usprep_internal_flushCache(UBool noRefCount){ uprv_free(profile); uprv_free(key); } - + } umtx_unlock(&usprepMutex); return deletedNum; } -/* Works just like ucnv_flushCache() -static int32_t +/* Works just like ucnv_flushCache() +static int32_t usprep_flushCache(){ return usprep_internal_flushCache(FALSE); } @@ -213,18 +215,18 @@ createCache(UErrorCode &status) { ucln_common_registerCleanup(UCLN_COMMON_USPREP, usprep_cleanup); } -static void +static void initCache(UErrorCode *status) { umtx_initOnce(gSharedDataInitOnce, &createCache, *status); } static UBool U_CALLCONV -loadData(UStringPrepProfile* profile, - const char* path, - const char* name, - const char* type, +loadData(UStringPrepProfile* profile, + const char* path, + const char* name, + const char* type, UErrorCode* errorCode) { - /* load Unicode SPREP data from file */ + /* load Unicode SPREP data from file */ UTrie _sprepTrie={ 0,0,0,0,0,0,0 }; UDataMemory *dataMemory; const int32_t *p=NULL; @@ -267,14 +269,14 @@ loadData(UStringPrepProfile* profile, umtx_unlock(&usprepMutex); /* initialize some variables */ profile->mappingData=(uint16_t *)((uint8_t *)(p+_SPREP_INDEX_TOP)+profile->indexes[_SPREP_INDEX_TRIE_SIZE]); - + u_getUnicodeVersion(normUnicodeVersion); - normUniVer = (normUnicodeVersion[0] << 24) + (normUnicodeVersion[1] << 16) + + normUniVer = (normUnicodeVersion[0] << 24) + (normUnicodeVersion[1] << 16) + (normUnicodeVersion[2] << 8 ) + (normUnicodeVersion[3]); - sprepUniVer = (dataVersion[0] << 24) + (dataVersion[1] << 16) + + sprepUniVer = (dataVersion[0] << 24) + (dataVersion[1] << 16) + (dataVersion[2] << 8 ) + (dataVersion[3]); normCorrVer = profile->indexes[_SPREP_NORM_CORRECTNS_LAST_UNI_VERSION]; - + if(U_FAILURE(*errorCode)){ udata_close(dataMemory); return FALSE; @@ -298,8 +300,8 @@ loadData(UStringPrepProfile* profile, return profile->isDataLoaded; } -static UStringPrepProfile* -usprep_getProfile(const char* path, +static UStringPrepProfile* +usprep_getProfile(const char* path, const char* name, UErrorCode *status){ @@ -312,9 +314,9 @@ usprep_getProfile(const char* path, } UStringPrepKey stackKey; - /* - * const is cast way to save malloc, strcpy and free calls - * we use the passed in pointers for fetching the data from the + /* + * const is cast way to save malloc, strcpy and free calls + * we use the passed in pointers for fetching the data from the * hash table which is safe */ stackKey.name = (char*) name; @@ -327,7 +329,7 @@ usprep_getProfile(const char* path, profile->refCount++; } umtx_unlock(&usprepMutex); - + if(profile == NULL) { /* else load the data and put the data in the cache */ LocalMemory newProfile; @@ -376,9 +378,9 @@ usprep_getProfile(const char* path, if(path != NULL){ key->path = keyPath.orphan(); uprv_strcpy(key->path, path); - } + } profile = newProfile.orphan(); - + /* add the data object to the cache */ profile->refCount = 1; uhash_put(SHARED_DATA_HASHTABLE, key.orphan(), profile, status); @@ -390,14 +392,14 @@ usprep_getProfile(const char* path, } U_CAPI UStringPrepProfile* U_EXPORT2 -usprep_open(const char* path, +usprep_open(const char* path, const char* name, UErrorCode* status){ if(status == NULL || U_FAILURE(*status)){ return NULL; } - + /* initialize the profile struct members */ return usprep_getProfile(path,name,status); } @@ -428,11 +430,11 @@ usprep_close(UStringPrepProfile* profile){ profile->refCount--; } umtx_unlock(&usprepMutex); - + } -U_CFUNC void -uprv_syntaxError(const UChar* rules, +U_CFUNC void +uprv_syntaxError(const UChar* rules, int32_t pos, int32_t rulesLen, UParseError* parseError){ @@ -440,16 +442,16 @@ uprv_syntaxError(const UChar* rules, return; } parseError->offset = pos; - parseError->line = 0 ; // we are not using line numbers - + parseError->line = 0 ; // we are not using line numbers + // for pre-context int32_t start = (pos < U_PARSE_CONTEXT_LEN)? 0 : (pos - (U_PARSE_CONTEXT_LEN-1)); int32_t limit = pos; - + u_memcpy(parseError->preContext,rules+start,limit-start); //null terminate the buffer parseError->preContext[limit-start] = 0; - + // for post-context; include error rules[pos] start = pos; limit = start + (U_PARSE_CONTEXT_LEN-1); @@ -469,8 +471,8 @@ getValues(uint16_t trieWord, int16_t& value, UBool& isIndex){ UStringPrepType type; if(trieWord == 0){ - /* - * Initial value stored in the mapping table + /* + * Initial value stored in the mapping table * just return USPREP_TYPE_LIMIT .. so that * the source codepoint is copied to the destination */ @@ -493,7 +495,7 @@ getValues(uint16_t trieWord, int16_t& value, UBool& isIndex){ value = (int16_t)trieWord; value = (value >> 2); } - + if((trieWord>>2) == _SPREP_MAX_INDEX_VALUE){ type = USPREP_DELETE; isIndex =FALSE; @@ -504,14 +506,14 @@ getValues(uint16_t trieWord, int16_t& value, UBool& isIndex){ } // TODO: change to writing to UnicodeString not UChar * -static int32_t -usprep_map( const UStringPrepProfile* profile, - const UChar* src, int32_t srcLength, +static int32_t +usprep_map( const UStringPrepProfile* profile, + const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, UErrorCode* status ){ - + uint16_t result; int32_t destIndex=0; int32_t srcIndex; @@ -528,11 +530,11 @@ usprep_map( const UStringPrepProfile* profile, UChar32 ch; U16_NEXT(src,srcIndex,srcLength,ch); - + result=0; UTRIE_GET16(&profile->sprepTrie,ch,result); - + type = getValues(result, value, isIndex); // check if the source codepoint is unassigned @@ -541,9 +543,9 @@ usprep_map( const UStringPrepProfile* profile, uprv_syntaxError(src,srcIndex-U16_LENGTH(ch), srcLength,parseError); *status = U_STRINGPREP_UNASSIGNED_ERROR; return 0; - + }else if(type == USPREP_MAP){ - + int32_t index, length; if(isIndex){ @@ -559,7 +561,7 @@ usprep_map( const UStringPrepProfile* profile, length = 3; }else{ length = profile->mappingData[index++]; - + } /* copy mapping to destination */ @@ -568,7 +570,7 @@ usprep_map( const UStringPrepProfile* profile, dest[destIndex] = profile->mappingData[index+i]; } destIndex++; /* for pre-flighting */ - } + } continue; }else{ // subtract the delta to arrive at the code point @@ -592,27 +594,27 @@ usprep_map( const UStringPrepProfile* profile, } destIndex +=2; } - + } - + return u_terminateUChars(dest, destCapacity, destIndex, status); } /* 1) Map -- For each character in the input, check if it has a mapping - and, if so, replace it with its mapping. + and, if so, replace it with its mapping. 2) Normalize -- Possibly normalize the result of step 1 using Unicode - normalization. + normalization. 3) Prohibit -- Check for any characters that are not allowed in the - output. If any are found, return an error. + output. If any are found, return an error. 4) Check bidi -- Possibly check for right-to-left characters, and if any are found, make sure that the whole string satisfies the requirements for bidirectional strings. If the string does not satisfy the requirements for bidirectional strings, return an - error. + error. [Unicode3.2] defines several bidirectional categories; each character has one bidirectional category assigned to it. For the purposes of the requirements below, an "RandALCat character" is a character that @@ -638,7 +640,7 @@ usprep_map( const UStringPrepProfile* profile, */ U_CAPI int32_t U_EXPORT2 usprep_prepare( const UStringPrepProfile* profile, - const UChar* src, int32_t srcLength, + const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, @@ -724,7 +726,7 @@ usprep_prepare( const UStringPrepProfile* profile, UBool isIndex; UStringPrepType type = getValues(result, value, isIndex); - if( type == USPREP_PROHIBITED || + if( type == USPREP_PROHIBITED || ((result < _SPREP_TYPE_THRESHOLD) && (result & 0x01) /* first bit says it the code point is prohibited*/) ){ *status = U_STRINGPREP_PROHIBITED_ERROR; @@ -756,7 +758,7 @@ usprep_prepare( const UStringPrepProfile* profile, } //satisfy 3 - if( rightToLeft == TRUE && + if( rightToLeft == TRUE && !((firstCharDir == U_RIGHT_TO_LEFT || firstCharDir == U_RIGHT_TO_LEFT_ARABIC) && (direction == U_RIGHT_TO_LEFT || direction == U_RIGHT_TO_LEFT_ARABIC)) ){ diff --git a/deps/icu-small/source/common/ustack.cpp b/deps/icu-small/source/common/ustack.cpp index c58de7ba1f5336..1de79ecfe3559c 100644 --- a/deps/icu-small/source/common/ustack.cpp +++ b/deps/icu-small/source/common/ustack.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2003-2011, International Business Machines diff --git a/deps/icu-small/source/common/ustr_cnv.cpp b/deps/icu-small/source/common/ustr_cnv.cpp index 6d3cd567059028..e27639f0b762ab 100644 --- a/deps/icu-small/source/common/ustr_cnv.cpp +++ b/deps/icu-small/source/common/ustr_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -35,10 +37,10 @@ U_CAPI UConverter* U_EXPORT2 u_getDefaultConverter(UErrorCode *status) { UConverter *converter = NULL; - + if (gDefaultConverter != NULL) { umtx_lock(NULL); - + /* need to check to make sure it wasn't taken out from under us */ if (gDefaultConverter != NULL) { converter = gDefaultConverter; @@ -84,10 +86,10 @@ U_CAPI void U_EXPORT2 u_flushDefaultConverter() { UConverter *converter = NULL; - + if (gDefaultConverter != NULL) { umtx_lock(NULL); - + /* need to check to make sure it wasn't taken out from under us */ if (gDefaultConverter != NULL) { converter = gDefaultConverter; diff --git a/deps/icu-small/source/common/ustr_cnv.h b/deps/icu-small/source/common/ustr_cnv.h index eefeaa5328dcd7..74f888567eda8c 100644 --- a/deps/icu-small/source/common/ustr_cnv.h +++ b/deps/icu-small/source/common/ustr_cnv.h @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 1999-2010, International Business Machines * Corporation and others. All Rights Reserved. @@ -38,7 +40,7 @@ U_CAPI void U_EXPORT2 u_releaseDefaultConverter(UConverter *converter); /** - * Flush the default converter, if cached. + * Flush the default converter, if cached. * @internal */ U_CAPI void U_EXPORT2 diff --git a/deps/icu-small/source/common/ustr_imp.h b/deps/icu-small/source/common/ustr_imp.h index 6881bce6a944dc..34a69363a765d6 100644 --- a/deps/icu-small/source/common/ustr_imp.h +++ b/deps/icu-small/source/common/ustr_imp.h @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -218,10 +220,48 @@ ucasemap_mapUTF8(const UCaseMap *csm, UTF8CaseMapper *stringCaseMapper, UErrorCode *pErrorCode); -U_CAPI int32_t U_EXPORT2 +#ifdef __cplusplus + +U_NAMESPACE_BEGIN +namespace GreekUpper { + +// Data bits. +static const uint32_t UPPER_MASK = 0x3ff; +static const uint32_t HAS_VOWEL = 0x1000; +static const uint32_t HAS_YPOGEGRAMMENI = 0x2000; +static const uint32_t HAS_ACCENT = 0x4000; +static const uint32_t HAS_DIALYTIKA = 0x8000; +// Further bits during data building and processing, not stored in the data map. +static const uint32_t HAS_COMBINING_DIALYTIKA = 0x10000; +static const uint32_t HAS_OTHER_GREEK_DIACRITIC = 0x20000; + +static const uint32_t HAS_VOWEL_AND_ACCENT = HAS_VOWEL | HAS_ACCENT; +static const uint32_t HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA = + HAS_VOWEL_AND_ACCENT | HAS_DIALYTIKA; +static const uint32_t HAS_EITHER_DIALYTIKA = HAS_DIALYTIKA | HAS_COMBINING_DIALYTIKA; + +// State bits. +static const uint32_t AFTER_CASED = 1; +static const uint32_t AFTER_VOWEL_WITH_ACCENT = 2; + +uint32_t getLetterData(UChar32 c); + +/** + * Returns a non-zero value for each of the Greek combining diacritics + * listed in The Unicode Standard, version 8, chapter 7.2 Greek, + * plus some perispomeni look-alikes. + */ +uint32_t getDiacriticData(UChar32 c); + +} // namespace GreekUpper +U_NAMESPACE_END + +#endif // __cplusplus + +U_CAPI int32_t U_EXPORT2 ustr_hashUCharsN(const UChar *str, int32_t length); -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ustr_hashCharsN(const char *str, int32_t length); U_CAPI int32_t U_EXPORT2 diff --git a/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp b/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp index 4a2352eed507dd..63808776199cc4 100644 --- a/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp +++ b/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/ustr_wcs.cpp b/deps/icu-small/source/common/ustr_wcs.cpp index 33a7b194553427..59a58692ec37e9 100644 --- a/deps/icu-small/source/common/ustr_wcs.cpp +++ b/deps/icu-small/source/common/ustr_wcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -33,7 +35,7 @@ #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) // TODO: We should use CharString for char buffers and UnicodeString for UChar buffers. // Then we could change this to work only with wchar_t buffers. -static inline UBool +static inline UBool u_growAnyBufferFromStatic(void *context, void **pBuffer, int32_t *pCapacity, int32_t reqCapacity, int32_t length, int32_t size) { @@ -42,7 +44,7 @@ u_growAnyBufferFromStatic(void *context, char *newBuffer=(char *)uprv_malloc(reqCapacity*size); if(newBuffer!=NULL) { if(length>0) { - uprv_memcpy(newBuffer, *pBuffer, length*size); + uprv_memcpy(newBuffer, *pBuffer, (size_t)length*size); } *pCapacity=reqCapacity; } else { @@ -59,11 +61,11 @@ u_growAnyBufferFromStatic(void *context, } /* helper function */ -static wchar_t* -_strToWCS(wchar_t *dest, +static wchar_t* +_strToWCS(wchar_t *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode){ @@ -76,20 +78,20 @@ _strToWCS(wchar_t *dest, wchar_t* intTarget=NULL; int32_t intTargetCapacity=0; int count=0,retVal=0; - + const UChar *pSrcLimit =NULL; const UChar *pSrc = src; conv = u_getDefaultConverter(pErrorCode); - + if(U_FAILURE(*pErrorCode)){ return NULL; } - + if(srcLength == -1){ srcLength = u_strlen(pSrc); } - + pSrcLimit = pSrc + srcLength; for(;;) { @@ -99,11 +101,11 @@ _strToWCS(wchar_t *dest, /* convert to chars using default converter */ ucnv_fromUnicode(conv,&tempBuf,tempBufLimit,&pSrc,pSrcLimit,NULL,(UBool)(pSrc==pSrcLimit),pErrorCode); count =(tempBuf - saveBuf); - + /* This should rarely occur */ if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR){ tempBuf = saveBuf; - + /* we dont have enough room on the stack grow the buffer */ int32_t newCapacity = 2 * srcLength; if(newCapacity <= tempBufCapacity) { @@ -113,7 +115,7 @@ _strToWCS(wchar_t *dest, newCapacity, count, 1)) { goto cleanup; } - + saveBuf = tempBuf; tempBufLimit = tempBuf + tempBufCapacity; tempBuf = tempBuf + count; @@ -131,18 +133,18 @@ _strToWCS(wchar_t *dest, if(count>=tempBufCapacity){ tempBuf = saveBuf; /* we dont have enough room on the stack grow the buffer */ - if(!u_growAnyBufferFromStatic(stackBuffer,(void**) &tempBuf, &tempBufCapacity, + if(!u_growAnyBufferFromStatic(stackBuffer,(void**) &tempBuf, &tempBufCapacity, count+1, count, 1)) { goto cleanup; - } + } saveBuf = tempBuf; } - + saveBuf[count]=0; + - - /* allocate more space than required - * here we assume that every char requires + /* allocate more space than required + * here we assume that every char requires * no more than 2 wchar_ts */ intTargetCapacity = (count * _BUFFER_CAPACITY_MULTIPLIER + 1) /*for null termination */; @@ -154,15 +156,15 @@ _strToWCS(wchar_t *dest, int32_t remaining = intTargetCapacity; wchar_t* pIntTarget=intTarget; tempBuf = saveBuf; - + /* now convert the mbs to wcs */ for(;;){ - + /* we can call the system API since we are sure that * there is atleast 1 null in the input */ retVal = uprv_mbstowcs(pIntTarget,(tempBuf+nulLen),remaining); - + if(retVal==-1){ *pErrorCode = U_INVALID_CHAR_FOUND; break; @@ -187,10 +189,10 @@ _strToWCS(wchar_t *dest, /* we donot check for limit since tempBuf is null terminated */ while(tempBuf[nulLen++] != 0){ } - nulVal = (nulLen < srcLength) ? 1 : 0; + nulVal = (nulLen < srcLength) ? 1 : 0; pIntTarget = pIntTarget + retVal+nulVal; remaining -=(retVal+nulVal); - + /* check if we have reached the source limit*/ if(nulLen>=(count)){ break; @@ -198,10 +200,10 @@ _strToWCS(wchar_t *dest, } } count = (int32_t)(pIntTarget-intTarget); - + if(0 < count && count <= destCapacity){ - uprv_memcpy(dest,intTarget,count*sizeof(wchar_t)); - } + uprv_memcpy(dest, intTarget, (size_t)count*sizeof(wchar_t)); + } if(pDestLength){ *pDestLength = count; @@ -227,10 +229,10 @@ _strToWCS(wchar_t *dest, #endif U_CAPI wchar_t* U_EXPORT2 -u_strToWCS(wchar_t *dest, +u_strToWCS(wchar_t *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode){ @@ -238,48 +240,48 @@ u_strToWCS(wchar_t *dest, if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; } - + if( (src==NULL && srcLength!=0) || srcLength < -1 || (destCapacity<0) || (dest == NULL && destCapacity > 0) ) { *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; return NULL; } - + #ifdef U_WCHAR_IS_UTF16 /* wchar_t is UTF-16 just do a memcpy */ if(srcLength == -1){ srcLength = u_strlen(src); } if(0 < srcLength && srcLength <= destCapacity){ - uprv_memcpy(dest,src,srcLength*U_SIZEOF_UCHAR); + u_memcpy(dest, src, srcLength); } if(pDestLength){ *pDestLength = srcLength; } - u_terminateUChars(dest,destCapacity,srcLength,pErrorCode); + u_terminateUChars((UChar *)dest,destCapacity,srcLength,pErrorCode); return dest; #elif defined U_WCHAR_IS_UTF32 - + return (wchar_t*)u_strToUTF32((UChar32*)dest, destCapacity, pDestLength, src, srcLength, pErrorCode); #else - + return _strToWCS(dest,destCapacity,pDestLength,src,srcLength, pErrorCode); - + #endif } #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) /* helper function */ -static UChar* +static UChar* _strFromWCS( UChar *dest, - int32_t destCapacity, + int32_t destCapacity, int32_t *pDestLength, const wchar_t *src, int32_t srcLength, @@ -290,7 +292,7 @@ _strFromWCS( UChar *dest, UChar* pTarget = NULL; UChar* pTargetLimit = NULL; UChar* target = NULL; - + UChar uStack [_STACK_BUFFER_CAPACITY]; wchar_t wStack[_STACK_BUFFER_CAPACITY]; @@ -314,7 +316,7 @@ _strFromWCS( UChar *dest, for(;;){ /* convert wchars to chars */ retVal = uprv_wcstombs(pCSrc,src, cStackCap); - + if(retVal == -1){ *pErrorCode = U_ILLEGAL_CHAR_FOUND; goto cleanup; @@ -329,14 +331,14 @@ _strFromWCS( UChar *dest, break; } } - + }else{ - /* here the source is not null terminated + /* here the source is not null terminated * so it may have nulls embeded and we need to - * do some extra processing + * do some extra processing */ int32_t remaining =cStackCap; - + pSrcLimit = src + srcLength; for(;;){ @@ -361,7 +363,7 @@ _strFromWCS( UChar *dest, remaining = cStackCap-(pCSrc - pCSave); } - /* we have found a null so convert the + /* we have found a null so convert the * chunk from begining of non-null char to null */ retVal = uprv_wcstombs(pCSrc,pSrc,remaining); @@ -380,7 +382,7 @@ _strFromWCS( UChar *dest, }else{ - /* the source is not null terminated and we are + /* the source is not null terminated and we are * end of source so we copy the source to a temp buffer * null terminate it and convert wchar_ts to chars */ @@ -395,12 +397,12 @@ _strFromWCS( UChar *dest, } if(nulLen>0){ /* copy the contents to tempStack */ - uprv_memcpy(pWStack,pSrc,nulLen*sizeof(wchar_t)); + uprv_memcpy(pWStack, pSrc, (size_t)nulLen*sizeof(wchar_t)); } - + /* null terminate the tempBuffer */ pWStack[nulLen] =0 ; - + if(remaining < (nulLen * MB_CUR_MAX)){ /* Should rarely occur */ int32_t len = (pCSrc-pCSave); @@ -415,7 +417,7 @@ _strFromWCS( UChar *dest, } /* convert to chars */ retVal = uprv_wcstombs(pCSrc,pWStack,remaining); - + pCSrc += retVal; pSrc += nulLen; srcLength-=nulLen; /* decrement the srcLength */ @@ -424,30 +426,30 @@ _strFromWCS( UChar *dest, } } - /* OK..now we have converted from wchar_ts to chars now - * convert chars to UChars + /* OK..now we have converted from wchar_ts to chars now + * convert chars to UChars */ pCSrcLimit = pCSrc; pCSrc = pCSave; pTarget = target= dest; - pTargetLimit = dest + destCapacity; - + pTargetLimit = dest + destCapacity; + conv= u_getDefaultConverter(pErrorCode); - + if(U_FAILURE(*pErrorCode)|| conv==NULL){ goto cleanup; } - + for(;;) { - + *pErrorCode = U_ZERO_ERROR; - + /* convert to stack buffer*/ ucnv_toUnicode(conv,&pTarget,pTargetLimit,(const char**)&pCSrc,pCSrcLimit,NULL,(UBool)(pCSrc==pCSrcLimit),pErrorCode); - + /* increment count to number written to stack */ count+= pTarget - target; - + if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR){ target = uStack; pTarget = uStack; @@ -455,17 +457,17 @@ _strFromWCS( UChar *dest, } else { break; } - + } - + if(pDestLength){ *pDestLength =count; } u_terminateUChars(dest,destCapacity,count,pErrorCode); - + cleanup: - + if(cStack != pCSave){ uprv_free(pCSave); } @@ -473,7 +475,7 @@ _strFromWCS( UChar *dest, if(wStack != pWStack){ uprv_free(pWStack); } - + u_releaseDefaultConverter(conv); return dest; @@ -482,7 +484,7 @@ _strFromWCS( UChar *dest, U_CAPI UChar* U_EXPORT2 u_strFromWCS(UChar *dest, - int32_t destCapacity, + int32_t destCapacity, int32_t *pDestLength, const wchar_t *src, int32_t srcLength, @@ -504,10 +506,10 @@ u_strFromWCS(UChar *dest, #ifdef U_WCHAR_IS_UTF16 /* wchar_t is UTF-16 just do a memcpy */ if(srcLength == -1){ - srcLength = u_strlen(src); + srcLength = u_strlen((const UChar *)src); } if(0 < srcLength && srcLength <= destCapacity){ - uprv_memcpy(dest,src,srcLength*U_SIZEOF_UCHAR); + u_memcpy(dest, src, srcLength); } if(pDestLength){ *pDestLength = srcLength; @@ -518,13 +520,13 @@ u_strFromWCS(UChar *dest, return dest; #elif defined U_WCHAR_IS_UTF32 - + return u_strFromUTF32(dest, destCapacity, pDestLength, (UChar32*)src, srcLength, pErrorCode); #else - return _strFromWCS(dest,destCapacity,pDestLength,src,srcLength,pErrorCode); + return _strFromWCS(dest,destCapacity,pDestLength,src,srcLength,pErrorCode); #endif diff --git a/deps/icu-small/source/common/ustrcase.cpp b/deps/icu-small/source/common/ustrcase.cpp index 44952c4ee8122c..aee35361cb79ac 100644 --- a/deps/icu-small/source/common/ustrcase.cpp +++ b/deps/icu-small/source/common/ustrcase.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -45,24 +47,27 @@ appendResult(UChar *dest, int32_t destIndex, int32_t destCapacity, if(result<0) { /* (not) original code point */ c=~result; - length=-1; + length=U16_LENGTH(c); } else if(result<=UCASE_MAX_STRING_LENGTH) { c=U_SENTINEL; length=result; } else { c=result; - length=-1; + length=U16_LENGTH(c); + } + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } if(destIndex=0) { /* code point */ UBool isError=FALSE; U16_APPEND(dest, destIndex, destCapacity, c, isError); if(isError) { /* overflow, nothing written */ - destIndex+=U16_LENGTH(c); + destIndex+=length; } } else { /* string */ @@ -78,11 +83,32 @@ appendResult(UChar *dest, int32_t destIndex, int32_t destCapacity, } } else { /* preflight */ - if(length<0) { - destIndex+=U16_LENGTH(c); - } else { - destIndex+=length; + destIndex+=length; + } + return destIndex; +} + +static inline int32_t +appendUChar(UChar *dest, int32_t destIndex, int32_t destCapacity, UChar c) { + if(destIndex0) { + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } + if((destIndex+length)<=destCapacity) { + u_memcpy(dest+destIndex, s, length); + } + destIndex+=length; } return destIndex; } @@ -149,6 +175,10 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, dest[destIndex++]=(UChar)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -167,7 +197,7 @@ ustrcase_internalToTitle(const UCaseMap *csm, UErrorCode *pErrorCode) { const UChar *s; UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex, length; + int32_t prev, titleStart, titleLimit, idx, destIndex; UBool isFirstIndex; if(U_FAILURE(*pErrorCode)) { @@ -233,12 +263,10 @@ ustrcase_internalToTitle(const UCaseMap *csm, break; /* cased letter at [titleStart..titleLimit[ */ } } - length=titleStart-prev; - if(length>0) { - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+prev, length*U_SIZEOF_UCHAR); - } - destIndex+=length; + destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } } @@ -247,16 +275,23 @@ ustrcase_internalToTitle(const UCaseMap *csm, csc.cpStart=titleStart; csc.cpLimit=titleLimit; c=ucase_toFullTitle(csm->csp, c, utf16_caseContextIterator, &csc, &s, csm->locale, &locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } /* Special case Dutch IJ titlecasing */ - if ( titleStart+1 < idx && - ucase_getCaseLocale(csm->locale,&locCache) == UCASE_LOC_DUTCH && - ( src[titleStart] == (UChar32) 0x0049 || src[titleStart] == (UChar32) 0x0069 ) && - ( src[titleStart+1] == (UChar32) 0x004A || src[titleStart+1] == (UChar32) 0x006A )) { - c=(UChar32) 0x004A; - destIndex=appendResult(dest, destIndex, destCapacity, c, s); - titleLimit++; + if (titleStart+1 < idx && + ucase_getCaseLocale(csm->locale,&locCache) == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && + (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + titleLimit++; } /* lowercase [titleLimit..index[ */ @@ -270,13 +305,16 @@ ustrcase_internalToTitle(const UCaseMap *csm, src, &csc, titleLimit, idx, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return destIndex; + } } else { /* Optionally just copy the rest of the word unchanged. */ - length=idx-titleLimit; - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+titleLimit, length*U_SIZEOF_UCHAR); + destIndex=appendString(dest, destIndex, destCapacity, src+titleLimit, idx-titleLimit); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } - destIndex+=length; } } } @@ -293,6 +331,605 @@ ustrcase_internalToTitle(const UCaseMap *csm, #endif // !UCONFIG_NO_BREAK_ITERATION +U_NAMESPACE_BEGIN +namespace GreekUpper { + +// Data generated by prototype code, see +// http://site.icu-project.org/design/case/greek-upper +// TODO: Move this data into ucase.icu. +static const uint16_t data0370[] = { + // U+0370..03FF + 0x0370, + 0x0370, + 0x0372, + 0x0372, + 0, + 0, + 0x0376, + 0x0376, + 0, + 0, + 0x037A, + 0x03FD, + 0x03FE, + 0x03FF, + 0, + 0x037F, + 0, + 0, + 0, + 0, + 0, + 0, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL, + 0x0392, + 0x0393, + 0x0394, + 0x0395 | HAS_VOWEL, + 0x0396, + 0x0397 | HAS_VOWEL, + 0x0398, + 0x0399 | HAS_VOWEL, + 0x039A, + 0x039B, + 0x039C, + 0x039D, + 0x039E, + 0x039F | HAS_VOWEL, + 0x03A0, + 0x03A1, + 0, + 0x03A3, + 0x03A4, + 0x03A5 | HAS_VOWEL, + 0x03A6, + 0x03A7, + 0x03A8, + 0x03A9 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL, + 0x0392, + 0x0393, + 0x0394, + 0x0395 | HAS_VOWEL, + 0x0396, + 0x0397 | HAS_VOWEL, + 0x0398, + 0x0399 | HAS_VOWEL, + 0x039A, + 0x039B, + 0x039C, + 0x039D, + 0x039E, + 0x039F | HAS_VOWEL, + 0x03A0, + 0x03A1, + 0x03A3, + 0x03A3, + 0x03A4, + 0x03A5 | HAS_VOWEL, + 0x03A6, + 0x03A7, + 0x03A8, + 0x03A9 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_DIALYTIKA, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03CF, + 0x0392, + 0x0398, + 0x03D2, + 0x03D2 | HAS_ACCENT, + 0x03D2 | HAS_DIALYTIKA, + 0x03A6, + 0x03A0, + 0x03CF, + 0x03D8, + 0x03D8, + 0x03DA, + 0x03DA, + 0x03DC, + 0x03DC, + 0x03DE, + 0x03DE, + 0x03E0, + 0x03E0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x039A, + 0x03A1, + 0x03F9, + 0x037F, + 0x03F4, + 0x0395 | HAS_VOWEL, + 0, + 0x03F7, + 0x03F7, + 0x03F9, + 0x03FA, + 0x03FA, + 0x03FC, + 0x03FD, + 0x03FE, + 0x03FF, +}; + +static const uint16_t data1F00[] = { + // U+1F00..1FFF + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0x0399 | HAS_VOWEL, + 0, + 0, + 0, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0, + 0, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0, + 0, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0, + 0, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A1, + 0x03A1, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A1, + 0, + 0, + 0, + 0, + 0, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0, + 0, +}; + +// U+2126 Ohm sign +static const uint16_t data2126 = 0x03A9 | HAS_VOWEL; + +uint32_t getLetterData(UChar32 c) { + if (c < 0x370 || 0x2126 < c || (0x3ff < c && c < 0x1f00)) { + return 0; + } else if (c <= 0x3ff) { + return data0370[c - 0x370]; + } else if (c <= 0x1fff) { + return data1F00[c - 0x1f00]; + } else if (c == 0x2126) { + return data2126; + } else { + return 0; + } +} + +uint32_t getDiacriticData(UChar32 c) { + switch (c) { + case 0x0300: // varia + case 0x0301: // tonos = oxia + case 0x0342: // perispomeni + case 0x0302: // circumflex can look like perispomeni + case 0x0303: // tilde can look like perispomeni + case 0x0311: // inverted breve can look like perispomeni + return HAS_ACCENT; + case 0x0308: // dialytika = diaeresis + return HAS_COMBINING_DIALYTIKA; + case 0x0344: // dialytika tonos + return HAS_COMBINING_DIALYTIKA | HAS_ACCENT; + case 0x0345: // ypogegrammeni = iota subscript + return HAS_YPOGEGRAMMENI; + case 0x0304: // macron + case 0x0306: // breve + case 0x0313: // comma above + case 0x0314: // reversed comma above + case 0x0343: // koronis + return HAS_OTHER_GREEK_DIACRITIC; + default: + return 0; + } +} + +UBool isFollowedByCasedLetter(const UCaseProps *csp, const UChar *s, int32_t i, int32_t length) { + while (i < length) { + UChar32 c; + U16_NEXT(s, i, length, c); + int32_t type = ucase_getTypeOrIgnorable(csp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // Case-ignorable, continue with the loop. + } else if (type != UCASE_NONE) { + return TRUE; // Followed by cased letter. + } else { + return FALSE; // Uncased and not case-ignorable. + } + } + return FALSE; // Not followed by cased letter. +} + +/** + * Greek string uppercasing with a state machine. + * Probably simpler than a stateless function that has to figure out complex context-before + * for each character. + * TODO: Try to re-consolidate one way or another with the non-Greek function. + */ +int32_t toUpper(const UCaseMap *csm, + UChar *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + UErrorCode *pErrorCode) { + int32_t locCache = UCASE_LOC_GREEK; + int32_t destIndex=0; + uint32_t state = 0; + for (int32_t i = 0; i < srcLength;) { + int32_t nextIndex = i; + UChar32 c; + U16_NEXT(src, nextIndex, srcLength, c); + uint32_t nextState = 0; + int32_t type = ucase_getTypeOrIgnorable(csm->csp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // c is case-ignorable + nextState |= (state & AFTER_CASED); + } else if (type != UCASE_NONE) { + // c is cased + nextState |= AFTER_CASED; + } + uint32_t data = getLetterData(c); + if (data > 0) { + uint32_t upper = data & UPPER_MASK; + // Add a dialytika to this iota or ypsilon vowel + // if we removed a tonos from the previous vowel, + // and that previous vowel did not also have (or gain) a dialytika. + // Adding one only to the final vowel in a longer sequence + // (which does not occur in normal writing) would require lookahead. + // Set the same flag as for preserving an existing dialytika. + if ((data & HAS_VOWEL) != 0 && (state & AFTER_VOWEL_WITH_ACCENT) != 0 && + (upper == 0x399 || upper == 0x3A5)) { + data |= HAS_DIALYTIKA; + } + int32_t numYpogegrammeni = 0; // Map each one to a trailing, spacing, capital iota. + if ((data & HAS_YPOGEGRAMMENI) != 0) { + numYpogegrammeni = 1; + } + // Skip combining diacritics after this Greek letter. + while (nextIndex < srcLength) { + uint32_t diacriticData = getDiacriticData(src[nextIndex]); + if (diacriticData != 0) { + data |= diacriticData; + if ((diacriticData & HAS_YPOGEGRAMMENI) != 0) { + ++numYpogegrammeni; + } + ++nextIndex; + } else { + break; // not a Greek diacritic + } + } + if ((data & HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA) == HAS_VOWEL_AND_ACCENT) { + nextState |= AFTER_VOWEL_WITH_ACCENT; + } + // Map according to Greek rules. + UBool addTonos = FALSE; + if (upper == 0x397 && + (data & HAS_ACCENT) != 0 && + numYpogegrammeni == 0 && + (state & AFTER_CASED) == 0 && + !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + // Keep disjunctive "or" with (only) a tonos. + // We use the same "word boundary" conditions as for the Final_Sigma test. + if (i == nextIndex) { + upper = 0x389; // Preserve the precomposed form. + } else { + addTonos = TRUE; + } + } else if ((data & HAS_DIALYTIKA) != 0) { + // Preserve a vowel with dialytika in precomposed form if it exists. + if (upper == 0x399) { + upper = 0x3AA; + data &= ~HAS_EITHER_DIALYTIKA; + } else if (upper == 0x3A5) { + upper = 0x3AB; + data &= ~HAS_EITHER_DIALYTIKA; + } + } + destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); + if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); + --numYpogegrammeni; + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } else { + const UChar *s; + UChar32 c2 = 0; + c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); + if((destIndexdestCapacity) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + return destIndex; +} + +} // namespace GreekUpper +U_NAMESPACE_END + /* functions available in the common library (for unistr_case.cpp) */ U_CFUNC int32_t U_CALLCONV @@ -315,6 +952,10 @@ ustrcase_internalToUpper(const UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode) { + int32_t locCache = csm->locCache; + if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { + return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + } UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; @@ -346,6 +987,10 @@ ustr_foldCase(const UCaseProps *csp, dest[destIndex++]=(UChar)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -419,7 +1064,7 @@ ustrcase_map(const UCaseMap *csm, if(destLength>0) { int32_t copyLength= destLength<=destCapacity ? destLength : destCapacity; if(copyLength>0) { - uprv_memmove(dest, temp, copyLength*U_SIZEOF_UCHAR); + u_memmove(dest, temp, copyLength); } } if(temp!=buffer) { diff --git a/deps/icu-small/source/common/ustrcase_locale.cpp b/deps/icu-small/source/common/ustrcase_locale.cpp index 5707c5a5be13f4..78f4bbd7a2fe7f 100644 --- a/deps/icu-small/source/common/ustrcase_locale.cpp +++ b/deps/icu-small/source/common/ustrcase_locale.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/ustrenum.cpp b/deps/icu-small/source/common/ustrenum.cpp index af3c9fa9048b68..df732647a943e9 100644 --- a/deps/icu-small/source/common/ustrenum.cpp +++ b/deps/icu-small/source/common/ustrenum.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines @@ -8,7 +10,7 @@ * Since: ICU 2.4 ********************************************************************** */ -#include "utypeinfo.h" // for 'typeid' to work +#include "utypeinfo.h" // for 'typeid' to work #include "unicode/ustring.h" #include "unicode/strenum.h" @@ -118,9 +120,9 @@ StringEnumeration::setChars(const char *s, int32_t length, UErrorCode &status) { return NULL; } -UBool +UBool StringEnumeration::operator==(const StringEnumeration& that)const { - return typeid(*this) == typeid(that); + return typeid(*this) == typeid(that); } UBool @@ -258,7 +260,7 @@ U_CDECL_END * delete it (regardless of error status). */ U_CAPI UEnumeration* U_EXPORT2 -uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec) { +uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec) { UEnumeration* result = NULL; if (U_SUCCESS(*ec) && adopted != NULL) { result = (UEnumeration*) uprv_malloc(sizeof(UEnumeration)); diff --git a/deps/icu-small/source/common/ustrenum.h b/deps/icu-small/source/common/ustrenum.h index d02c20779501b0..c893cd193bc611 100644 --- a/deps/icu-small/source/common/ustrenum.h +++ b/deps/icu-small/source/common/ustrenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines @@ -82,3 +84,4 @@ class U_COMMON_API UStringEnumeration : public StringEnumeration { U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/common/ustrfmt.c b/deps/icu-small/source/common/ustrfmt.c index 5e9fb924f8d3ff..c7805d8d2a3062 100644 --- a/deps/icu-small/source/common/ustrfmt.c +++ b/deps/icu-small/source/common/ustrfmt.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2006, International Business Machines diff --git a/deps/icu-small/source/common/ustrfmt.h b/deps/icu-small/source/common/ustrfmt.h index f1891bdabf58ea..3cc3d69add5e05 100644 --- a/deps/icu-small/source/common/ustrfmt.h +++ b/deps/icu-small/source/common/ustrfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2006, International Business Machines diff --git a/deps/icu-small/source/common/ustring.cpp b/deps/icu-small/source/common/ustring.cpp index ef4b05dd735478..aae7f5c36d300d 100644 --- a/deps/icu-small/source/common/ustring.cpp +++ b/deps/icu-small/source/common/ustring.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -572,7 +574,7 @@ u_strspn(const UChar *string, const UChar *matchSet) /* ----- Text manipulation functions --- */ U_CAPI UChar* U_EXPORT2 -u_strtok_r(UChar *src, +u_strtok_r(UChar *src, const UChar *delim, UChar **saveState) { @@ -622,7 +624,7 @@ u_strtok_r(UChar *src, /* Miscellaneous functions -------------------------------------------------- */ U_CAPI UChar* U_EXPORT2 -u_strcat(UChar *dst, +u_strcat(UChar *dst, const UChar *src) { UChar *anchor = dst; /* save a pointer to start of dst */ @@ -637,9 +639,9 @@ u_strcat(UChar *dst, } U_CAPI UChar* U_EXPORT2 -u_strncat(UChar *dst, - const UChar *src, - int32_t n ) +u_strncat(UChar *dst, + const UChar *src, + int32_t n ) { if(n > 0) { UChar *anchor = dst; /* save a pointer to start of dst */ @@ -665,8 +667,8 @@ u_strncat(UChar *dst, /* ----- Text property functions --- */ U_CAPI int32_t U_EXPORT2 -u_strcmp(const UChar *s1, - const UChar *s2) +u_strcmp(const UChar *s1, + const UChar *s2) { UChar c1, c2; @@ -936,9 +938,9 @@ u_strcmpCodePointOrder(const UChar *s1, const UChar *s2) { } U_CAPI int32_t U_EXPORT2 -u_strncmp(const UChar *s1, - const UChar *s2, - int32_t n) +u_strncmp(const UChar *s1, + const UChar *s2, + int32_t n) { if(n > 0) { int32_t rc; @@ -961,8 +963,8 @@ u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n) { } U_CAPI UChar* U_EXPORT2 -u_strcpy(UChar *dst, - const UChar *src) +u_strcpy(UChar *dst, + const UChar *src) { UChar *anchor = dst; /* save a pointer to start of dst */ @@ -973,9 +975,9 @@ u_strcpy(UChar *dst, } U_CAPI UChar* U_EXPORT2 -u_strncpy(UChar *dst, - const UChar *src, - int32_t n) +u_strncpy(UChar *dst, + const UChar *src, + int32_t n) { UChar *anchor = dst; /* save a pointer to start of dst */ @@ -988,10 +990,10 @@ u_strncpy(UChar *dst, } U_CAPI int32_t U_EXPORT2 -u_strlen(const UChar *s) +u_strlen(const UChar *s) { #if U_SIZEOF_WCHAR_T == U_SIZEOF_UCHAR - return (int32_t)uprv_wcslen(s); + return (int32_t)uprv_wcslen((const wchar_t *)s); #else const UChar *t = s; while(*t != 0) { @@ -1113,7 +1115,7 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number) { U_CAPI UChar * U_EXPORT2 u_memcpy(UChar *dest, const UChar *src, int32_t count) { if(count > 0) { - uprv_memcpy(dest, src, count*U_SIZEOF_UCHAR); + uprv_memcpy(dest, src, (size_t)count*U_SIZEOF_UCHAR); } return dest; } @@ -1121,7 +1123,7 @@ u_memcpy(UChar *dest, const UChar *src, int32_t count) { U_CAPI UChar * U_EXPORT2 u_memmove(UChar *dest, const UChar *src, int32_t count) { if(count > 0) { - uprv_memmove(dest, src, count*U_SIZEOF_UCHAR); + uprv_memmove(dest, src, (size_t)count*U_SIZEOF_UCHAR); } return dest; } @@ -1218,7 +1220,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt, int8_t n = 0; int8_t minDig = 0; int8_t maxDig = 0; - int8_t bitsPerDigit = 4; + int8_t bitsPerDigit = 4; int8_t dig; int32_t i; UBool braces = FALSE; diff --git a/deps/icu-small/source/common/ustrtrns.cpp b/deps/icu-small/source/common/ustrtrns.cpp index e835d96b6aa52b..2867aaa3f26249 100644 --- a/deps/icu-small/source/common/ustrtrns.cpp +++ b/deps/icu-small/source/common/ustrtrns.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -34,7 +36,7 @@ #include "ustr_imp.h" #include "uassert.h" -U_CAPI UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF32WithSub(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -130,13 +132,13 @@ u_strFromUTF32WithSub(UChar *dest, /* Terminate the buffer */ u_terminateUChars(dest, destCapacity, reqLength, pErrorCode); - + return dest; } -U_CAPI UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF32(UChar *dest, - int32_t destCapacity, + int32_t destCapacity, int32_t *pDestLength, const UChar32 *src, int32_t srcLength, @@ -148,7 +150,7 @@ u_strFromUTF32(UChar *dest, pErrorCode); } -U_CAPI UChar32* U_EXPORT2 +U_CAPI UChar32* U_EXPORT2 u_strToUTF32WithSub(UChar32 *dest, int32_t destCapacity, int32_t *pDestLength, @@ -240,11 +242,11 @@ u_strToUTF32WithSub(UChar32 *dest, return dest; } -U_CAPI UChar32* U_EXPORT2 -u_strToUTF32(UChar32 *dest, +U_CAPI UChar32* U_EXPORT2 +u_strToUTF32(UChar32 *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode) { return u_strToUTF32WithSub( @@ -420,7 +422,7 @@ u_strFromUTF8WithSub(UChar *dest, if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; } - + if( (src==NULL && srcLength!=0) || srcLength < -1 || (destCapacity<0) || (dest == NULL && destCapacity > 0) || subchar > 0x10ffff || U_IS_SURROGATE(subchar) @@ -754,7 +756,7 @@ u_strFromUTF8Lenient(UChar *dest, if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; } - + if( (src==NULL && srcLength!=0) || srcLength < -1 || (destCapacity<0) || (dest == NULL && destCapacity > 0) ) { @@ -976,8 +978,8 @@ _appendUTF8(uint8_t *pDest, UChar32 c) { return pDest; } - -U_CAPI char* U_EXPORT2 + +U_CAPI char* U_EXPORT2 u_strToUTF8WithSub(char *dest, int32_t destCapacity, int32_t *pDestLength, @@ -995,7 +997,7 @@ u_strToUTF8WithSub(char *dest, if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; } - + if( (pSrc==NULL && srcLength!=0) || srcLength < -1 || (destCapacity<0) || (dest == NULL && destCapacity > 0) || subchar > 0x10ffff || U_IS_SURROGATE(subchar) @@ -1040,7 +1042,7 @@ u_strToUTF8WithSub(char *dest, int32_t length; /*need not check for NUL because NUL fails U16_IS_TRAIL() anyway*/ - if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(ch2=*pSrc)) { + if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(ch2=*pSrc)) { ++pSrc; ch=U16_GET_SUPPLEMENTARY(ch, ch2); } else if(subchar>=0) { @@ -1127,7 +1129,7 @@ u_strToUTF8WithSub(char *dest, break; /* recompute count */ } - if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(ch2=*pSrc)) { + if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(ch2=*pSrc)) { ++pSrc; ch=U16_GET_SUPPLEMENTARY(ch, ch2); @@ -1182,7 +1184,7 @@ u_strToUTF8WithSub(char *dest, } else /* ch is a surrogate */ { int32_t length; - if(U16_IS_SURROGATE_LEAD(ch) && pSrc=0) { @@ -1241,7 +1243,7 @@ u_strToUTF8WithSub(char *dest, return dest; } -U_CAPI char* U_EXPORT2 +U_CAPI char* U_EXPORT2 u_strToUTF8(char *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1508,12 +1510,12 @@ u_strFromJavaModifiedUTF8WithSub( return dest; } -U_CAPI char* U_EXPORT2 +U_CAPI char* U_EXPORT2 u_strToJavaModifiedUTF8( char *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *src, + const UChar *src, int32_t srcLength, UErrorCode *pErrorCode) { int32_t reqLength=0; diff --git a/deps/icu-small/source/common/utext.cpp b/deps/icu-small/source/common/utext.cpp index 20952a8459273a..a89e7a62b56366 100644 --- a/deps/icu-small/source/common/utext.cpp +++ b/deps/icu-small/source/common/utext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/utf_impl.c b/deps/icu-small/source/common/utf_impl.c index a1f43b94655731..c4c881213807e1 100644 --- a/deps/icu-small/source/common/utf_impl.c +++ b/deps/icu-small/source/common/utf_impl.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -49,7 +51,7 @@ * lead bytes above 0xf4 are illegal. * We keep them in this table for skipping long ISO 10646-UTF-8 sequences. */ -U_EXPORT const uint8_t +U_EXPORT const uint8_t utf8_countTrailBytes[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/deps/icu-small/source/common/util.cpp b/deps/icu-small/source/common/util.cpp index 5a853ea34609ef..1b77110c689ae2 100644 --- a/deps/icu-small/source/common/util.cpp +++ b/deps/icu-small/source/common/util.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines @@ -167,7 +169,7 @@ int32_t ICU_Utility::skipWhitespace(const UnicodeString& str, int32_t& pos, //? if (!isForward) { //? --pos; // pos is a limit, so back up by one //? } -//? +//? //? while (pos != stop && //? PatternProps::isWhiteSpace(c = text.char32At(pos))) { //? if (isForward) { @@ -374,7 +376,7 @@ void ICU_Utility::appendToRule(UnicodeString& rule, quoteBuf.append(c); } } - + // Otherwise just append else { rule.append(c); diff --git a/deps/icu-small/source/common/util.h b/deps/icu-small/source/common/util.h index 427d25ca38c9e4..57f1bb0fe2d945 100644 --- a/deps/icu-small/source/common/util.h +++ b/deps/icu-small/source/common/util.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines @@ -144,7 +146,7 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s */ static int32_t parsePattern(const UnicodeString& rule, int32_t pos, int32_t limit, const UnicodeString& pattern, int32_t* parsedInts); - + /** * Parse a pattern string within the given Replaceable and a parsing * pattern. Characters are matched literally and case-sensitively @@ -216,7 +218,7 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s UBool isLiteral, UBool escapeUnprintable, UnicodeString& quoteBuf); - + static void appendToRule(UnicodeString& rule, const UnicodeString& text, UBool isLiteral, diff --git a/deps/icu-small/source/common/util_props.cpp b/deps/icu-small/source/common/util_props.cpp index 44349061e74974..a88d5816c7a9c5 100644 --- a/deps/icu-small/source/common/util_props.cpp +++ b/deps/icu-small/source/common/util_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2016, International Business Machines @@ -212,3 +214,4 @@ int32_t ICU_Utility::parseNumber(const UnicodeString& text, } U_NAMESPACE_END + diff --git a/deps/icu-small/source/common/utrace.c b/deps/icu-small/source/common/utrace.c index 15f5ccef5255a4..ca4dddfa1a38fb 100644 --- a/deps/icu-small/source/common/utrace.c +++ b/deps/icu-small/source/common/utrace.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2014, International Business Machines @@ -71,14 +73,14 @@ utrace_exit(int32_t fnNumber, int32_t returnType, ...) { va_end(args); } } + - - -U_CAPI void U_EXPORT2 + +U_CAPI void U_EXPORT2 utrace_data(int32_t fnNumber, int32_t level, const char *fmt, ...) { if (pTraceDataFunc != NULL) { va_list args; - va_start(args, fmt ); + va_start(args, fmt ); (*pTraceDataFunc)(gTraceContext, fnNumber, level, fmt, args); va_end(args); } @@ -142,7 +144,7 @@ static void outputPtrBytes(void *val, char *outBuf, int32_t *outIx, int32_t capa p += sizeof(void *) - 1; #endif - /* Loop through the bytes of the ptr as it sits in memory, from + /* Loop through the bytes of the ptr as it sits in memory, from * most significant to least significant end */ for (i=0; i 0) { outputHexBytes(longArg, charsToOutput, outBuf, &outIx, capacity); @@ -382,7 +384,7 @@ utrace_format(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, ...) { int32_t retVal; va_list args; - va_start(args, fmt ); + va_start(args, fmt ); retVal = utrace_vformat(outBuf, capacity, indent, fmt, args); va_end(args); return retVal; @@ -425,7 +427,7 @@ utrace_getLevel() { } -U_CFUNC UBool +U_CFUNC UBool utrace_cleanup() { pTraceEntryFunc = NULL; pTraceExitFunc = NULL; @@ -457,7 +459,7 @@ trConvNames[] = { NULL }; - + static const char * const trCollNames[] = { "ucol_open", @@ -472,7 +474,7 @@ trCollNames[] = { NULL }; - + U_CAPI const char * U_EXPORT2 utrace_functionName(int32_t fnNumber) { if(UTRACE_FUNCTION_START <= fnNumber && fnNumber < UTRACE_FUNCTION_LIMIT) { @@ -485,3 +487,4 @@ utrace_functionName(int32_t fnNumber) { return "[BOGUS Trace Function Number]"; } } + diff --git a/deps/icu-small/source/common/utracimp.h b/deps/icu-small/source/common/utracimp.h index d88b80967a8297..c1786f55b2afdc 100644 --- a/deps/icu-small/source/common/utracimp.h +++ b/deps/icu-small/source/common/utracimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -59,8 +61,8 @@ U_CFUNC U_COMMON_API int32_t utrace_level; -/** - * Traced Function Exit return types. +/** + * Traced Function Exit return types. * Flags indicating the number and types of varargs included in a call * to a UTraceExit function. * Bits 0-3: The function return type. First variable param. @@ -129,15 +131,15 @@ U_CDECL_END #define UTRACE_LEVEL(level) (utrace_getLevel()>=(level)) /** - * Flag bit in utraceFnNumber, the local variable added to each function + * Flag bit in utraceFnNumber, the local variable added to each function * with tracing code to contains the function number. * * Set the flag if the function's entry is traced, which will cause the - * function's exit to also be traced. utraceFnNumber is uncoditionally + * function's exit to also be traced. utraceFnNumber is uncoditionally * set at entry, whether or not the entry is traced, so that it will * always be available for error trace output. * @internal - */ + */ #define UTRACE_TRACED_ENTRY 0x80000000 /** @@ -202,7 +204,7 @@ U_CDECL_END * * @param val The function's return value, int32_t or comatible type. * - * @internal + * @internal */ #define UTRACE_EXIT_VALUE(val) \ {if(utraceFnNumber & UTRACE_TRACED_ENTRY) { \ diff --git a/deps/icu-small/source/common/utrie.cpp b/deps/icu-small/source/common/utrie.cpp index b8caeb722b3058..478560df66eb3b 100644 --- a/deps/icu-small/source/common/utrie.cpp +++ b/deps/icu-small/source/common/utrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -139,7 +141,7 @@ utrie_clone(UNewTrie *fillIn, const UNewTrie *other, uint32_t *aliasData, int32_ uprv_free(aliasData); } else { uprv_memcpy(trie->index, other->index, sizeof(trie->index)); - uprv_memcpy(trie->data, other->data, other->dataLength*4); + uprv_memcpy(trie->data, other->data, (size_t)other->dataLength*4); trie->dataLength=other->dataLength; trie->isDataAllocated=isDataAllocated; } @@ -839,7 +841,7 @@ utrie_serialize(UNewTrie *trie, void *dt, int32_t capacity, } /* write 32-bit data values */ - uprv_memcpy(dest16, trie->data, 4*trie->dataLength); + uprv_memcpy(dest16, trie->data, 4*(size_t)trie->dataLength); } return length; diff --git a/deps/icu-small/source/common/utrie.h b/deps/icu-small/source/common/utrie.h index 3cec027fe34595..17e660b3e308cb 100644 --- a/deps/icu-small/source/common/utrie.h +++ b/deps/icu-small/source/common/utrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2.cpp b/deps/icu-small/source/common/utrie2.cpp index 5f873c5cac0825..4bd35a924d874a 100644 --- a/deps/icu-small/source/common/utrie2.cpp +++ b/deps/icu-small/source/common/utrie2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2.h b/deps/icu-small/source/common/utrie2.h index 36ea9b4bb9423f..810bcfc9591058 100644 --- a/deps/icu-small/source/common/utrie2.h +++ b/deps/icu-small/source/common/utrie2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2_builder.cpp b/deps/icu-small/source/common/utrie2_builder.cpp index 0815822c5035f7..664051c5f9bd04 100644 --- a/deps/icu-small/source/common/utrie2_builder.cpp +++ b/deps/icu-small/source/common/utrie2_builder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -248,11 +250,11 @@ cloneBuilder(const UNewTrie2 *other) { /* clone data */ uprv_memcpy(trie->index1, other->index1, sizeof(trie->index1)); - uprv_memcpy(trie->index2, other->index2, other->index2Length*4); + uprv_memcpy(trie->index2, other->index2, (size_t)other->index2Length*4); trie->index2NullOffset=other->index2NullOffset; trie->index2Length=other->index2Length; - uprv_memcpy(trie->data, other->data, other->dataLength*4); + uprv_memcpy(trie->data, other->data, (size_t)other->dataLength*4); trie->dataNullOffset=other->dataNullOffset; trie->dataLength=other->dataLength; @@ -260,7 +262,7 @@ cloneBuilder(const UNewTrie2 *other) { if(other->isCompacted) { trie->firstFreeBlock=0; } else { - uprv_memcpy(trie->map, other->map, (other->dataLength>>UTRIE2_SHIFT_2)*4); + uprv_memcpy(trie->map, other->map, ((size_t)other->dataLength>>UTRIE2_SHIFT_2)*4); trie->firstFreeBlock=other->firstFreeBlock; } @@ -540,7 +542,7 @@ allocDataBlock(UNewTrie2 *trie, int32_t copyBlock) { if(data==NULL) { return -1; } - uprv_memcpy(data, trie->data, trie->dataLength*4); + uprv_memcpy(data, trie->data, (size_t)trie->dataLength*4); uprv_free(trie->data); trie->data=data; trie->dataCapacity=capacity; @@ -1402,7 +1404,7 @@ utrie2_freeze(UTrie2 *trie, UTrie2ValueBits valueBits, UErrorCode *pErrorCode) { /* write 32-bit data values */ trie->data16=NULL; trie->data32=(uint32_t *)dest16; - uprv_memcpy(dest16, newTrie->data, newTrie->dataLength*4); + uprv_memcpy(dest16, newTrie->data, (size_t)newTrie->dataLength*4); break; default: *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; diff --git a/deps/icu-small/source/common/utrie2_impl.h b/deps/icu-small/source/common/utrie2_impl.h index ecb3b6fc40a4d9..48883638b185c4 100644 --- a/deps/icu-small/source/common/utrie2_impl.h +++ b/deps/icu-small/source/common/utrie2_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uts46.cpp b/deps/icu-small/source/common/uts46.cpp index 13a1f246c21cc9..7bc4f925caca0b 100644 --- a/deps/icu-small/source/common/uts46.cpp +++ b/deps/icu-small/source/common/uts46.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines @@ -68,7 +70,7 @@ isASCIIOkBiDi(const char *s, int32_t length); IDNA::~IDNA() {} void -IDNA::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, +IDNA::labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -78,7 +80,7 @@ IDNA::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, } void -IDNA::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, +IDNA::labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -88,7 +90,7 @@ IDNA::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, } void -IDNA::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, +IDNA::nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -98,7 +100,7 @@ IDNA::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, } void -IDNA::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, +IDNA::nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -131,19 +133,19 @@ class UTS46 : public IDNA { IDNAInfo &info, UErrorCode &errorCode) const; virtual void - labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; private: @@ -154,7 +156,7 @@ class UTS46 : public IDNA { IDNAInfo &info, UErrorCode &errorCode) const; void - processUTF8(const StringPiece &src, + processUTF8(StringPiece src, UBool isLabel, UBool toASCII, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; @@ -251,25 +253,25 @@ UTS46::nameToUnicode(const UnicodeString &name, UnicodeString &dest, } void -UTS46::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, +UTS46::labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(label, TRUE, TRUE, dest, info, errorCode); } void -UTS46::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, +UTS46::labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(label, TRUE, FALSE, dest, info, errorCode); } void -UTS46::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, +UTS46::nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(name, FALSE, TRUE, dest, info, errorCode); } void -UTS46::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, +UTS46::nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(name, FALSE, FALSE, dest, info, errorCode); } @@ -401,7 +403,7 @@ UTS46::process(const UnicodeString &src, } void -UTS46::processUTF8(const StringPiece &src, +UTS46::processUTF8(StringPiece src, UBool isLabel, UBool toASCII, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { diff --git a/deps/icu-small/source/common/utypeinfo.h b/deps/icu-small/source/common/utypeinfo.h index 51c3a03bf7c332..b39aa0d6053344 100644 --- a/deps/icu-small/source/common/utypeinfo.h +++ b/deps/icu-small/source/common/utypeinfo.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utypes.c b/deps/icu-small/source/common/utypes.c index 6ff84607476400..c506dd44f5424c 100644 --- a/deps/icu-small/source/common/utypes.c +++ b/deps/icu-small/source/common/utypes.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uvector.cpp b/deps/icu-small/source/common/uvector.cpp index c0cb2d83661ec6..863ef7878c0e60 100644 --- a/deps/icu-small/source/common/uvector.cpp +++ b/deps/icu-small/source/common/uvector.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2013, International Business Machines Corporation and @@ -24,7 +26,7 @@ U_NAMESPACE_BEGIN */ #define HINT_KEY_POINTER (1) #define HINT_KEY_INTEGER (0) - + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UVector) UVector::UVector(UErrorCode &status) : @@ -333,17 +335,17 @@ UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { } if (capacity < minimumCapacity) { if (capacity > (INT32_MAX - 1) / 2) { // integer overflow check - status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; + status = U_ILLEGAL_ARGUMENT_ERROR; + return FALSE; } int32_t newCap = capacity * 2; if (newCap < minimumCapacity) { newCap = minimumCapacity; } if (newCap > (int32_t)(INT32_MAX / sizeof(UElement))) { // integer overflow check - // We keep the original memory contents on bad minimumCapacity. - status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; + // We keep the original memory contents on bad minimumCapacity. + status = U_ILLEGAL_ARGUMENT_ERROR; + return FALSE; } UElement* newElems = (UElement *)uprv_realloc(elements, sizeof(UElement)*newCap); if (newElems == NULL) { @@ -490,7 +492,7 @@ void UVector::sortedInsert(UElement e, UElementComparator *compare, UErrorCode& * * The context pointer to this function is a pointer back * (with some extra indirection) to the user supplied comparator. - * + * */ static int32_t U_CALLCONV sortComparator(const void *context, const void *left, const void *right) { @@ -562,3 +564,4 @@ void UVector::sortWithUComparator(UComparator *compare, const void *context, UEr } U_NAMESPACE_END + diff --git a/deps/icu-small/source/common/uvector.h b/deps/icu-small/source/common/uvector.h index c209a30a76d251..6439b4e2179b3c 100644 --- a/deps/icu-small/source/common/uvector.h +++ b/deps/icu-small/source/common/uvector.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines @@ -133,7 +135,7 @@ class U_COMMON_API UVector : public UObject { void insertElementAt(void* obj, int32_t index, UErrorCode &status); void insertElementAt(int32_t elem, int32_t index, UErrorCode &status); - + void* elementAt(int32_t index) const; int32_t elementAti(int32_t index) const; @@ -312,11 +314,11 @@ class U_COMMON_API UStack : public UVector { void* peek(void) const; int32_t peeki(void) const; - + void* pop(void); - + int32_t popi(void); - + void* push(void* obj, UErrorCode &status); int32_t push(int32_t i, UErrorCode &status); diff --git a/deps/icu-small/source/common/uvectr32.cpp b/deps/icu-small/source/common/uvectr32.cpp index 09342f2f82d557..41f5fb7c08dfb8 100644 --- a/deps/icu-small/source/common/uvectr32.cpp +++ b/deps/icu-small/source/common/uvectr32.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2015, International Business Machines Corporation and @@ -21,7 +23,7 @@ U_NAMESPACE_BEGIN * or a pointer. If a hint bit is zero, then the associated * token is assumed to be an integer. This is needed for iSeries */ - + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UVector32) UVector32::UVector32(UErrorCode &status) : @@ -251,7 +253,7 @@ void UVector32::setMaxCapacity(int32_t limit) { // Current capacity is within the new limit. return; } - + // New maximum capacity is smaller than the current size. // Realloc the storage to the new, smaller size. int32_t* newElems = (int32_t *)uprv_realloc(elements, sizeof(int32_t)*maxCapacity); @@ -286,7 +288,7 @@ void UVector32::setSize(int32_t newSize) { for (i=count; ikm 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�do<0 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

ouR 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

@%X-^-&)R1V4t#7KNDKx#s86kX zl6Hhj)aO>Jnv`@w(m^XtePexR{b>DS%}n}E*$KZ}>l6R90-=qGs}m}dLZPHk%}||C z{m?O?n*xnPX$eh3%|a)KauQDsHA^@>l$Y2lG%&GEs9mUI=-#B%&;v9JpQnnxPLU|c|PT6rF3|fO!&=U*?<3I#l1m=S)z*_JeVEkV8 zDfk9h395{HR#^+s1EhfrFcORh)4_aj1y}=~1FwR&!PlT^qAEKbbO%GhXpjqLfCb=s za2vP>+z0*z4uRi5-6V8_Q@|PEY>)*CzECaWI&0rhY3ElwjgXCmYb^fCs^o;63m?_yZ)?P-XQ%6L1RX1%`lZa2}WhiorGD7O(+40=9w|z-!7l!GncIq(TM1bzj< z+N!KEI0f_qnP42q2h+eTa5Y#39s)0dJ>Wg?Dfk9N!O3;-H8>j#1mnPk;0mw|tOhTE zkHA6jBlr_EtgFgef&t(>Fd0O^LU0Y(26lt};A;@9NBabAKyNS-upE(RfCV36I7za!hzMo{?k1{|%n8!G!-CI*k1${NK=F>^I@j zbo~F-PEFZOcr^P=x(WYp^ZKZ{p#`DKLW@FIhn9wJl?hZZ8 zZ{hDbt527Q)`h-R_k|t|wb!dpKN6C)rymbJ6*@hzEhH;XKOgECcqufTm8N%v@&m7j z-U`Y3((i;m2z?wnM|~FhGW1R8`_KUOb7+XOlJf7NXvj*atlZK_?Ry$L2VMfZ!5iRh z@B!ElJ_lce@4+wN4-h<-HMc-*&;T?BCx9?G9h?E$gH+HRoDKSdfgl59f>B@`$OV(Y z6c7P3z(rsISO~5J*MRH6a&Q~C3zUQP;C}EhcpPj6&w>}hF0cpu3%n0L1_!`b;5+a$ zI1B=f<=Lxea2n&>wmcIhvS#zq)_0b68}Ky-UM3GG5m%SzHhJI{@O-WK=e&C{u{bY3 zBR8UYr`f7^zckgme{V2U^-fP$y)!r;IzaUvM%*yshGnYWnH*=r&CF80v%v^Bqu`9m zP`$?rhN?cj(?Evm(}yrETlMMJ7xV||s?PucoPnebA`TsWhJs;zz)0066K-Zd0520> zW~SJqioe@47@SKjZIU1(bG4rzv?@%FX#v4c$Dg!PMB`1zC*{TzQYKIjZl4& z+ZQ=~vxca?BRC#G{7CYQAsjnIrKM%4w0>Z4f0Z_bbMmF3qhH@FFjDpFH$?RtV5@%E z)GwBvdXCJq0jqceR3=OYDh$d`e?Gt$yk#(>_SzskVY41ArDF+^ny z%~l!sEF*K6%0NyAKFJ_o#wgN84+SGt2KAOf8_A%J3`N#Z+QHC4!_?690cz;5A!?|d zsfOb7VHugq?%hY({RV-dAWPW;hA0~!+SqHS6PG?#+1dS+J!XI!-aAue4oe3^RVH8dM`aJr1X(IOBLifsY}#%%<<7SIschP8cIFtBO}=b=ojo>7jp#iP z3{fKnj8-GCZA8{kK>V0NV1yb0XJo%VpuZZ4tdS!|s!>_lYIN`ZU;r4QM)&Cr`hdP5 zO^xmgXb+?Nkv0sT&ABZh`Lc-Px*R=%JflaeF_d{szf3h|LkjE#on=_NE^lZs7!i?%F0ln6>F_`P^qj|ewON`Xpt(NuVB%l#;F{YrwUXN zI~JC*g26mhrWUHjYKdCLcT~&OO0`O@RuyVJGr^nGX0=6aRonThe|r(2cX91GNM71C0Vr0?h*9K=VMWK-)lvKx&{{;H*HeKw4m6AU$9Q zvIC<7 zRj_TaLohYiEqGS2S1>I&Fqj^+d3$7Za2&HvdBFl^n%=N6aR#~g93Tr(xJe#b|))s54wVhd=oz`yVbM{*AGMlsCI$#~N4p~1i zXLHz6p-?C}RGS%^MxiFm&4feEL#;w>+07-D`%WWf$Lm`v!mTC3BeIV$kC1tjNC(0q za2Ch`X@D2_Bk65+-CqHNr%0q&dgjt0QUPBY15IdjWpS zi16NKWHiVI{4U}ko#Sz!0PtIQgx`fCc_0FcKn|D(7J_A9F}MNT2}+T{@3)cV9IpVk zgTli+>u zCfEmF0ndT`;B~k!5*`NkaU7z&T|hffAM^pW0WYyfcu<}e$#D)C40sVR!ViBD zev^-k1{Z-#!2`r^0GDxm2H_Qim0&FPJwV7HD^f}PA;KrYHQ;IR6nGds19p(UpKvd@ z2fR<-UkDEZuHndUfOiZcCxClEBajSAh;Ks3hZPZi%!*tN`hY#4IS7M+;1j?{Vv+TL zdBw;$a6VWIwj!fBDB<{F@HBV|JPx*iC%}{75wI0J2KZe&vK>4Mo&g_$ZQxn(8Q6`y znS|2zF9IKc=ZL$Q@OiL_@(Felx0>^NK{;SKZy7&^e{QVBau|ABpj@^XVLv7|V7o|7n5-sDQxn+6I9E+9C{Yuqt2}mPV&ilEv0Xj8 z)K4GZcbLj&qoo;Y5*sxZ@~=ouDp8Y*)Z`heAYT=*#S;f}RAHVfWJ|YFbpaba@o$Qn zGF45Prlu6DDRWS-ib_?{Of_|inp&i$PE%7$)YR!}>Krv~f||zeaopf?r7PlUDPdcv z;$lL!YGY?OwjyUwlnd4L5;c9Mnm$XF=BiS5?k!NI>|Z!V&EWrw)XYLPX9j!v7O0D6 zn9`1)o?nzdv9z#w8nR?lr0Myk9o2;VNyR1kl%ja5icEFlI;h-9rTHb(ii@XpRQWUW zrxi|{+)+&}%$rs?xqvN#OV!lk5;xL`>8OP2X6<0oQrz>7ZlKRPxo4?v(Af>TxItGp z=;j99oxsiAv4eY}&r&?|T(KQpu^nBp9bK^g3Amq|;nkom^R+Tv?r5S)E*2om^Qi zG1Zlo>dH!WWu>~ZQZ>bumFmh$b!DZxvQk}HE~B$6tFtSsvn$KZ(u0LFNxZZG`;rhZMx}I9 z-7R{mQ!cmQZn@oJyQOv#-7>pHc1zsZv8=NrzO&15e9+nPL1)JYogE)I(On!Lba8yv z#qmlPM?e=xKo>_q7nkV>=;8?I;s|gex;g^7Is&>n0=hZ^x;g^7Is&>n0=l|nH_yHJF=&i;iUND zQ>xhJ$?xFfckt=zSj8SsW(Qw<$13)8jp^-BrR-k3@x1uQ9DDU3-t*$Uy6A{Eym+rZ z!~Bz4FSwX zhE$*4&OW`JeR@0l^mg{??d;Rr*{8R&Pj6?R-p)R~oqc+{`1E%1>FwgvE4!&1o4fe* zcJb-$;?pZTy?T7Fyj^^HyZZEY_37>E)7#ajx2sPtI|;_*clGJ*>eJiRSKh8Zz1@6z zyZQ8X^Xcv8)7#Cbx0_F|>=AFu*v+T6n@?{ypWg01z1@9!yZiKZ_vw`#sf~Quk=r}= z^mg~@?e5dt-KST2IqwRVGw)iGGw*7WGq0ZI%(FnwJR9W9vqH|i`j#`V#^ubrrloiE z+al+tTypHUMS5g^n%@@bLH%idTRK*;rE0GxcLgt>zh@KOep~##o22<|@%M0&=C{S) z%SoEwFDX_0;_vIEtbV`v`#VYV`^DeqNt)j;{(eu={C@HGeUj#{BY*!V_YJ=-{ytFB z{I>Y}K}qx5;_nM3&2NjpKa@1TE&e`H>e+9Lzh9Izu_c}L7TTzG)SgJ~!JDo!TR1=s zRvF9}W~tKxBbhNAuO={lkvT)zUv~zxhP~BXb+NjHnZrfuDt16!rmj~vu?Ol(b%(l( zUz#ddx8+`bZ`#E7&yTTo?^d-{w!FXg|EkBv z1y2j@x7Ju62G6p#1aA+X6M7{$jhW8=yva5)cpY<_Pg`e%8ZwutLK~Uy>}!2#b+#T3 z?y{Ql{#O~Zp39iKTyND4&9!dk?Xvf*KY}6aK(N&67#eK-YIO^h28UY{f}^dsgI5GA znNR&DINsXB+-OVdnczjiV?&dysn(mktM*f{o%NWN6uQ#7)N00rP@6zXpdBsCJ<6oL zxksa8N6d*+1Lp+{ryXt4<@6w*q?kOZu{`OtS(kG`jNMLM5X+aYk5bj8`e0w{PYVywTP2M*oF}{CZ72Mq+x?nf~+Fu+*!u!<36(tB#QG)p9#_g?4kCUk%Tz zscT|>Z>O%&IlLOki&>P)?;x(cnLgi{cF|uMpLjWD#&T5WJC9eL3L4dA&MX6|4Q3vAor{ zh?!Nceos?g?5g&>?RnySe$g`8O{-a4O{?*8_*?Ih<+{hG?H(<8bgb3%@M$w;T^#eQ z*EjsNHt$*)?M#(RuPObaTaE`}t-qamK*yaQ^Wy&`uUE@nyYOmxMa+W!YK7KYU5Tpq zf$^l5!}D5tO!5uB{@e7%Jz}-x^<7?{R9#E=eC1v3UhDGTf2y`A&$hp=pTEyDW$@o` zOuOh&&0WUdcbnFFel_0qco+CugSq2Xm%}U3H9jAEy`rff&!1jP%8Rwa>aMWrt{1N* z`Fl#QM5agebfm^~czr{4EooJ(r7w>4EBD0i+^Nc3lYWnTdQE@k>GiHKX@!6PzI0D) zeBtT5AZD9a2CttQ9qT!~GPH}8!E3Xg?>ui;-y@n)PxbB5>%~poR?jncU+W{p zn|*h!&HC!+eFc3KiFw2Gr)RS_D)UO|+2Z-i-;#_~)%nlsFFYMyUauUU4zKllJg;Bz zcw&pc4fxqrN1xUC$ltRV&v;{8FV!oPHzM^cJm2SO({g!}M|;|{Ra$seTMhesdKO7J za-@7@`Mg$AwS1nQ|F80h2db9G>nYRY%45bB@jm!ZM)Q7MM;p^u@5TSbQd0*<=J7lq zU%LNEo_LRV*Pi#ZB6ptZOBSEI`VsX1PVRUQRd4yxe05|i^;*y0Z`s}zWcnZPI*@y= zzs>mjh80!(>Gcg>4=zs@RdajwZ|;U(KDlfDeRfqX?kLf_k9&3=?J48G(G*`>)$6NT zTVDCR`-(hw98G`KcIM@lXON@iG5uuKKGx6v_s=83HrJpx=KSmDWv`w5bxU+>=jiO} zueiV8f{)hfy>iId+3yc;gfI7Vf7v}B9_<;+FXw1aT7HRMx#Qc9*Gj$nvZw!OPhEcf z)r}VA+3Ua8?^zpv?H_H_UA?aO-2VBCsy&CNG2TDd{M%8xU$-~Dtvasu`>Xmgn10Wb z;Em{H^yZiF-#v-`eF@$bFa3o-pVwxqK9vf`T)9X0W%VuPullO0x{Z&FKa57tXGeQt zsw&63R*$Cp$oqhIhpPJQTJ?Fvuczu$iQhxs_4VI9oA|Xx32 z_d-W|Cid6+|K!Q|$g+7JuUfY1uH^r0KI5-EYFdiinf+y}`fTe@@$C7}pK!hBWKVuo z>)f{NZ&7B{=kcVD4bStMsne=Ff2;nxJ&|9&=N}{gudl-YT*rTt!&v2i?lbmPEx+rh z|6GT^28`sYzvP)3Ft&Ji3C~0FdyvcXQa#DuY>qdBTRqP_MR`1bOERfdOYX0EPp8QD zw`R{)Z!Gkm&q4ili}CD|XK>>;ujN+X!y2B~Pnvr02^?IZ{uN>9) zuSb^1%TfJP(0`MolFtL$sIGy^$^{9^UI-FZufPz#K*|Xe^5s!w<(0%;1Fi=*fm^{U zkl^rg_%5k1a5v`_U;}snJOcdbTR3NrahtU|?3ci9;7@;pbJp*$KLGmydw$y?Ex!;O zSl7e;9{d9Sh)WA5Dmw|(1`U8eUt`Ws0AawIAXU=XFWYVp*fZN^t&l2dXLHV8*!Dn> z5to+9`6w_Bu&zjze3Lkz0@#<@X1x)gFU3ohl@}4m8YDJ*NZX6R5^yc>+sq!)_N`zQ zSOffis^pwCOKkR9wjTxTx9p^UK#fU#v469@1H24g18)Jp>~}f;5PS;QPua20&Fk8C zh`1jCYoXZeeQbx4lwAY(Ww1tyeGFio6#GQrwwJ`9+Y%}(PbID;XbU=mF5n+P%3{FF0w^&q%AStlY`@tKd!WPF&hP&OZTPfN$c`e&C#a zKJ7n&Rimn}*~8PW0~&(kfWPd`IA@I=y9HrI-2}P3D21USM@9b4+&jjp2X_o=hevAh%C+;e+6x;w<-^XVENBeHzzi!wM z(q`Qs`vJh(KQ{Y1#$-v4Exvx5xaR=-Hrl(v>tHWn|HUdceZ=`^;2`)G`2E8^iuUh- zeG=^i!2X9-((7^F2s8yJ0ro7cBAa!GZ1yX(QvmxAR!KXH^WLC87y|ry*+>FpZUX$Glv;iGJXAsZpMqE$O2lNAj!7vcd%Oq|TU{5xCJjeru zAfCsbYxad;CYS>*2A6?&9{Z=+SA%7MwWDnIHnVR79?$LPRuQ)bu)mqjUS;+Jfc?sx zw(O2Q++Krqr|hQzYfsrPfLFllU@!1w7CPgUcZg#zG5Zs60DJ}5AM6Mo`-IuQfhY*p zMklBZ;^oyNt`TSongQ0ivReSTcKtTCCaxXm1iAqB*s@s<%kBr_xdVyI0IZc|vtO1y z7K{gZAf7v!xFT>NC?LL22Oa>A zfGxni4&8RnzEJjd@B-KgUIp=T-X!iFun&9;*t5z03J6c`^RA@I%0tBc2z~>s_hkp` zU_bEdtIc@>&=@oYCjleJT)XU(WVZrmf)vmdoCW-H*we`F4~BrDAPXcr^_9rGtga*( z(~c(oJTL)F1{Z*0z&=9u93cMn$`A?6BaVH7Y}O>RuLjqE>%ns1*MBSLtH2si0X6_v zztP@2DEc2D{t>VRJO#Fc7r-lkJ#wn_C2w;64%i3SBd3bKFF5}O`~cYZ#y$+<+eV-+ zz67;EU2qI&0!{?+bs8q_bilqdHv7WZDWEHe=k*|t{bTGj!1`-;Iv5UWXutWrolX20 za6VwK7rOvV0TIAHEcQjf@5A|=UkVlh_Fu7=g6ibnK>RJ>c5pXfKNEW$*a#j1j{(2j zCpdowJP%$3yFk3J_7KNjCHDK^L+~m15*z~YK432q`xo#BQ1#FSYJ%$OyAJUU!ExYt za588PT7!1L-`=F>>qs2?ci8^`y+B_u5M+ROZYFV~0DElMxgZa)rk%~67DsTW6UROm zHv3=Lmx9Z|Re*gee7=y;V*PPpS+&=vv@!x`5qAl=0z?$=RIuMy&zgt;3oVbzTT#y4Mf&vh)dn$1yU>3LtEC35Z zJZ}+ktl@573s`f}z6G%E;t{+%iMt1^1NVXl0qdmucy66OPTW@TEZ6~9Bi()t#J7{T zh;BRw3asE3{4T%ReL3|nN5!VPb1iYa?;+_L9fmgumfOV#;$bXOXkHBZ( zAc(h_b)s$7%d~$7Ec|9CfSM9gHdC^CoHqhZ!AamW;7@PG`I#UEbOmPte|m4u`-36C z1|xvq2V*%O5Ar}^T-r3wr-RvGKJd%El=DSk3Ah&A1mro})W@xyuL5g8C9w1}_HByroo4)7A#4c-9pe%njjd*CDR88`^O1^#mV#QE<)HNtM-Ppip!JmOB>7ic#sDQf!~kQIG+w?gZbc6;7?z~ z`4Vs~xCz_}{OPMWUjtY;$i5G30?Sp4K##x-*8N)&xIVBVa3^0`-4}Q`@B}L}y%>0v z@2$QFe9Kx)(LlXmLju%^=Y!QX-bR#U2H9m`5er&(uM9jq>_q11;pwKG^vdkiaS z=d*tHg{+-DpY^gATi38^(hAm0x`!{99$>wsCs{4&1#6e}hV_p1q4k;dmGwQ}E=8>b zR99sZ-GoL7$0vjnS|qehNJ;3H zaCSl(>mRa4N|=4C!%qU9^TIsih2I416CK_Uz63nSg;{ertZK8?3TObDfG}tU+Jo+Z z=dSQz!1Gmj444R}fSF)ESPYheTfp659e5Bt0iFl1fH%OqfM=TU7vMW^7$mZnWF621 zgh3m?b4a)c=mQ1;8}Muq&H+4EgjvTpJR4jJ*iSV4PjEB16RZR5(-~&`A7<7JBH_iE5I^v8>j@E0DFmr zcL3H*4!;N3!z;|VEzFoLoKT;=FF+G;DmW7`<_a_B3ik(t!EnI%Dm(!cg6V+0n!=ZX ztHE{P7H}tEjpgtL@CabM6W#%2pCR@f3Ny|L?+0Ik@4@fDqS@39gaa8N#`C~py&ki+ zq=fP7`^dVf{`Dp6*HGc)`Q@qx@y+>9(3<0rnqPizqEf$}T9;3HGx*|@y?y!OQ>jsW z1FHBsv{+3h?9Z2=g@hTZy&9pz5+^L?Yf?9-d|@gQw#G#$eKm)EwgE zh_#0}5~=Q2)b5e7RK7MAnW9s8134;j)^LzK?U8IsnM?dcbh85xT-GIW_#>!|W5Qv_ z6Q$(MBSkc)!Oq2Qw=8a%B!{F)Nha{O&?!$5XVW77-TDSq|K$#%Rv7<;C1B&8SI-C8Mjz6+LG&!mLKj{W&C{Pt&& zr|P-XnpZwopZ{FaJ?q^3{`0EoZhkM_wRbAz&ckA9Gc4?DY*vNX8{0+mC z6p4|R6|Ryi4PQ?LQ)4CV&)Edno-aJxr{aTl$nj!k(LSoi%ptGDcr|5mc`+uJ7h`gH zRB`1vGTtr8k@0R>y!fhm3y?j7 z62#kcG%wDgT=`tl@%%Z&O3x@OFu8sBg~*i{7P@odQz%~^^$;K5iPY-iQ^{FS4ZlC0 znxxa*HYPl|8y6zU)$NZreVp8z%<%~LLmiL1I{f@B;^p2Vy8ZFllw(@8@p6Z8%i!nB zswo|iA(F($)A5FQz^h5q7QDJKb#Ge3ktwEKc_~%vb1J%AE2Y0TeSdse`s-RhvXohr za-t(c>cn53s(MVjIkF|YEoXW)ZQrz=BlDQnBPqrQMuS&UlVaNDkts&Qkts%lmr}Jn zuE%FkTQc^kn&$dk{3^BA2gW2kR6-b5eW_g;1xmZ~?x$uf}1H zRa2!DC8ShM_3FNAuhI|C7>Pw>#yS@+n~Re{r>akI?@wp@?`TdN5Y86OGOi<^r;`R8z z)WF=pi&ynL>5=v=8o$gNc|EN=0xQ?8T<0F$y6#qev|`-~bJTK0OE>kFmbd7m-% zqX$|(ppWivdA~l|*m9#jdal!Ro!q?7c6wGHZSS;QA7unG0&eOA_9JtTS|zqhbdN>^ zM(ETs)}(gh+9kHrslx-qb?RJeu1-Ba@qC?{AIR6Kms^+X)YQaOojNoyRHsg~ChFAI ziLG_&$iPUQdWm(3PHmsqUZ-XTGIi=a*2;FR8lN~`r%nn?(y3Rlcbc2pIk9tME!HHu zQQfJ^S;hPz_M+Uz%0qkAhw7Gwe>6UaS7&N5=6_WssS8i~hpNL{pFR1%{-9^t&&ghM z`m~EmFFIK9X+^N%JMG_TA8Z(G*jn|sWLJ%a*22)@&_HX5HJq8K9BW>vEF`l~S6kOx zood`;-G^86tqWM$yMC<>iI<124CU0AW!=j<-*c=5)*|+FyT!W8TE{%qW7dzs2kHzs zDH?3iaQEp4nl3JVq3^+pQ8k`CJ+blKfr3F#)_G&Wo=I;^`l8BM3nqFW2afResR4TUaZ~Af5+Uoi8OUid9wXHa*qISh^8eS_{BBq`%rB745|0kQM3d;FmB#Ll;lZ{eQ5xZuSF z?$MdK1G>9MFE@UfJoRh!>=0A|N?Nb+M|CXc=ZlCyNs(m^h3{ps_` zHOp#PAyQ^pmk+vpkmcx{W!1e@{<`t!ue*Uol*Ja}udRFSoosy}{JYkdvk0^sf9}|+ zsTZ&mvwJq8oBXYrzq9Uwb(gNo*zn|fuht)$@c4u+6A~};YQ2`StR(9g_WhHY$ktXzR&%dw^|t2r zzpBnvb>{Xrf93e9I?exf8}YY|f7dc|_KGbNs%sfui>RGgJF)!Q*~^97KSN5< zp<(-m|8Ld$Z?r$D#a)AT#cF-(a{24VU)yz9EdKQyU%#=#3OD|nLA!EHJ(tbikv4LP zIs5Zc`5R;{v8MC}Gm?svsvhSy`}jDoe(McBc5vgtzt{M0>$l}!)NgqxDXt$db-X@w zoYM!)V2}h=wJjqCVwx%bqb@I}jw^d7IcG>VAGNryotH$))f3V_PP^E-Y`2ULa zH?#_>*9+b*_3hZY@UE%%|N4=sJ`{1Z0DJ7ShmTUT} zuUP%=TU8^_I}ix`s@4V)0#B8HqFxTvR+m;Jtxc@ho!C3@Vfnk|n`#X^?y8El$NX7Q zTYbRnY0VZX-~*0RsJm`V;(yG%Z921ZnT)7Is`0v0*R@;MV_iu7leX4B)Y|f{gWlO= z!Yv229OPXG$0~D2t9mb+#r-zE)k;gfYsj-XcL!z;ezMNY!B;oDBm0i*VB+AGr*;(l z)>ULniwtmG`tKvxEVyPt{JHq4eyt%(3mbb!a)&T|h2OLLuG)9i3)i}yJzBiq;~(ej zZLxWQ@wj^yV8-0@#F0Hdy-3%qYlN8G?~*Vy;oO8BbrKYJGB7{kwm{3|wZ}E7`0W^X zlrgXJcD^x?(cIzI<$B~6A9rCwYR$%pMM(j5VZzo#BV~Wv`t2H>Y0f%ToL4ch!kkT6 zTdVT%wXWPxE7^p^(a>f6+xloxcvuh3Wz0>Y)UZc4y;gxkewe|z+uarBm$=I zEj_pLT&?Yy%4gV!!DSpyeW3Gcon0AcZ+Ko?_SuFcwjyvD_pcq!X0|TlyUKc6OW*ZB z$^GBa@=nha&-uBhIa^WjSj98-%-MpqCs*!T8&J0edWKyYv)512T9$A4d4oUYy2|Uc zo~PG69rMTGwyoN=jrrrQif1amXkesYxwduXzheIQyl0zp63#Yhl@%{ml*BxD{n}2I zAIF&Aq^{}QxU*qCQ1M#DMKR`WYkO9H6=Tlpcc9PJ{S32r#gvMXF=qMN0hK?;m{&Hv zzv-*Z+%o=I*-ZP%ULT6pM$@&!)~4#(m{d7Qm-Us(SJ?jJ!h}a+ya$_gKJgtbsph)Y zTGDyz8^#!?t{uI$r@lW$30mAp2&VPdeskL7(E zzE^vm@d5b!+ok0(94oCxoz)-;6y!L1i#KiHuH?<8Lu{)fgPGAkwPm-1dE?4p`&F$c6 z;y(xH!4Ggx{fgs&dMQ|%q?QHLbHShW`CHEUJJ#>cdDQxYunD98d5m3Z#YQjk3{$^W z-H<%J92Ytv6n_t>tlW>D&%iDxj&=zz8-GKS7f<2CT zM`Sv0I;`jIhRVtdDa!)n-2_sx*P@&i2}^6fQ9~``8-`_{0D7zh_BdV^q|7I=cT*0$ ze9gTL?vKa}@}9kXrw~v}Yc?Y^+$r!PAOX2;lZD+YnQs-AbpV|}7tkI2H+3%GHk<>} zz#xzghJkD_3XB7}U=k2NneQ29a6S)Q0v3WR!7^|oSPAX~6~NRv-z+TK0>lq55Sp^x zO}Y4a^y7<<{kXg zK>YU%J%}^kFAU;%C>R08f?Oc&Wj#CCOMCf*a($0)UPdq9XF0kH&@Iov%-A07Uui2@FU<8@HIFDxPI{~?*?f6 zo#T+IUGs#R&1;q-+e%jZ`0i^T*ZjWPAgKPCa0Bt?dkKsCPiaC~LcOz9&O*vaUw}TB zb0g;~KoCwDd4zK^=>b)m!2aB{@zR8Qb@-6ObMu++CrrMtDpk&zKDqK;#Y+y~m0Oo( zo;&-}ca!#pFa5&xDu?gQVs^bv+6TV$2m7g-(zR_Wb=-X-Pp&OfbBIoALrwo%6Us4r{4yZa{}jl+ZMA?zRO_BBc|(D zA@3wP>AaWZgg5C>zTc31t98h`O3t}_vmx=15*j;scgguq!`P63KerNB?z3|*=kEc- znTnnAUB^Zr=OE|b`Zx`c^9kpV`Z#}Z9^^X%BWE^pej@G}IIUItq}2)cCTvdFlCU-5 zrGz&UK27*GAu;io#N!fAO>CQZPU4Wn35k)!(!>RcS0>(`xGwR&#K#i1C+* zVb8vB631*krs`^#K8rM!Rhm03FSjIbP+$2?sgluZm{66;laT!Rck*lUijl|{*^MwM}HAM68*oUbSCd# z30hM?DdVRJN==v;$(|F*?_E@w>+G*qIK3!$YT?9*YD)f`LDMGj%29r#B!6OVX?~uX zQlMs*s+qY(Gx8;mn%zNI8MzTPF}EmR+@vNJ7v&bo4rOGJlL@&Kr_92A$Sy9Lm^(dx zQenyTQgc$o7G_0qQczfuJ2`h+?u9eRN9K|_5?hq(Y>CFvwBnMfxkZH+c@Z*lF2}Sv(#Sv8+a}qX|7$YUt@zO*b zRfwM`TJBV~dy@ol%!Cvn!lZ!E68r#=RD9N9t3a91CnXVxdo;k5_W?@n6tYq@^+}KI!gd*=`1|Ga{ zMu|ieck9xjBOBmFavhr@(*BTKQan-RPMlagV_K=2uG>8u$W1%5a55Djo>0>Z3fX`z zPt9SIx}xG)xP3;1>}o>ceDl3R)|oZalC9`j~QlzsW87GJ;*=Mz#obxaXn zqyPs`C@!Aj9*IjLh12E~Vub8^Hx(7r^K(lk7Utf*F!Cv){1Hw0@cF1enIJ^m+NykP0bMQaDu%nVvtfSlZ|uHsvcREtG@Yyokz0 zRW5r5=1$_ZyP_%VI>`C7$tt&)IPA;i!ptq^b-NN?Pb!fu3CTlS$t?vl;Ld`35%CwX zMPY6p;H55%nlORmyi#`YnA};nXgbNidfjkmOFHy>%+aO#4d>-+aa9_@7Q&Tzc z09>=v+EfP5_-+dMB;kcInSg;kiG_!$ISt(wZWwi3aOzRQa~XHIJe*GFwCUL?Z8|dt zSBBG|fjKROZ&JWVY9@iJq@~h;0SBo(-skarG70j>bNQr}T0j_eOfA8^a0VAVFwPV+ z+DsWs@G8@2Xe<>-&S`1XEuBR;i=Ljx{UjVc0$=IUEUpYZK4!I9oHMa!LRnjsk zTyQ9v$xUmSIV|=m&ftP0$RffEV0g$gvkZTbdIn5mPRnMBS{CKX!qH1E4!2b^V5 zj%)?b^SlrT-{sH_Iel8oC2&n8aKW8qO2>s~)FYRHZ%MRCE(cGO=x{mUHHW-&NH1y^xKS91%Q<~gn@gr~q4%Ngb1C+{Ic*Mgn#%%~U4~D~q&Byd(oTYt7eSlFLKYYLBDj|7CVud{;)hl$T3dMaObL zv`YnTSV=8v6_l}3!eY`Ao|n?N=5STuawNr*SVJK3ozn&hd`#(Ki=MfP)t-R`C7eqP7Hl zEP*2~fj2Bwa=7xiirO+*(K7J1jP_p6EojT=FU#o5%c#%t0^Tiv$0QQqTHq_CL^_S0 zjN!77odP#a0h!Ynl&4Xs=}I=ckeby%g%i{Z-`hd zzy+(m3?2+7Gy~_RNl*vI@njCIIW>=g#=K>XN306U?%#hVe$Rq;P!tZb21=1C6jG2N z(6vix6gHbo=@{{|<$e3lJcqY);Eyq1DeL-4tx#G-2PnfK>q(4R$XMN$;h`0d6fw-h zE9=Rkwtx|~uz;>n$zvcd&FKjYcuToS^nz@mfWceD5ROC`-@u8JdPWC!Gs)x}?>b~3 z455=1$~?eh0;D*Ffhko0tzp!~h&vAkkib(8T#gNf%#uYmI`0^(vO3}eL#l zY#PH5T79yJ&XdsL_%<aRf{oKTIlBK~GIp z;P@6zpPtf}N)o_W2Y`AgAsIeksSSSA1H>3@CWriIA$X`Cf`P&`xG-2$2E#LWZC-xL zELv7Cz$34Yu`ZjO1EWpnCc#y~E7&g>n3@D0a0jV^cOp>I^AZIC`0dRufkhUk6fLL7 zV98;@26IcukUu39PX)?Zlniof8vP-kK|Bbo8Ld!U(m_5sthy}Z5L5jU1tpyfY=&G7 zWWyiGDj;5V7H}vXY_$wY89!(^{!9Tm09I@ac=C(+T;7;xrw^mWL{x;D}~G0<~- zV!U(kXpc5}wCiC1c>iesks*<2Ac%oG7fR_xjS|lAk^Z5vQ5=rYKi)akGjVjZ2NFHx zH}%W4tso5iqMh*zF-HAPs$YRjt1wr2!UeMW&8uIoHwD|qFMJN;m+SMna()@V^J+yN z*IaV7egf-KxzmAbt7W$YhFn0oYL77ZXhsN*oUxva>z){f7z-%ZUujsUHVI23{i^N9 z(~RStxdJV#aZJ&E5Y?M&b&%eU&+M}MQJkP>|TC;bZcf0qcoKzcsSHs82>VIDCOza@!JFnL1J>tDjg-%6} zc?WY@ABS*lppkd z*ZX7d&s7ec%trlPq+vSm_~Tw2mcdNd3VF0&=fA4!1yBuHedHex?#9!-g^tbxg_&4~s_;>jC_)qii^Pl5C&;Kfar@zPF?~h~8 z<5B-{?0VGwN$h*f`A=f!{AloF!A}G~75r@Q3&A^s z{~SE%xhMGb;5UNb3Vt{E{os$3e(x8-Uj=^~{C)7*;Gcsp1U;cZC=#j-HHKP4YeE}B zTS7ZRdqSs$_Jz&~ofmpls58_P>JP<37lw|8j)z_w(nHBmI+P2Y3{^r)p*M!!9J(y@ z4(Q$96MA3hgQ4p}9}RsBS~Uk*{@;iHi-G^w7--c#75YNxOQHKh4~8BJJsf&0^kfKp zHT1jCA42~X`tOh@91ORFH-&eG$!V>>3*irxe_ygd+NJOUDt|uhrQx@E&koB|NINh5 zs&HqxC)^*7hoQfA{Q0$`;p5@ghV?4kuO-8`cuO%@F^shr|CK{(1OR`1j#Ih5s53Mxv31NPA>sq!im0*%g6R_W$_LkJ0q( z$brZO)iiusZzLWWGoCR5MW*m98MJ8G$oqVy$cKY(i2QBjt&w*`u8dqAd4J?Xk&i|` z5xFh$`N&<7dm`V6e9MT>{de}iZ`mJI*r$Cj@>t|QB0o`2aqTye-$$N{ycqFCW6_3a zYjkaN6YOt$qNhjCioPOxFxnp-ijGHL9erIi9X%PHk6sdeOZ4xe?~Yy>d0+I}=nc`E zqqjys8@(g?mFRuZZ$ux8elPl1^yksvMxTrRHR_K=Vs)|RSVwF_Y-j9@*txM+#4d>S z#16-XW5;6`#}cubST0tKEyUgsdvoma*j2H=k9{C^UF^Hw8)C51{r~Xq5mhFSb}LF3 zP*nb8h_oz4C9Qh2JMqq|Js1-y1J+bLd$ez>U)Tl_{waQMxn(ClIz#K%y0NnEApG8r z;W|Uff|Tl(4ViNc@*q@cknGNY{0SW?;t8Y^avi4A>W#?eT$y#6wk~qZEwvu(-3~z1 zL7F4Ts{zlgxc2-%&a=E~ZfPawnq^dSjCK~*lO&LbFUWjT9+qPo&uLs9lw$+z5WD`5 z^N*vZbF1J-`~OI8z2%lH%K08#*WmgPu8-il8P~12K8x#zxPFZ530%Lx^`E%9u|GbK ztAgvTxUR%?4X*FvdKA~sa6N^q5ohpr;QAb{J8zlZL8`s0QfF|ry zpMZDbi#-d#>0bic=D*_Fi2T;z`u!5L%Ujoad~j(g?Czi9-97a zHaRs|pb@7;(~`~3wfTQaKlBo@Z*7HLDZW{*n_*vL`h31@F`Vzgc3}r=PVrUXNCkBS~EEO75VIXD^Ur=cerI`*zGqhv45V1T9 zB|M&&CpwkxV|k+gLO%76@OR`W6(6FKr$GkFo=KRxCiO+A=%K8coP`aHdJ){ALz#r3 zWikmBJCtaX(U@r z_J0m~x8f`=#DxYZ0qaHrmW>27_=ys%2GF)9U?8YW^k$(Xg|2^!syQHVN=F##NZ44k zsT7`Pp*+mb!Zv{EGrpcG!(IR#_7pU2Q>euhqA$Th26gPzvX-2LvH&|?r(pntK_r>N z?zRjr1oIQ4Gdeb9L8qF8ZXK%EH~Wtt|b^GU~8LP)>2SrLwB7* zA^<>J3h|*UPod?Y zA;X3A=J6lFg*2356WwwCjvmA>%ozHz2Adi#m^Gjrnt_R81`4DZD0^mr(iy0$XQ0}e zfnsq6sGWg|8=BaeC2eL|OG9U!p2SfP87L95P&z=nvOEJdV@{iec?lM`*<1n_EFYD! zHaoA)!mfepXP_d?=&dC-rkpXry(E4Y9-3%1F8PI43^qGOWF#{B2O0d?HV5zA{hsS-e3s0!WJpQAY z^NTRwXqiPoU@^%o8S$1>0hT5PsZRuSYy_%B{D*!B29zvxqFEq>*5OHP4xL=kvglgS zJK|b~>Jc`c^fcNUrOl=hFAaUmER90Yv7iC6P_<@r&{isSF+M=?voKO+(E+j*z$;Kr zgBY?fKttc3MMGtmm!Y#X>_i~R92A4pf>Y6mYod2Z-G-=*%zF%$#4DKa@=&4YQG)!umS04wOZcC|g&51wppE+1m<`Q^D@#aACbJK_jdY;Q5nM^^O%Rxm?^*qWk2Yx*V49&re zHCL%HUq3c zD8VFKnwmIBO+M}eGlf~+N0ojW^(%pFU{b=xJM@JZ?n^L9mS94IIS3ch!43AA64ci) za+aW)FJ+;Vgeo|P#6aSu9P$NHN_k`q`*Eo_5%1ye$Px8>l)va%CD^Y^7`jVf#U%`I zFjBy9f;zxvT|y(4=C#rSqAZ|XFrk+~NhO##OH0TV=1pZ1)S)<^)yn9JWmtB~u&k9~ zX)L1}FjUgwQBD?cL6M%42FD!@UY?;j5qqsM=#|s>APv2B1~BU6(F(AzmQks44(Sx| z8g{8NcuTp6Xs{xd!C%THz+pKqL%5(Zri{_33=UIrG_h%XJ&oRB(l@AsV} z>Fztnh-ZAi?;Lr5HjHyDf9FBD^~mjz+y>gp(X!BA5jxlC{oXZNMDflfSO!RhHVeqvoyx$gQpwEJ{8O?9wN3HNsuN4Nx zRpX4=z8%B)Q0BMj5Y_N;qk_d8XhTInw^D(5h_eiIb;?Z&*d>VU5=3@M&RvpGSHHxR zthxlrT~g>SL2{QMxl2mWC7E}P%Xi1+MiZRMSO-&*0L|zuiVl{l0yG?|z)Z$?RhYvW z9E?MAq7g9CsbF=Jf>f}KfPrqQOSe>_TPo2lmFSjAbW7h5#yD}KvJ4N~z6Fak6Q39rs!`t>)Sq981_G!4-yf7JDn73w zf#FXW4NKs}A>%8C4XRaegHjJx=CUgF9-*@y=`1~xWskH?kF-sXRI5k&W{*%$kKn&2 z#WfZvWe?W*Nr3iaLJmoj9+Cndl0Si5^h+ZfOs`+iZLmGeml+p=xw=WB{Zi$As0S4Iu(ai2 zX_~`2#2Cgt%ry-vK%+hb15((5UU`!C9T2Pz$kzjs(}1)gM@)Waa-jh(0Z@<`Og1F| zYrO;@)2IN~3aCHO;N!o;cTyCL zp_KJP!O(~l*%(Jhq#y>xk4QmAW{ox*sbCc-(;Af|Mx_CucTqq|X;j)_R0d3AOdgf$ zj!KUim8?gl@}pAgQ6WR4gN^D24UC#iH_FvPDxVal*eXE9mIRDCj;1l8Q4mhhjDR%W zC>Ihb2!1561pSVJEE#k=CKVZz<{OjdGic5bJ;#K1j0u&ENwo|{FecS9M#C|wkHHwm zq(6=6DIvr$u4ZE9V^9&B0bvDWT;3$F47`u&*d(AJT zi=s?ks=|g8uEGXKALE)S^%d7mF<>ySqf+^!LW4)8^hZ<1;4v=kKQ1jkF0DE)Y;v57 zub9#?LE|wYsbgG@MX(`_T{MS@rg|<_gi?=7YKAO-JZ&U%f<#!9DL4bFOXCaZrjdc6 zp~f9z0M>nBQ7Zl?aLr)_BK{)?Jolu(k+Fz$Iu!mhkx!l!{nGy9AZb5>yhnSYqBF#FVg(HKi?2&1%cg4=zLJ zv^+D>d6d7HdGMDL1Kcs$;_o5;Lb&2D1t+<~Xf;FC5`Mw<`Fotd;7$Bh-+&h(jE;w2 z5H^30@fT7Le$kN2m_aR9wB=G4ptVJAcA?fnWHm;3xmbXi#i$(m1%X1^4 z?^fv!ATG3zDr~m#G1bN(e+P6-JAt@tFSa4E&a}pWRj#sgw)`;aLFlq0g`+A3p$&_6 z1UtHFp-!|ZSL(5ahzFk7Y{z=9%FRt@qY69dG>B_apP7QQ44tYB*hGQ2RvEgq z1s9a`%QK(tWf)hqj@7UZXk1a$q-w1(e1T>6DlN7U^l^^3U8=lXZOAf^a`?X6fI8!L ztMX#dM~q(31uRsLB*9}fb4YP}*r!}^Iku3WPv9%AE@oW8I>!lnd4*33lyoNJsu|ar?yzc2u35I1w@cA_ z(M9Vcs=N?l9C1g~$cx<*fN~syEfXQhO`tL|@VyCj^50R_LR=ATFTtXsc5^K^IU;2amR#z_ z72t$YVqh;dp`=u66p4t3HKCPj%(!TLxgFGEJv(ceL))R=cW(>-dmyc0TZr0bN5rC+!uei_N!P#Jk;9$@vtQH6(T zCC^yULu$kkiN6cISZ1u!hXe{`A4WaO1a_#ELYEp%-E)R6Te|kRl>6LqyH`!2ThZ^z zxH4~Xa+q$#*WGbtBy&T1Rco$f|w=}uvE)pSidbGDF-knR-5)EKZ5x>}9LR;33S zW8EnnTeWV-6@QpkvpS0=hZH}2y*N^EYki<*2Gp&e6zyUk>P_Bd zY8M4M00{TST2NxgN8$mgpi~E3V9_a5{hkI-n>j zZVQodd4-M zms(^M6Xw0d}l$0S7Y(D1A0{P9qxIt#}%%DRih55w7krft#k#Nb4jmpB{|X` zi8Eblklk7znftq;y-L;)jkcw6krp!b-1OYX989QF*630)f%FlpyhAEow|-|-jp)>n z*~=>$47b)t^r=FL_H?PCck6;W)eO)L?NYtP4IMQ~=ES+A5 zyOliYhW4uRx}lMce@s_2NH+O)=e#-Q#UADVYkNc zB103&9$<|ZVp(zP5$$oU^2#h<;@Y9q(7U0+tFgS=QDfDF*|DroTRsx}h>kV^@X) z55tPvij&QBgMl9*``7k%cC;<{`vOQ+5F z!^mH(tET3crwoy2(@M%Yg5ZEWo4Ix2jfhQOvmJ~rd<-}G!#I#Ez1Bzb} z&ab=iovcQY@=)h0>GRHV$~qRFz(np${9ykkLbB3==Nyqk^{6|)l=xhKLO5q?B4L~H zvFQcye*E$cL*&4;Vz0(md5RL__o_R!#L}CwpUKcm^9&@$5Z-FS2a%r0xgtwrW1MQG zK6Ph1O1p49iqs3o5~`5&b?g>X^SM5}H>F+5xLn=hlqjTL*mbGq9Bg07Nzx&lrL$J3 z2&ctHELVMn-)Hf?%w1T1ww#n7TWM9hSZhxteV!LZtPiR?OD5?P=VDdj&U&V3!DaNJ z#a-x@bcn65DmP0e5)MGPlh4bTz&^!v*so=jlYYn93HxbW-5C=4#G!>s|3D3fInI;L zd7c&V&yiE=EBO*mJ}`nZV(S}1!rLi_6DyRaQmSM^=cE$y0ot62bC!VhqIH>cH4K>0 zq3{7GTqxd*@8n~{hV0GtOyn~>JAolH9a4&)FK?mGwU(uQI zbTGj#??OME@w2zHU4))V0YY!Yva_F#DOnV|89@>>eEYG;QOUX!YIH*?Dm;4h4xvHE5&K}0{ z;{-_;T<8^oQpF#}ugIoC zSJ>RB;tY$9A#eo9W=FQiT=wDoL(Fw9}z!OT`hfj&x)^W$$(B1Y|x#xNv=U`l1iB z$|DjT_VK#(pJu(>Yf8ilMy#`!Tj`j#*`g|^)sHNzI_qn}E$g+@ZY$#>M|&sUWQ8H& zte2Iq=%C4EsrR+uA{XnBNtljB|I*(npRj*f%}Bn&sm=5SzB1p*74_xHPR5qrY_8Yr24^Kasp4Dpm3~J! zxu%u=35*O9e>IIS<2&`_(k_$eSLQe+b3L4?0sG9Btw?DZ9?AE!JhdR{F)>D+?L_-@9>&S!i{jGN_gTLH}UDX-Y` zm43%oB;8u+o9SSSz9YU#4&klJJX%LOX1ilmJm4$in^M0;&qAN>l~iWE=vSMgjg#+T zQ-z`*3vV*M6VCCJcuN`WDE(dFR(uox6<2>T@s9&ykd75!EcIB^uiDYRmR;sAODpgu z^}=B-j&!75IIkhztn`I`%=wPHy*Nra%Om)~0V%4!Rys0HF?DCZIHdRh;W7_$;*)SE z|2OATGm0Nt>6Jy1QIy)9{Ln0CQS}SAEsW9$%efky{CqXIl%IT^Ihp0b zc?Wp1$|*KooQ$vnZ?xPKPJZZ4pQF1IZ-NKH$^YGSNVv1Vh>i}&{@|YzKa{tp(2h<% zAmzuQIj-@=gwML@XGqx-aI%NOr&V9+r#Ps7MZcDO1x~)rxtPh{a7={@KjwZ59I%a8 zR{BD>Ja<^;UuORmJq_XHGgg0>aT7bQkfS{v>0gwVob)C-GQyqn5m}W%>UY8g&p2XR z)z>Pg^drvGo$|KKyJaq8#Xb|K`tC!!xL3cN4d{6W+?lV?1GW*l$}jc8A>(Qsv~sZ4 zyExlj_zBmxtcGXSig>g7myGYG-e64CkDN~W7vWAhO6HGT7w^p1TF)Z#zuAsbFRnju zwy(8T#wq^@oiM($-t?1xfp7HJD z2=zkb<}8nuzVsuGWlnk?P;wv+f>->?q7xZ^2`AmIgyRq>2iz>D*a5A4&3Xy_xK~cg zY2T~iM=XaH-po}gqP235YdEz=@nI{zSlGB5!#Uo`o+iSbbla`$iiErI%)Ls4JLOy9 z8(ibU_*Q*QJo9vQd%c7YQ+q+Yx#@&(r(7-lh;S!8h>eA^CG}KRzOru3gj;y9;LdiJ z{!T3n`lHcc0CNGiq+&{oSx)r zU*Q{sTjiATo#PkxSULN(j5~xo=|uPgrFJJjly+n{NSB-@dP{1V zoqYSSlCNe#anAH*T%h*ZNw+f3BAo4O;Zx|4z1LZO+3!Uy8}VS3Q})>r?!<%4(+PLZ zqXj>NJIgQqf^cW~W!$H0jC_gI?;ygUDBeJNbt6FT$Pjj|ms8t<|q( z9N|hU=Qu0;jk;WCIn8uL?`qMB1$U08W_!^W#LE85wOmel#%wQAuHeVM3zgO;C;gcC zaqFo}`VsBBRbN^6LF*Rz>Pq^-v50`Lte1Nnk@*YGrgPEBpjt^onU?))W%{D^w8}Gz zF`ae|nU7d-;RA#dKP$`Q=2s?t;)G1Zx6(23LthzoxbQd5-r4U~meVcIm~?`T=!oy; z!x=!Cj@2(rI;VzpW&A9tiv8DGGbs9V!p(LUJ&)9j@YUw^ggfcMTvbL*(#m>qwTE+j zlzP#QBjY3Wxa3@>JxJhg{FwF~t6hXo67DRI$c;Fz)78Jsd}TGGg-?-xC>1&Rt&HQe zjgmjOTAn;`B&8UCisNUb26g)>D?>O`n82 z`@8TH!ku!dSswSeBYa8x(a@U5_r#zDccx>OQ|urXoy66yH}1i8(u43N!pR>jd`dqe z+({?G2PmC5@gwsr_6oL(Tb?)JaZrC!#W34NRufouVX-4KKKX+M7kXpwa_Y@Qek0t8 zXAABur|1o6ogx-j*4NZWIrU)NA-vl7&NUD2en^rE%P!QFQUdf zdwX#_B7F6HafS)fvErNbL(85WE^-v@&Wyj3K9|%uVx=Q|I|nLfzp%05ZD;v~ZV7kdQ^rlsYDg#Ub~NEb>OEUX=$SS_ zCm%M`=Xw!4-puldykz0Wgs&W5$j?drPC04_wpzkxUHwkzABPB|MD~28KXO*)#E%IV z`nT$9rUOrWs+P|6Lezzl@45Avggg0wtW&}`Jw+g-!(=`MN`y5+hEC;o+R<8Wyg{-qz`uxFLNwVq1W!*I8@ z6VDofdYH^O^va^c&Fx>JO z`-=%5!CSG{3m?OY?yhjB8+$xp2E3xA;1f$eCGU$Sn8 ztLL2Q%lRUNJKND*2`*+oA@cX$|L=b+B9c>5q%M7 zFHSjJ){hbH%y$%ZXS=w^BQt%`!w;Yp$lJ}GN3`NQ@gx13aPl$txI?&eToC#v+{x#q zzJxpbm$bVHKZ0H+8Uzy#m%PZ=;xkfyxL{EH&}w%xK8{d##20#Fd}sU03Rc3M<&^%; zwe!w?WTqo>pqn1Js?v!!(I*h@Lue5;m-2Ne4p#4oNzgzg|kqR;+^Yc z2qzvaxl80Ro*Cujld>O#qYLE|t6n0{nD990OIE0ua9M3(m0xz>^E45soN2Z@C2o6t zrN409my@4ZaA!M8KV^I;9!xmg6*$s2@rFa`0C&%$xvtEazN{N2+$o2P-HPzl?A^3> zJL}t{^c7t7;_MePUT}?~vz#V9yT@x;Crs_RlMZD*NVv1Vo9T-@xw2ny#g-laX1l=S z0^n{w$yyOUs_yJL!as4aor1gDy^Pj%jw8Z{;nzjUb@uqw+naFOD`{IX_0{kQtnleR z;fU+^SYNANX8O_}SHj)vWMrPjS&Neoh&)5MlP}4xA+8o79#*D5quO^hxKqwI%PD(M z?e-w9E8rSAr~EJS3D*=k=}^u(Bb?=2nXkLwnepAb`NST_)fi6tkv(Lb9XZD}neTIt z2l<9uZXuj}Z)JJNvF!9F@*d-pPB^cZQ`KY#9#>I2`GDCjvb)6He;MD|US@sW>pjeR zEx7uliHFtaQ}h?+9Dil~8?By%yT?ItM<+iQ`HiJ55&wG`ezcPNG(uWXEy0ZGajGKg$zq#Su731VTG7b{%9G6AE$Fqu@@kiB8 zC$5fl@@?5k1BWQCaZ~sh;ZD7xjGObW-fP&yh9#rn+hr)-s`p`Ll z6giM^@&SAQr9GE$XFnA>=jvo9eq?tI;T#v-`bNT?d_&rW+BzrR#Lf<f z!Y6sYnv*|EyA$rjr}Qtvo#mJLH9UynpPm1haQ0G5OK#GSsU@=dqu_y3vQusmInB9l znUp8<=#_BuR4wom>+82UFO?H_OA35r|+%DElnrqDdN z<0bGs`n~qcwXb;RLsw{5Yah_A*FtswsC`_!Rr`$gdF_kZm$k2I_i2y#|3&+z_8oZ2 z{-O4m_EYWW+Ed!Ewco+3_J3)Af!}POC*+C3Yj%^T4L-9sdbWDL=H2Pp>p9JHrsr(W z%RPVF{z}gUo`aq~&w%HMXVi1d^J>q8C*etXGM<8`1P_3(_gvz+)N{FKhxRVd-+Oij z-|zX5=fj>GJvVzk>G`zhbDnpE{>k$t&j;GS;`y5A0ry-ZzE+Ids(fmhf@!YrU`YPI)g6%y_f#f4$&+h4=N|H+kOzAJ|X&uJE4n zUFE&ndyV&6@Acjryf?ug_HEv$ed{B)d+&f>?7O}9dhds4?1$hR`}^J>!9VuTyypgg z;cW^1%KKaI@4e4@|LlFi>+wZ>b-pHFt8a~OgYt5{+xJp_~ z@O^!KV5s$mz+1hCf>-+9?Yq_UUf&0N|KR(u??&IvzEApY^Zh9J+5gcK_8)zJ^8L3@ z^ZWf_e~rJv?+diR^L2;6Q(N!f>fh@>(|@l2mHtnJFYvGP9Q613e;gd}AMua+kNIEi zpYSLADSyWQ$5_E%@-O%|d0y{-i}Hy5ZvT7zAMk(3|6zZx_eTFG;Su{z|5yC?`tSEY z>3PuqkpE%-_pAP}&uH5m`4xO(Kj(km|DxX;2nM2ox*J+OaO&)Bb9#VhuOLDMhxm&2EIh;QtF^nE<=$@W_Vw+HSD+#R?#aDU*zfUo(X zz{7z@0?&mW4g56lve1)(Q-P-g&jg+eJRf*5;0*?=9-@TaeCUgz zFNb~@{wn+)|4Znbq3?vg7fJ_z5c>DfO8h41i>dA<_F(=(F>xz@G5*X z`kH7WIvXuT-w?eldKJ70-xR$)dUy1}=p)f5qEAPkj|O8+v5m34@EiO$vA)=av5R68 zv1xb=F2`OUyEOKW*t=uzk6j=8SnSr==VEuo?uk7Z`(Es^*e_yF$Nnp()kJEVYSz_k zuX#z${+jb@E~x3P8LBy2^O~AO&1}udn#Gzo)m&b4WzBnQuB*AJ=F>G_thuM=!J6;Y zJXZ5m%^z#D+M3#q+U>Px*1oc~uXe2V)wPqg>Dsy4h1$QZeP`_lYX7nJGqrctezo?2 z+J|btU;9|?f7G6;{eA79YCUz)y5_pIbzACo*PT&!Zr!Wu4%Q9Sjno~ldtF_sE?-xv zdqdr2bywBBzwRS-pQ!sn-Q9H$)IC)9{kq5M{-f?x-S6w3uk+Q{)VJ1etlw3CR{bmM zd+IN&e{FrbzEc0@`YY=HzWyKTKURNh{pafMs=ufHU+TYI|499h>z}OuZT%nXU#Jf@ z)Hk#>Y-rft@REl84d*pn(9qj3+;F^MvLVw@Zg^wE?)i~GqhQ_xyzPIrsjkh*_vGKmf zZ#6#B_>;z`8h_vTe50=^+SJ(8(X^>)XVYm-XE(i~sjI2KX}IZF)5T56rfgHGX}Rgm zO>b{{Pt&zcH#Xhc^o6Fon;vNTPScN?o@n}Y(;u5&XbLtrHE(R*(frcpvziYycQ*Gm zA8Ed*S#O?gE;TPVzoq$|&F^czzWL_n&ouv2^WDu~Z~kWU_nIGV{#o-=&A)4YuK9&# ze@m>TrDa3Q&XzM;Uf$B#a=2x*yFmbTVK|CL2G~ONb9Rxr&@EZ^Q~`e zeQWFAwO-x&!Pbwo-rRay>la$T-1@cF2V1|}`oq?rwVrDIL+gLH2HNV{+S@j_?P=TJ z_KLQHZNqJ^X`5*~*|yyF=C-%Dy{qk-why=6)b^>i&$oT4?Y_2uZF{)w-`k#O`*qtN z+y2t#ZI88osHLfWUHjJdjlMGiJKJB{es=qT_Ve32+k4vk+Xvf++sE23YJW}pM0=t= z)t+k3v=`b-?F;R%Z+}z!TiV~&u6zHk{ax*U-~Rsg54B(4enb0B?YFew)_!~Y9qo6u z-`#$1`~B??wm;PVaQh?ekGAje#v(s%|5^Jl+JDo2S;w>Oe{O%F-P3U(5a@_?G$hZR=`V+c?yATf>RA>9$KfR{*m&wB6Qr7cjcB@k-C*Z7#$~H%>O@8{0a*8eDGN+Hsrb^o|1^hdM?&F7CL~GutuWae3pv2JiDc68u^4+n!51 zuIjk9nlJ09$Kq~nQ>=R1OHn$~PwvvsDo z$Kee*=q;{U@4aHpe(x=fF9~0>=7u$|^4_*)Fx=<8Yt5+l{xx?rKECEy_+sy=HEHj2 zYrJdg)~;Q{eRS=U zYyTX1W^LK~;@arCwsl+A-P`z3m(S~sPAy5a7153YN%@tMX));+QA#m48?1=n8~ZCbx~{T1GG*LSUdpZ6nP=ux7@ z=+OET>zB1RMnCC&dvtnzaeboYlJ$3ZFVj8|{e1L__3zfMS%1U&??-Q2f7kl^*Z&&6 z-#?^1y#Dd^(WX=DpIh(UP`6>{hW#7P-!Qo$zhQa9B$W>v1c~4$6nm<^4QkcJ>Gk~r^UYMjc)vbw{7E1+SZLvct5M1zVX1uLmNjn zUc7O3%-r} zu>(y{Z+w1Za8uK!AICOs+Pmpc(@0a-rl(?mhz)JJxaq{E*{11D#Z8xNx?YQ>5nMO^ymRyZ&F61Eym@kSe)C-ocQq_; zzI^l5o3Gz|%jP>aKeTzi>C&d{zDGAdx%rvRFK%wB*;F&xa#hnAz5~AKmLA^&+5=kK zmeaQ!+A^}`;w=}{%x;lItC*?Pm)t9`d^y|d=7 zt@qX3-gN)gyPF=~`t6#>x1QSi+}1~HyxV?JQ@3sHww>Glv*s@~*ZG3A4>mp0^f}+h z@o)dOCz_saI)B^YZO=F5w=HkGeB0IAg3Z@&BY(bS+ugo9w%xn!p>2DcAKmu+-u1OV z)}Gw0u}?FY6W+J5o&k?phF=eJ)`d+GM8wqLvbrtRPG-M;<-el&kzG&hiq${8>-k-6_1F4?yRT{fn7?WF4b3mD-?)44?sIo{ z?S5JP(C!nvr*{{3-`0G|?z@`1>aW;+&F&j^f5!hM{EOG$-+aISw%vE__Go|cc(fmD zzwrFUv&;LU)~;RTKN9kQPc(XOZ1{A;vUVBX9Sofw`h#|3!zRoQYqT2eKRw;rC2QUr zJRCST{8E2G+f{r2?h~Okb-xLIpyuv6-P7kichmh1?b@*KGybXAt9|+U$;NMbm+IF> zTRihko#Ec#bo1j41??QnA78HBShE;j@Ei?%!}k`*j^j1S(D=3=Yma&!-ktT#f+z29 zys7o&+9zwD@o#LN3{SS--*%DzgODr#EBNW~TqJqdv~jlS zxn^(67Xuq2@2lA8)*g!9)Ku4UN$}py zYg@MNJ>VOtc|g0iY3r7?J0I4zHXYb+ee`c5Tl}}xq-&$$=L18{ z=eL~O>}?Eszghc(+Gl-FX(yULSJ#FH6{FaHScW9`^Q@z#`qcW9BMkeVSK{}JmZ`1_y1d6Yj~6A{^skWo5PR! zFZDd$d~f6r+Q#)gb;0I`8ybS&ihR=B=J)P-xcTAcx;-tPO`h-izw3W%{o~E=s$aWj z=bp#>`}dr`=kT8KJ(GL#dzSZHzUSKdtM^>L=axNp?74T(Lwg?G^W>h7)jzZ6#XZrz zrI9y(4=s-aET@e($AwpQ*oU@3nhx-+LG`=P&(t z?|pFZBYVeNZfpoQG&i89H0)^z2VU@R)y{5c4*X5S;fA9PuY&|W4=Q|f!#f+E*!%v5 zr}y4s``fHNx~m1cR!#G2Bgs;i7a@;d0o2cXcWIkL2)!|^X&>Ar*UcWp0qpCWu=Yxy z8%yVs%Y{6gId>-D3-Qb|_i3HesTsJwE0y&;!o_p~Ugwkfa#7D}@EF^5OoKbt_%RJG z(@sDIdCZK{qnFA__-uyPQTY9Y*FrcYgxfxNK!ZmxIN5@?D-e2MQ6%JnE2^79P;R_E=%sMmWrOITQ4!%3HdI^5Fqcsx>RZ3p>1h zca~-{Gy0@HrFE9G@bt;luxzDY>%?NRV_H|2))m*_i}xUEe^7(FQ}{R?fZh|TTWEVP z)Z(KW{OgTgq>YVf<5=I{tBvE^N{Nk@wwiARq*{(@RI~C{)M}jNWN}hY&$5Q_TnexE z$rJR6EunLf@Yb@vls23hwdlD6W ziuX#fFb8L22C;U6Jg_%nOzY~@;077~g5lm5u5sZH7anPQ`!%>{g-=$vDutU*c=Lq+ zNjRN^i%B?Egi}ShFNBXkI8TL}Klt{8Uq3j%gF85Qbu%)m;_4y|j+Nm;7~XH;yA~d2 z;qDY3MB(7ih02@y5h1oZTMMvl%r0ly<0?gwuPoqQ+CTiySIe^2 zFMN1OMq{H#3u5MJLCie+>4>+#Nb2b?74>9RJFL$EG@vi*nHe&vDpqYE^Xq~1aynZm z!rkitT)pBK{id=sxm21-&T9ip#nh5wbAx&wtYa_@9I+zle6otExSrMF3{%}ub_9y0 z89ke|A|w~niNeHC0ZqIBwx-1eV6ugHA)i9Gz?VyUKBpJ8q2wG`=}>ZEq8lC&ffKyr z(}^UqLh~a$4IVQk4@`CfnJS_m)-%GFhxNINKEbch9rCEyFq{siD*BQ(oPVf3x^ z+#KGN5H5hnELO`qoK6;t$%%OSWF?seZ-oEJg077wml89{Y!)Ak0yhZfGX-swosw}X z=;eAYsg2Gji&NRcJoxRHKASd5GginXvwB4vLsfNctWwM*m(-2iO(A%!GOxp-<5BP< ze0sE4QDr^4Jef3-7}xU^y-jT6YFltClJk3_J z)u(i+ggTn<&^qNMjF{$gQHLkN`7|(C1yyD%xyg!^SGS%9>oY#+)=T;%5&?%ZA?Quk zLm>~pnM>xogL(#(V?;ct7blXXiBXV?o~r_9(~}rQtA#&UsNlW%wg-O5^)&oI8cBeu zB+G?`>T|C?SttU{=KDU7lU2FH1qcM7B~&J5#yCt4ZKO7!=RnfdBRnsc3zcfo2GS`E zL)FL_t!Geq^LbED6{?McE?7)DusB!%*%|o^R?t7J4=a-J@ap>#@MJ!*%T8AD z9Y>ET+n!47C&qVil8aUOcp;^Oie{|$g?zEVam|Q7#D<)#W;+CG1f^TA(|D{l-4Gfg zlb9)#%jV}tDmpSKR8oa%4#Vi?h0}%#@Y-qQF{&3P#%y&TE2ihbM$Fe^74$6g;aEC9 zgB6i% zvLWCc0DPhsyfLX-bj6n-SQ7Xu@chJKH0}T9)nJ7+UGddeB~i((`q5D|ozB*(exqpB zd@5D)iL@mY9_Z3%Y?0N|1iJndxP+B&7o78=&1`^VHVFzh675Q6(-@SikL=i|jiQ6w z^C{>P<79_cv_h)jcubdUX;hN=0$5qPNa5Vbr(4fW7SmIyBuWShv!HXpJVweX>-%mL zfgQdYr>G}v73$W@V0}fhpK6SyBzn31*^Xa`X$f>y>-9_;XvTjF0xHWw@-BiAfmxZ! zV)!kPS5%*Y0+5hBXH>Cl!&Em!Jo^{mp$Xl}`Jfs{GvFfgR{aj@3ng0;@;K2AK4lkFj1=qydl*BzRkFjN2}%Y=1_PLXR1%q`1CabMlS4(Unh&6d zz=?c%*2)X~bXZ@mem$6mqjfW>K{9}R3arK|>R^+mXrd(^aih|6ir!Wt-eN@J{U(~H?4(TG* z8JMI*eY{}nUqk6Rpv9`-kQ$QB*p!)OtdgrazyxG9aPgn6jRQPU zn4TD&v*|bvDEVY!Jei%bC0N0XvOrF5!A9`W5_ z8Xk>TOn^P=2QU+2x3vHVF^>YaY=BA*#XESkXs|u&4S3wi3g{fwwF5;Iut5^>3ZxKw zq+vaa%Gx0#1?p&k6zjXurNV*(Fjg#NL2Xuy@d6|lFmqLx1A~|VFC`%WL6U+}FReoo zuZFTYox_=e=9FZmf*8J+P!1J7S>`xm1Pha>l?s<;Qjmv$NIrGxshKHi3guy@sQRfq zWQ?ylkIk@H3Y>)0Vt$NiO@Gibzz-6h_q(TDKZ3q$e?JCzDsNl%5W# zcH{{sgiR?c_^brrVR8A zpqNujN31Uk_EZQ+Y2!(FbZ|y((;n1&eV6{;;Dk!N+andeac91RF?sg ziH|}h2hq`JOK6t#Vg{&`v`3Q#vnfV_U>F$;$|p00>{7KlV>%d% z5qk_X{)}RQ%yDcIlvXldCD9v<%*STZxj9bZRjfj0$spOISsgT}TlIu8DtFRI;Ap9Q z+K}P_{AxUnY=A4HT;ouAr-5laOMl3>PJddY^_elWMH4B6NWHi9SpUY!NwH zkvCVPL3Oo2@~8rODhX14^|=pI#UeUS6#!-I6lO2>Zw4`=oalqhYl{|7W;yF*TU9@W zDzpqDtv-(~fv%Rc?$NPxyAO`R2rza|5AVusaG*0slhhP6Y9;`pEM&#%BdsYQ?|c=2 z;R3_F5gQtSR1r;KJr~&#%(sv^)6l)oSCi`kn<`AdK2#9IQ;*iqH$y8Wk|6o#a3-^JKC01?S5r|yon-NY4jL#IytGQ9oCFoE+jHDg>02V$DnJ2&}F_K0~1;lYQQmx6$fgSRRz8NYQLp0kgq|uUC(Xzw$k_|aGfUNi zoq#bR0c(!Z7#yH1l_%Q+Yc*jo6H>00j(-)weKEK&x)V9Y_|@N?>Uw zAg<3Ot#B3$91Pfq9M@5jGAmXEEJ00MjX#ovk`*KwA02yH9E@UkbnNBByoKW4&HRX`UMym~q>BC8n-HG_^PSB)fgFY9p{V~F)cxgEm^j5=6>$Bjww#OpW3?(#hH9~r7fwnB8+Cyk4s|Z7B z^uy|_LUFo~&DfqRIb{x0Hu(d?s6HlknCY1xK<)?6tUjg72`KZeqCq?Y*R|eLmlv0r zU==u`7YjfEIDnZ9WFXok&Brlllx_GJL#M|yqWYGfmLalQkYdHE!7)8!<$sJlyrj() zf#KrP3AIq8dr<2h(t2R6#?Hm#+RzDYcuYHrU34cjtPRnyGYzI{tnlc>enXxVfr)Wi6u;*JIlC7opE@Y4dGdY$5j42kCt_j zbE%|6op{ev6yzK3%w)D=BcVYBXP-iqMs3-DW+*hRr=h0NIaVR(}*9|hJIjpBC%Q19@L&Y<#;}I(TFc+ zT?s~6Chm~s{!r#Ti2Ee+Wh#8;IR#9a_2>8W_rf#Ph+*bOEU}y{yIDG(c)>hbcKSu( znKwLLg6}(VXI!4P!X2qnVq%jggi4-lWobk1`6sR{>@c2`i}~}cE$b_@WRpgmLx{=q z<<*j`qNM^R2`PnLmgLmcxoNhz~XoKPjtUgbFt0_#+@(6uwr z3d~39D%=q5WdHUc%0hgQ^4Uf# z8L=#N9YC0;1F`*hdJXY7fKqZ#<`VMc2~G0~#$A^@m(0S`xXO!X1oE5{V$_~*C-%+~ zqs|&1RP89eqz7-s;|O<{lX^%^N0A<>&Dkave%S6Ty`;+>_T0zG_LXy&oMp%%U8$*+ z0)5XDcf^SW<>@Ls*WB3}7Xr#!NIx;#XcXn+SryK>LiapNo$0a<(|Zo{;R&_U6M5%p zSZq0-9zxE;)adz#xX$7q;e-nA1x{|nbVtz|Om_E&3vyy^gJY2DlKZ*I9n@S)MsaernH`6wKY;;_$@#1j@`&ogC8s4aeBk%hsiGAU9)gw|_&KfVkp$4APs-`mkk9 z{wiauDG3l~{ElY_vH!Ts)~Rqu9_4;>2<2e!S@~uNQ1Z5wZ^lq7$|Eb^90LYeBi6@G zznv%>4kLHZHju*X<^s8i8_;M)0S z5G5cdu(tw7EcQ#%j=R5;Hdz-^qx&0jIC3jzn^L}#x{#mRzaf^T)npvE=z0V(Wkffn zERzm+#t2J1hdW0C@^qd@!}FU+h0=?dkFyuDKk#g%)!tYmi1Qnf2iP0jsZsJF?XOIY zG7kN1EaMw{zowT!`j3(RL#(qm(*p>(1ED-~(d4;2_nNIqZZGdFIgsrq?abP&wR`@}H6V_q_jII$!$w(t~te$07B@gRaXMWB!$=~U#QmD-NPDb(7-*K!U)`V)D-;n}%4lK{svX_(P7rDwz)6FM_ z5QCha^yYrYXJS#L5_?Z&{iUx7)!W~(hq2em*zWAdd`HZXmRU~scRbzFltAq7DCLn0 zvo!AS*tYDoG6!>}$#IJ#1#9pAZcwF2jIK$`ItfJjaeDadRf}U$zfr1J;shnjDDy zjIsgiU~+Zy-2mV`+l4JiE@1zT^(L-(8W~%{P4k`jlH)$5S@*j^)SYLauTIy5ay%wJ zoitAmk20TO-JS1774^-5npVD}T+T1aquk$(;~h&W^BiZI90Tc#hMdIx-3e6^QsCq& z?}$r|29&oBAV0V9pkl9Psw6bK=OkVb+f20~2;F`=)K=vr7-k+rRTu{Tsu>~#?p>!M=E ziekZD(2XwM?{{Y2ndBt??!BMS{qqvO@AI6g&ph+YGc#`;7|Suo-J@Km^zHql(E_gM z`Sv1PlYM85B2_EjVkdoS-&m>54pI7G9-h9IkUpY+y__-S%9iyH)FkJ3N-WQJh3lE; zp*W^(uiU>EID+{eWV=QEWBE?4cC}X?STE;6xrZ5So|rCrpKCPfx%-z~j&M0*xV8(I znf6SNXwMe?^HLwu?+;co`$CYEel>~yq+Ga>ycXRrSIE87p#D(qh9>lxVlaxKI& zXDqpYELW<`J6Gfm9}8>`Jpkv%!EBN~lRJ58YoJZiVp%8Gli|7==#%>Eaxib$SDS-* zEn~OxE7Y9RIhRUb%U-uvwtR~hb;%S`Z{d28wz)va&vP}DzyEnkYIY6UPao2MZNT}6 z-&omgxcLO~cEdDoW*>Jh?*| z7*FY0I%kH#d<)mBTqCjd)NpwD-2dyBCVezOWH^O{L+K5cDsGy@$~l0O)ogGeqJx(=wgb&;!6<9H>6WT zTx*5PFW(Q!w%hCa{`F5o481c~I;#fB&lNCzm6UN{`ScxJLrEV#FuoRXocn2IgXxc& zm%VTA5&Fv~;~8h~b^6Dfvtsmctl##iJfqf*e0)17uP||hF+O~Jvxg{~JuimG^J)Ue z7QYX`{PfX$E34ES&sx&g&eie_jA!k9e>m&!@0aB{Rn8WiBM0sU_*Gr@8`lb~H9Y?` zm5-x@=Y_-LdB%Y=D|hp9AKAZt+CN*ueF5Lt8NMFpxsU$-wFI^B8$+^11J7xMuV<(| zuFiN4h2^tXs7bEJ`F_*zb0Sp;XW8^dT%j+*`D1zIL9WyImC#(g9dW$)j;K7QfuCqi z5=RU1@^3u8D4L0MS)gg)vXCMhap5+~TG&dCbJ{t*6l=-Hk>zKJGA8OWSeJ$JNGV5# zIA$U}<;c}?NJ&|SOd;i%h@7^hOpzzb&k%KGAwSE=*C}KzIYN$*IA(^`B2&mXnU1Zc z)PvPRd1Wosjh!OA4E|;rA)VsSw4T>5h256EwPf^5A$2PIB?G;YhIX6Q%39cG6A@>6 z&h)KJAzLeZCnroFCWYNExr3z06Z)2N&@$NCoPLrHY)jvMVJ&&kk8K|r$jvhPOPYsN zc8W~VT4{ySf>=gAaxevZPWH>d6vhhqn4TWw;V4S zeJoj~kQ%e?h;o?L$`rPYwiWgrQGHY7LSEUoeaDMTA@xoFK?(Znbnp}mwY4r&uzcx* z=pzP`lqsbDpae`|e2^?dYMnNgsZwP3tHsVuNi&sw^p_(8)@j#58(=NQJD54QOw1GvkE&KK?Al;C_tK4D{==4CCqSkcY07>QCK>LtA$JG7XVtnD?vqv6snBHfw3b_vA?BBPwaz>W(zHLGM^NJw=<8u*TjZ$ZxUy^M?;Y}>C-zHUt%tA2yAdT@LL`j|g*{YAd&l!TX^dB$wn$GUwfn(oJ!QPQR=+DY9 zGti%Z7lh8e9%L#b9fGDTf>la_=#)3^^XnXbAU( z`H)}EaFj;2Hr#?_3fUHEh5bjAU4~2{B@NeD-!f#1!D_KvD_7F}eNa9u%a+vkr~OBz zokET%wk3QvwNps@;7myE_4V5MVr3xLAGA>R?VqQxZ9TlT#*fJ|!uMkNVt+*GWQ**T zLEn9pv~sq^9xvgw$P}zgu7c(4Vf>g~i?PCiZIQmPuN>ihD^o~0H({LwFf7g*?jHBfM|f3TYo)MGdAglj6@bHZVoFjmZ?WR?dvH4x~| z(MR7D)Q3G2hRY$#r!8_%)!!$}GVGa!Ddes(Tn=f;a^9CID2KFUS%xg1x*xbJkSV0? zu+5yED2K7azA0Fey=ye9KAFPUM~2un_Fa!Lg|R>OzLd1TKKiDRJI}sr%kVPn6#eyK zmmxJvorYUs{}j?E4_1b~50)Ocf8W}1w#E1Ng;G*!L48x0)s{&irLo%*UW@enJj#Bd zW^Iov%aEgub+IJ&oSFA!ioSL#M?-iDTUYk_V_+H5x}*iMjDb2Gm?B)K;VJsAl%%B6 z)@7Te6^84>j0U;NVVnEwL#CiT+v6qN#+btHKUquvvCq{&{}cmjkz-E!Wa*{CB@Iu} zx3%F{Wq96QURScO`^f7k@=6!4@DFxoy#IZ;yb{50Zptfoyw8p2-g&1IuU*^sz{vX~ zdF`ngDGJnCZhlRcSG9OmNnXR^6$suJ(Es{CJpwh`!|O!6 zhSC2{3${$&@xvPBHS_SR1U&1{J3Hl_1oAqeJRjd*Qr@e@D}C}x+h8g9eMDYsWNSGm z+2uECOyCLg))U4l}sVmg?-PD(bnxX5-p9E z(SJq`Pa);tOx4%c?K0?L>~j}J4mqOan3Mj4eyne6`(GR7wIyDeOx$)`>?;#)jUYkPXlTT6bPOZVNqVj&nzE8Cb ztYr$MRzU19~;bq7a zyt2*vEe30?Ou>6Dsk6a!It$^vqAZ`g;63u@%x0bF2YJn}S+tkhWeU6Ha^&;sKd-d$ zyUF&o;qVlcgeCDV3VGMiz^j`aaV#dY#;N6tv!j9)4Uf%mejrFfZdRJaql=o54!}L$VyR!I2Q}(NUt-F5;>Vi)m z@cvRx)(@V*=D?wf&W{-2Z+em|tt3&$a4pbZapCy?rP4pEUh2cJjcYkm`;_OO!dADMC8s4|byFcXpVe)Cz@HDjb zRifSUPA&R^@HBG8Y3_M$7i}MGT!fG1!P4}-|CP2n*w_hA6K?ZU&?eq<$C;m_bg;3* zJRCFfK0tB<$3->L@a`Nr?{mE}FikDu<^8~%LFg6u1gu;S(4TW8utx`a1v9Vmxj5d* zB4;y>Q7N~aef!%7>=*I$c1|kjuqY|NR4tFQ4{u#v+uK^T-DOvseRhMT)zxldGek+ zdbK9JCxAUK>m2OfIzHvacs{eneciyBNUpUxdgW^4&qt-aTa})$P54^sR<4Zuk6zZv zZ#=Va=y7RrgRRpm5N@8YC=%_KtK|OWRiP)@N_r@JtPEytwMfO)BQ?tL*9IN2$4Vgw z?VW9ucX~^2#oyAu$b0v~J*++USQ1AkQ_B@ofB9+YNrdxW45a#FHUV!%Yf3Jpo3P^tco$GpP-+^-+E7EwZboz0eiMzD%?H}u8>s0iR+xO~-*x>i0 zb_ZU>mvbNYMj{1QL4Uz_u+Oy4w$8KGTNhXdB0dSM@;;cF=f5j`?+9!3TM=(Yvc#VP zE*$T%?z3{zhxtB>2;kSV*7GR;C43qCHR}!QZG0R11M3F&JKngIF~Li`FQjhqelY5Q zH_cZZWC@Qtd8`tp9iBpdrwD0}q^wDfWPH_WwBu06SjUl$OM;%ryGMSXnxArIdT09d zbRSY2j}!&?igt-(x}$YucVukTj?te44~aZKl9DAOUuI<9$b>Ze*D2{sQ`}LkXSb;5 z7&rL?4jvzMdU0IgSnW97vDR^xqrvrw`%QPq)#%(J;^Rg$RrDb|e(2({*OP$bqmCyW z+Z|6kcH$e{FFRgw?8Y~^-*LR>_|UP}vCr{^<15Fvjvw$9?qBi6x81>(;7=oN3{LRH zk9=k1xU|DZ?g$?1bEjP}^4gI<1&>Rcn|5w`?dZj$|CTl;>SUph*G1ng6EgoelC_>K z_%nn|Edho|-XU7_m}t?V9)>pwy{3zhGErKlm*HQDl+o$rUrTc0c%?Hg;%m{S8w31( zgY&|qGer)+$gxb+^K%k&Oc3S8in6m)8B!p4S^wA(4CxWN`biw$7qYAsDIXS6FO6WD zBS-N%=Rth`+wJn<8{ko{7}s!DJiY>+>`HZwb{*;(>pIdk!Ij|(x!!Z-;!BFhxhA`c zTvJ`8_!9UGSGB9o)#!OB@(tf7zTHumL`C}__QiW|N}23EEZOqk7`4vT<#`}wv#&9E zr|$%hJNb0i55C&K;^f@qi&LIU+2Ynqo{t{?D~!(Uy$xemG<_>#EKeRtaXsSihFdQW#>?|m*}48C~nO4**~4qoQ2 z4JM1eIA;_~+9q`Wnh5z>Xu3;;zajch9=C~_zjjf!I(Lz?T%M9QVYjhD1Al6E;6uv~RSiW53`Z5_KFW za!IQ`Tj=IC5#kl)dxiZyB0|Oq`zsYa^rSd$6ZIyF<4Mx8MLYLJQq~)sTa&I9b)PO$ z*9n<+h&nD2$2d_(%}}=CYGKRk#8I|>u_*BbQL9Ik@VqEtvXFbI7y+|Ic!H4f0#TaO z&gVi$GeyWvB4wp0O={{F5qpRTzeJQKeO94Jzg=kOPEoHMXKf;7zNqDDk>*#SM>!U^ zi}p*4a!0c*B_jPC*|80O3ZuWGv*ToWER%J+tPibF^gl(L{wdldTm?QKvXLx6<3vKRksz9;c1(6#=j5-Dp3>Inrx(ap&7 zh`%}Zzi}?e_un|`W;N=63A8wH;t2lU`#<}uLUw~(P8$8zY_9Vi#Nl{#_Yw@lv(>pBj3>XCmjbX6Z6ivA2T zx&xoZuR{LVz^dqDQKvg_Y{Ds^_0gxGZU=Uu3=2iqK`*g^x*^*{o^A1oN&KCd#57+i z-G{fq=-go?!}ek!iyJn}@?xOB=lwClW@8b?zO(bQOv+7JDR&IYpMi036zXY*O-9;AN(b+%eB#C#3vvAz~{Qy%6$0_~~C zk$IDlhxulVa)E}TgXq)0j0)mQ@BBR~mi5IVPZ{#WILbsGrY9)(PDr^BzJ|YJp+A<- zK6>8&t*}3~|9IGXY~c8~I}q*;+#$kQW)}494rC1}7Wyt0cF6S0-~(a<%ZAzMA4VHu z0}l)PV?H~a@>8FE!~QJoZK90ZbRSU8%TP}}j&>W44aQO9AeGyGhSui_brP$dJFnW0mdk~2kJoTl4G2@cpm*68+d+b zH0p5&qKBO-ba^ViY_$XSV%w43M+5uBw5NN-1~JyQh;~tr51~GH z;2~jWtlu6Bm%`_{1D6V4&i0=Kd+4-I681p5qU}6KUEoL=Z2Pd3t@ceAVM<_ZMXu34O!{M#c~9Q>?t; zUsEA#vm;f=+IRfOF=)oF-G8;hHflv395eRV4v*gf*Jk0PXG1$K(0Q9HXJ= zeaMsK*e86@(HKKJApckBhZx6KLyr{Y9hp!88sn%CX=oeori7w@M;pFQ`CZsA`(&UE z%6_;KYYO&tKE(E&?4vQNub7@Z!S>P*_3bbEn!U-P=wBe)`$@kf_|b2B zll_SsLElf>n0TG|eVy>pSy&VOG1_Ilg7n8A{6P9KBK#SwSw3`1pLjNG>}cz3vF_M{ zl~FPB@b4|8>3~mt5W0EE8Hzp+y1gj%Jkb|ibG(hPB$WBMD=D!MZF<{TDD3wtgb&5I z{LL|R$mPh>n0mSBkMSz}-_D^!u7~W6sn-izx*2*O4_mv%Gaj}k>x)F2N281ftD8r>l_XWZ~c6=eizsI`o2*|tD6^i~8vi;%uG;s;W%vRSD zj2Wy2P|nS0@9MzKVoV)@{FSg-yqY%tUdVKWb+71amR*9l7PRXeXNzc85b_tG?|q{R zhK)elpmT&s8;Sb%!nS)M$5v;r@ZCMg`v>G->;FT@-~Tscgzx?*+VBTfip|jTAJ~2N zK<6>|ofqMfQtziMrWl*U(V(IF#KmbX?*AP}k4{qK*cv zcdvu}Z$-H?&{r2YX2hAkWq(jFq3GXGXY;7vgbc?Z?Ih^_eg7n(`|v(}8GS)J`Px5p zNMGCf9I{Z}Wsd3aj}EKG>#}~w`tN9z{jBHc;a#A=`@4p}hr9{S_n=>gbqw-k10~Si zhoYkp z_qZ!+csukFJG5QsgZ3ATI<_Ls&Cu&<(8+13rwL#ADe?sHdzTduzn8#A+=$%ysZ1o{XVqV8^mn{I9ZR|m?iM!B2))x$1^PCNV;#~laT-t0e4*!E!ZNj=!@mF*0#leQ#vW#mc2 z_XCdOgkGVFBg#5i9k?2ut^!LBDj)<--OV(s#iA>)spWYO=YKSI%0h`d(}iG=Kr zcp~G^1YPStGk!O0?GevzVQWk;`-fqn=W!`p@obnZ}ms z2GrHzzajn&QRf?C&AUG-6rCa3o6)De{qsp3$^Byw=D6QsQ`y-4a{u-T_PHD3gZ~b@ zi^4p@um<=#&h?znija=;&UV!EZ^Um#*h<9vIi8T_S6EmT(%g=5xfAyFHf-jCQE!WJ z`6$wUhwz^Ti=C%AS37&0e{-hB|2ygC*nc=LO1;K;v$Ht< znUptEHaqWgKJ0wL`9SQ`&YiIr#{b8;$9a9~XU=b(4X(3XSG(?VeU$ou>uJ~Pu05_l zQirAu84>AzJZgmdDEIO1?6fNPxabD=z46=Q7rIY#pW)u%-sHZ=y~F*S`^EVGxZiL` zCyYwiKz0ni341v-J{z$)M`z!|`qz}digz;zr_UItzPb^~t$?*Q)s z9|C)UeZUvMSHQQx55UjBufT7>LBMesoE_i;B7rC%1{e;+14%$KkP3_j4h6;nM*2R9Tm0*^g|W)iK6=y z{an#675z%lZxsDb(H|83Nzns}{;FuNqQ8Suj)SC!%XWGd^(z{wXi(8;MPn2l2I@l@ zv7m`SGLQz00mcGH0o30_Q0h1nGzXXjuYTefSwJk1I`CF0)B*F0(v=cHLwY|5x5oD3~T{tciTW8 z1Re#R1X%VC(47F~d{NPt72O3&d0qv519(S;zpv3P7 zV4M2=An2pOlK^$S19T_wBCrc!{@tK&0hD16D9d>t^kZP3`u!#7H^2`7(;Wb1-d{m~ z2bc%j#*J>k4=_y-lxd7bQBHBb-C22KIy04#sLq6-yWtY{l3WoZZP1X$M!&^5pr0OQUAJr`iy zde9BPMF8V21HBSp9oMR`O`tcbuv-F_yJ&92S9rPraP#pHBSC^D(Y6$tEeB8 z@#0$Ap$pe?{cfN9zkZCA8I(N0B|DY^obWvv1|U4`{1dX}PRD|)V?>l9tD z==q9nP;?_G%e)BmG8J|uD0Ol*=qBJs;8tKWKzX+)dJib`ZUcQ#g*~e1<0|e+&>bpl zr=rg*`l6yQE4oY3S3z0sZqT<>*d9>o?tRdYfqm-tm!RJOKd9daKzo6M0LyS5X>IfZ zlsgiXVL{Ls#m9ms0*p^qG)2XwfsRpOV-+0-N;!@Kod|>gmYD~7EWo(QpvAy6faR8h zGEF6DHNZ6WptFHf0H&D($}}yY3l-l6+M)PmpsN6;Jzdc=6zx&;EJe>&^jt;PDY_n% zb({~nQH5OsN_j2=y%M-qg zT{}Tv1a_(L-HN^e%J{cH_W&QN@J~P~%RbOA75@$B4~jnk+6yr6L53ZLJ_jggq@qDZ zqZJ(n$}t-Yng}EVX#n$#QS>lH$0|Bb(FvfGXCi1w@p+)f0?a>Ig%yHMRbkT=EmyP> zl=4=A)&dPG{3JzBQS?+$)-?xozTy{ywgb%H3AzGU1F-Hh6zx&;EJe>&^jt;PDY{x_iAM|4twoiq94*C^9U4IAq z6Ywj*a(@TKsUBfRZcslE1Y!Wj$ATsTw6kQ;G++!c7GPf;1ZXj-q*rPEzz( zP|9#TXdy6Fg-=)E<)BqStqN~Ybhe@=DS8Sh>pT^-MTIQ{rHqR~+ksAC1wa|sD0(_5 z=Y%sr&jQW`)&m;=rn^YdOBB5fl=WN=dbJAMr0DgaY|G7{w*z;n@Ou>9rs(~kl5J!64@PjY2=p37a~86{39|d zkPgR#NGf;qt{!MfmrV0Z9>;HKb~;1j|B z1V0J>81zRaL>(TL7gZWHJE}eEEZhTnbJYD&JEPu>+8=c=Dkge#bVhVRbXD}+=vC1h zaks|P(eFn8933@e^pK1p1w&>IX&TZ#Wc`q9hHM`4(2$pgd^qI55Kl~8%$S%^Oi4^* z%;K0eG3Uoz6?0e2_L$dV_Qw1i;~zS5=(wTB3@sblFm&P2vxjaP`oz%x41Is-4?{h} z;)WeHtZ-QUu*Jj97xXR}wtd*^!@eB$+pys9(ZfT-ONY-IzGV0r!!I1ZY4|k=+axFO;0ghvu~CcKld zKjG(uKN5x{rX-F}%u6gutW7*Mu`O{;;@=W4NxVLBYvPW?U5W1}?oa$B(Va9TDJ|)! zq)ADoNwbp{B&|t0FX^92wl6NP6l>9^TAIVXpMvgjsRA|(cQ8lBQMzxMwJ?ihH zt{Qdcs7FTa9QF37&qo~?NMD=2A$?Q&o#_v!f0AbP>;par zz68Dnz6X8;eg=L4dV$}8gMgK8^*8}95CH^$C}0RM6c`S~1Bt*0AQ?yj(t$&O!+^2C zIN&H?0x%KC1VTU#kOxcxjs=bfCIdyl6rcns1~}3j7BA5BLLcjJA4Q zfCuma5kL@#0b+q9AQ?yjMgxZdV}T=qqk#+{1WW>s15N-6fFfWDPzsa*6+j&@3upvR z1WpD{1zLawKr7G=bO2qza$qH}8u$y)4Xg#u1kM4@1J(l<02_geflGlafop(&0oMUH z05<`*0Ji~m0(S#jfd_y`fX9F*f$hMvz;nQhz%JlbU^nmv@D}h6um|`6_z2hwdfDecSfcMrWo=hMFlYmozQ-L`^3osv82rLHLfTh4` zz;a+EumCx7 zo)jPr7!8a84g+v)t_RoVdd342flMG9!1cKvT%YSX9w-2&0;NDDfa`NTxIWiY2h0L+ zjjrcJ0N3bxnt^%10$>q<>vTO!fDWJ&z;(Kw)xckXGl9PX=K$vc>w)uu4ZuafCBS9C z<-j$-Cg6JDM&K6UHsB86PT+1}D{wDxAMgP15by}_81Mw}Z{R85Y2aDlIp75V*9?39 z1H1yf2D}cu3E=u+&mQ1?;3MD@;4|P0U_bB;@E!02@H6lW@L%9J;D3O1DCQ2p4R`@u zckGD-qJSa5P+&L^2jKc+kIPE4p7K7I{&cF9mUO6Ltf_YYRb5l)0 z!L%7x=e*`Fd~&{XUPoK=+<8mpwd2vlW<2^j2akcz2VIN@AY1WRV;df}ZtJp|m*C|h zo%r2}-<^1XvlEZN;ydnbOBc^+#G`9kH zA5ZgX)||O>0eop;9)V}g7cB(veCE;?0JIa|R_kgiEU@M*M~dZmihdPxufqG1n(-#3 zdH9;$LOi9pa2|kXvlrs2(uFImxos`h+$DIzaVgTFl({Hn?n;C~p1F{s1#-5`!~0t> z;|WRVbUtL6zi2VgZq0{k=A*v(ovW?+%jW`kvsCjMYr!16WoRCOrvlsX ztgsfeBOG}abmB?ea3F7S6$|DO&LI zgn7s`Zw}CDEnKt&K-dzzq^EO*wQxE3)p+ejQ}dEVIL>LuW6n(r(HV=HTH6-2FMtg! zYHC}KM}3>x(SwWe)t{!0l?+^lcJjEI$1Xg%h_)=6i=tXU7oo6L@T~|(n-;a>SE|yYMviGW=d?EpA?6E$+aF9#>ke&G<$SdY~1WYefTE(STNHsC8j0u*7ObZ?r=2 z)dv;Nve{Pa68vn(i)qjqt&qKSDUw3wR&;V}#|o>ptEr%~c}`PlrPaC| zZ{vWiw60dUOJMeRkqjzpgB)$J>^5izjRp|5Y>m~n952>^>f2V}6PL|%frS8GX@Pu8 zFdCMi@kaXU<-eQ8tSjIxS?a&nc8l{2bq%E-=H z+Dg*C8qb6;ode(vI30LS7ey|ei)Zy0<2l^Lppa)N2IV-DU` z0AuOENa|?AdzR3wj`lfL2inqs@;YGYr!Aictg$+m;Oj|C@g6ifi{(oIQhe2=c>#d8 zKw&I*&BYt$7qmAOPHCE2ZF807f-9QVR6ND%!fPlNE^4a48z-RtuC`VH&qQMsbS=U2 z$S~F}SWp)%s0$t3wG{7;>cH;~e69U7JTcozUw~r;O6qK?uHmtv3`f-6i9DShR#z9^ z3Io}?Rw5rpY1hhy)-rVGGWeWjFo9+8HOm&@YwHU@;XRfungih3Wc)jgmDjut6Z*;2Udi4#KrUKgK%m)T|DWpf!h*2GNk znF!BBcotrpmxb^wgoh9wLU;(_+2FGgmyNh=#O2_34)`3z=O8{8zjN_B7r%26p9h); znvd{&gy-j2858j`QPiJ-`ZG{>2I|g0-5IDm19fJg&J5Id(wV+APFpAwCN)cn%>fgfx&PGlbvJL1s4MAx|dSp9z^VAyX#Wp9#4#Ax|dS zo(Y*UAyX#g$%HJKkR=PUWI>KB$dLs(ve5P{v^@)L&w}2wP=6Nc&VmlIpo1*vAPe8bVt`Xk!R%455u7v@eAAh0wMT^c_OGLZ~x@Izy;0 zgm#5kXFfg}gL<=3Z#L@9M*FhSzHGEF8|}+Rec7ll8+y)0JF}tZY}B2dl?@;r>d!`7 zvr%t0>di*I*{C-g^=6~qY}A{Ldb9J8KM!$v$PXE^^N=4lmW@8oh8#JNAqO(#K!zO1 zkOLWVAVUsh$U(bvAVUu7%|V-U(B7O-7JzW*I0tp-WaH)0&~pyz&&fd?WXORGIglX- zGUTA{9MqQsedoZgbMix0?nJx-7B-fPdUGdc136YM^qz~lb5VCL>dr;`b2IT0OSC-~ z?af7dbJ4%KXmc*=&PD&`qTXE8n~OfqMIYy)k8{z-xoCGT+M0_xbD{IxeAEHG=c2uN zXm1|s&6}8O<)O|z^l={AnTK}fLDzYxFAuuTL!0wZXCC@C5ADo@j`L7o9_q_O9eHS1 z9@>?chjP%aJm@nIZOccxeCQ+}Y4edbA3Dj0eEB)}02g$VpOXt9O%BpPPx)}G`H(w5 z7wMq0e2j;Dl%JoAbkJXZF4Cbr`RK=d)R~Wd%tzbu(U1A4KOgnyqn-JANC!FcAxA#i zoS%<$lm~6kN89uBkq+(8huswv6j%j?v#f%tC00Sn46C3Nzsre2tDv&hDuAOds773M zg;h{f1c25e9^UcA7O6>!qp4 zHnqIWn##$p0GMG-g`TE1;D3WvQc!4>6joa$Q)XBtD5YdtfmKq9Fyt&Lud+%iz*iD8 zt&-{@pcp8(N@^>tlDeq?X`?l*ti+mDQEW}C1gh(;X|<)+w7N=bTD?_TTxpeJnOTac z(iyc@DYBPBlcm)&tY_!UY3as+dDOPzIXbs|O>o89@SmpHvRz*P( zFcqk_DvD-U6~zcEE&=MTiYX0N1$wQbtk|k3F9m9?3iMnBb}SW@NK;v5Rm_-;=^o(_ zx1x5YRRQCwn1!^BpjaPNLj202a;tJmwN*K_%&J6}RZg=iOR+pCt;6D=*uvu1s;oki zYW%L9jrBn}76z48RY4g5T7>@~D4`0{RF%)Ns!)3sY^DmmTUCu@kf5r%5jPo6!40Ok z$9Sq$HQSn5P;1SssIX>MR$4Qws;rqaXIe9>tF4(eHP*~p#MR+HP+xD&oHfguiH@Jy z*l5k1J=>~=byZKZs%La7}RsRqVagOyVahDc3Ku~k!x^e6(|UxQ&%Q(p#vpM@;5W?MB4NZMEgR9m$e;kD?r z+M;5s79+eC=2ttt%&ILb2e3pcud!;e>ZzSkiRBXFQD!a5tgWlZf(bkZKphlaSBC#s z7FCp5b-4T5GDTJ_LNeGyP>)uSQxB?y8E)mK(n_3#U`%B)%CQ>|GT4h;~bp|H?u zC@QiVii@p=DO0S5sZ*_nk`k+7+BB=7wA5;tKHX|4E3+EP%dG}zy8+s6m@&g@fW{l3 z@djwT0UB?B#v7pS2B^CM>TZC#8=&q6sJpS)YMfGGHDahV*5QANH5)cL8#Xx`BW*Sa zv@{zDS2TBG@w*H@u)Kg{YD!i444B7^@ z-gLz`rZQKB2#3{yhquGA3N`S^Sd18Ptj4igNL6DMgNJ@_gj*0tmN`qLZ-l(Kf6i*g zk#D56fYWfqz8yz6b#Y_~@Ok1`B91Hv>uYgjT`(XV;jG1RnmAIDLXidrAb7SB`o^(H zNDj{?c$QX#R`SR)iy%9XloOUAj*U1L3yr~B2%ah7_r;OrOu?Jb_?=E_b*d;0eg{0J zBynUbN`waBTLe!XV#J9fWh+5XS}29Fa3bQ!c9jaLrV9;B7qQbtNSWZ_b&v*LLL6C6 znJ5QS7b3Zi@M51ET$WTR0x?XM0+tnMF`uA8AKeJt5U>P3T?oHA_OypII>=h zdU2$jGet|`B?ZsenL;Y~CBajxGevsrbp+3TnJH`!BT4Yoz)aCcn8v|lf)+y|ZF@HnFYUcR%B-*&d}Y}9fb=i`q@ zre6R*VZl4h6Gw(D#AvfH-deF;>h%^BDPh;@{6;$CsOcB zL>ippLdX(PCg1xhi1i4LSmfb|Gq>VMN%%!z9@$>`Ry&+g5j<<>Tj_XYTX4!z92be>5^a?N2qz6$P-7Fyg-!3H)6AQC?Vgl%Om?#zVCgZ(20BtIp3enUSqrX#!DWVlJB5o zf3XCbzA*$hQNse_1l$Gsz=U;>43UQd*pr6i4%W7OYBYN##v9%Hd-fZ=Ql1H z&QZ&j;3Tey$5jWBnoC6+KK1 z(SleX--k~5m!MDO=$GG}=Nn6DnYbn)%46Tk-tEL&17&YAUl(%AzLDQs=erkKF0Mt0 ze&QDdI`Dh8ke4x7gj#8sAEtn(@8cUCtHE<#NrQ)`=jC{4!koZ00WF?<33y7&H!gC{ zW`FQ~m6d|$yD+ho6Fk#b;7|H5@=RZVlGEUuI3LUvWtNCJgZmdSZN z4Yjh~a^xNlFJA+m_QLl_P6JQR#rN2uaT$BoRj#TSLWqgCz+ly(65oN6};@D0`T;7 z{JI0@2F_bdL!Hpmv0bc-{*L`iebP$FvtD{Vre|MpZsR+~8P2(l@2jUg^m^o37kwXj z%D|bAJoU->kGf?WIkwqe_627|hExAs<5K6+mRJt9I|%1Y$@G+;{((I8OuxxAv>EzM zwuO48$E2RwF3zLW743~al;u-?&a6zs^z^3;FBLr7QZ34-hb7PQIr3;fEQh|8?V`;5 zQZV1CDtXphBg)}>?8#G3uG%RB<)P1IIP0air9QbPmhVNa75b;oWjOm+zJ0e=ltVvD z8K@t6+a_qAI;YQNTPOqlEZf5J>0xcVqMzmXVtS5(G$k|F2ee`8nJWW34Lz_4H#R_z zXpfyaB29&87yYp<8&?UoKjA9D9wS^U*m=2DFli{8Jsz2+Sjf+{f<4Ch9%#0gcFuK! zT_$%&v`_XaS8~)X^}|&K%V(c*4Z(7_R_02=&dawJ+qNyop!6s9c%%-w!m!iGFG5H^ z$rT~PIgYrtu=R|qr{HBDadl|hB-a@nQ!JCK3cJi!VPjG@t|Zt-juFmFEQjTD4PmFp zb-F%0^-v?ybAM~b1!a@Ilkr%ia1~;g z$+d_r8&@87I9D6CJ#fuohx5(Y^vj%os1;miM4YrazTuai->$t=j90$Hmn-U8%s(89 zw4`N7NB!UgtB9K=;&A>DzqtF5{YSlXequ_TEmOZ(gVX`X$}0Sl9u`*#`^ZciX75#r z9>7&uVJosfXuB*$S`;modX?jYc1LR{7FxzV4*1P}lzw zY&%yQv;fv1?SC2CBWve~S&8;^AP(oS@QdGQrx(T9OZ<|(!d*IdK>(s1>{cc0s~i%Zo= zYfFYZZSdR9Cv|JLZyq#CUCTD`n>}*WQ%f8fEXDSPeQUsdEPe7VM&GjErIu)Qi}6dg zkH2X1w#Q?8O&r(rCZF`}QWk#Kg1sWGhbvH)X~#*gXqU;gv^{dsy=tLeY{|HO zHl^^pFSgFO0;gm$CGKPqJuUm84O(IQ_s zan_DYGtf1^Vr6;^_nHVgPM3;URK}x#6@PrbHzp!i7)c;Y#y$kVD-)!Kza~*V3VJt zzwhr3)I+)LQ77doLf>_wb@DtkCFkC=3%{2_Cw!Ye*VFul16OLZ#7eCJ$3o#H`L!Lk zpWpJ~T7#{WYm{2pfXv0w#kz5qoM=1lkV8723p3Kum(o7^%gmJ{HP>G=v@@pVd2=H# z`-)oNxeAuXy(-6?^n^0h*0nuK`)hz!$@xRpW=fE&^}e;y`^q^uJk;)YBN@|Hi1l)K zZ4JUk`dbCl(vyaVO3C`x#=eznEvZQ(uN*Nl)b3rQUwT2@!-hVk_1mjuIZH@Ou(dAz zV6l*et&mr?6DMHjtTEu4$pPl<=|Qz%AsH4 z*MMxh~v2=er=EE0Ohw}I>gA~c^&R!$HNYaP@d$u+qZdK-9#F$F!-I! zEQH%UzshU#*+^r~s&Ic*idgR6nWhX!sbN_@`^zq$>k6A^tj$Zyw9}XCa9lLjJT8W7 zzP=AX3u!11OXHaW9=Yq|SrVR4;aL@)&Eb*ZJUf$yF-DDY=b46_lu-8nQG5QZB%TQ| z<*_7LDtG;CM=g&3=dvg6;hBK(&^@jWBend6TMmS^$zQls+9wVdJ%wyCj#oCQ8~KYd z)TaE!bstxS$E!NHeq>L`SYH34Ez4iL`ebs_uN3Myo?~E3WJ+9Q?N=kO0NQc0pi|R| zStx~P0Gw8yb%NC$=yXf2G4NNX&7G^c^A*<{oT}5k>5}REQHxb6y+NC63|y%5{(&zI zu#VoK%{2xRR4M+bLsYu%z&EPA#=u27@1>gio92E|>3V}U7v*1vZ&k34#(-0$>kZmm zV<4bqzEQ>cqlW5qqg8Bg@MA5(<+`?8G((l>~_UP`7hQ|U8TbOQ5A~o z4c6;=$7%Vt=u-TeyI*tnD$XAjr8M3ccvQzep}5}Q3SF{Ecchl|A)UjcbJ$#CV5r~j zRU^T6odfDseVL={n60@?&GqWqo>n>hQ8l`how}509rl^Zfqqk^GzNT{ds*k$t4lU{ z?Y?Xbyr9c_M{_OOI&F(>47{mhcWW*|ad?(ghrOq`-e9Z_v$@{jk6PyAm8AZtOkIkt ztH!`yo%ch{?bF;>it7zd(xuqiXbgM32=Noz9MJ3?%D1Mr&@Y=4@+f4CHC4l2mMOaKBEMs=48s>(JZ; z#YOqAQ@ZL69;3?Z4caC52D5e8bgk3lb-i|MW8hF#UT@Hjjq=~1Z7p8cYu6FwzeSff zNylbru2|Q5m`<0gV~6Xo<8+v9C5?f}IxM8P-k@EcKWe&`exxp?NTu^feW3GB)nN;? zx0s-Fm{Lk~d8H~xl>c6p&Umiwz|%Uf;Y@GY^+x&MR$7blKcsR*`A<{hw=rO3nWM|I z=a0rfxt87@DUE?@9X3OAO?nop($X7W{H|_?Pqn-|U^qK=urT;%ZP_;08#Hy)X$cw> z*Bflq5*Y3z9cKKg2|H2C_k?Oklz*FU(J8v*CRK_*%J_SmYYa5&baoH+2CKDBTU0DG zt~tBB#=sm^a&ORZKj?IeH8)R7U~`RuB|0`*%Y3>H>rz~Ipk3wd4%l9_J1}3#*Bv-Z zbBh%h<+r_el>eTf?d8|%l3TSbHrE(9OUJI(+&P*XqP4L?hpp4x2F<;qwJ}WRuvdLi z{*6kOD1T6M&+C43sIcDPLRCs*z;Lz>8UugVwWaDhPSZL5p<;W3ChQ)a;}Xr?t+{_{ z?n=!a)Z8_S^GBK0+$I$kAVl>y!&+6BRcQvTBp})S(fRZvAHP!jGVj;i0nLrp_VS?$>kinf*Y1E>Da5Ptx&zUQ zYYhCRCAD+(1{Y}G^qQ8%PS+h+uk#+JTmGY}w=r-~bE9=BM`~_@=5jT6oaQELZmQ-= zH8(?ZFKY=-(P7Ps>kfROTiFsNZKFF7ueox~ja6J@AYPYpsOIW)dERKdl-)Y-^Gf5` zd1>wlrH$^uPnt7fzv-}u2)jI|=5npf?#r`u*q6GLb9C5idZheahq?8drbBbgz6~m@JCLMn8?AHvL+7|k z$Np1?U81?5F7HYm_LJs1)h@a*uvK$=bR7q^HEq{iqAu@O9d@P8@x9i;SvqW;4h!l! z#_3WfYVKkkTc~qv)on8)>K-lqHJZCkahTP#?OM7#djvEFHt8H&wDdRYu+5rl(bC_o z!|qdDci;jobEHm}s?){mut#**b$RMu2)O2M~4;a7A5L>ZLT|DbJ*u;3EtLuLz)|_ zOTI*NZ|GR#Cyf_)NY{3U=04XszSrD-&E2Xc{YHlwPrX>zyFzobbjcfZ*fl!rbF&{-nZcgdVLxf^Q7u8T4tr8d|FI4;v)UM4+l4yaI31Rvx%+j=J2e-pr9WJ! z`#^_XrpwFMu{Y|lEFJc_mTI!*=4hW|&w1T=bC|uBGBct*4`Q{cW3STknHl>;-Iu#` z9TT+#d$m+&Yp;@{W5;Xm8=cq8dG<`#9k^Mye3z~*UFW@9$F9U8D0j$u08 zJT2b|I-R9sr|7Uxb$OARGjsAZozARPQgkUXy52E5%&d`C>AWt@ov!N`ro+s-$*hd- z(6MJ~?mW#c)!Zq%m8n`+%XRD-nj5EMbF`!%>OMbKhZSmWz2@H0>D*fSkZ$=sT7qgF z`>f)+119WjEz4gtw^4JIy0$i5-UT|gR>#iP++{lU3eC;evH#LxE3{Ns>#)sQ`crid zms%4x2CmoX_Gno;b-Fin-kbG|y+hZrTj{DhuvcqspXPqi>8f=pRl1HfnltOaWS!$C zE!E9>)ZV4T%&K{t3hNG--mri=NYAFKX^Tnv2k*;#D2?y5`=} z+`F24UvnR6?i0;@rFHt54*ODbUu*6=&Hbpk1DgA<=6=_l=^5k4&ECMQ^o@Tp>n3~W z(04X4y96^sn2}=k245Zf*BESHVfG(pJ#KamW-V%FCNl!e{==;A z&F;kPSj@h{_~Jfmer=QXKBX~W_9SN4VRklVUt#ZJx&vlkVK}pQG5Z;_UoiU$v-&r_ zZm^w$S#z1)iCO)d9f8>g*t?0wfZ0Q=(fwxjGxmO=J79Z(?todxnw^8aj%W;+y^Glk z+53vdfW4dOyH+-^02(!`^jZU!i-;>~+mf#Q0sa*RbcF#(Kjd zPRtI&>^kf{Nq67{J(A5{!|Yw`wMuuu#2U`*HSF1-F<^EbW;PgXH(~YxX1}mU>%gp4 z?44I*!0bBS(CN(n!|X83PRZ;)%wEInA@du(((Fm>y+(Jyj8L<~F!P()f0*67 z*=r286ES<2!FD2M|6yiRv+J<;B;5gfjoBD5yA!h~F}sc{^-OF=fLX5%wqqG=pEB5< z#H{el?!=rmFgu&Ub}VMMWA-j)ooMz8X0Ks(7-o-S_A_R8Vy~|IYRIf<2HW=-4`=o+ zW@lqo^=9v4_D5!qV|Gtw&otN`tXW&J+4q<|iP?3S9frOC=nj}2i`l1`J&D;VnLUZU zkLnJXxy;^WbqCC@$Z%#aWOir+cPD*!HfH}Z*zUyaam;?k>{HB6#O$KY-o@;D>@ygB zd(}Q8(j72+CbOUU|6+yL9WX0A!~MTs>)CrNTn*QL_y4@hGCLr92E)}pZ8>IFWcEGg zER)%nnVpC^pJ?_><~*0#gPHx2*{hkIm)Q&1do|dBUU3`F?1jv3%@c-{g2HRCO z>Yb)pPvVX@J(A6t1haaz_nh4U6K2M~z3;&l1U06+1LE> zya^G<`)~55L>wA1KA0EG2&@a-;XNwiXZI9;x&JqJR>W3sQPAOe!26iD#$OrC4_q9W zgg5a&<((GsoOebT5v`;PH-c~*PYdX@&y@!TG=EDty;?zKi%J;s(#b2v1}%@-|P6?-uv)$h$p_z7dg4 zzWY4sk&k%pbdQZZI`ZG1oXF!M|L%X*bCJI|@+Hq}o_W4|-D`qnk*&USf)BYr@Ki@W z;l9GZ$-mOq?Tht)>iMg$F>=4>)W}=>fAcMfyvzT+r#4N??~_R$Xk5r-qR!R^!+t*edIqP@AX|C`H=5lk&pTh_r4Ka7Pu!k z-g|RomN(yfXXLiXMPpYT2Jf7(~(eZlvN{}tbxzPJ1{y|cXU z`L;)%?A_~|>;1wv+W#%Ss_+4>2QTt2^)C0m9=IwvG;nR;<6vvx@!)U1_uS7#?uz`2 z_sz)nBlr0oexLu-$gllhMV{&XF|s#uX5cn_AK^T2nd4}2M`sQ02R#vYTJxzE-r3D3 zv;Jb8Ypu67SQlBBSyx({tQ)Oct6G#wFBQ1ei7f~-fg{Qy>ESN?X$kL zzOjC=4p_a`LCfjzIwBp>j$w{?#|TG?W3=Ni$2fdrH`9^hnB+L#QRtZJnC_@_R6FV& zv+>>CIga^`#g2AIr(=am3^$7db9-TRnq{OI__@tflh+MtK7Bj2KPzsQ{64@h3+8H ztKB!dZ*y;PZ*xEBe$@RWzAC)a{i1u9d$;>7_a66$?oZrby1#QDaR2VMJZ_I4Ul@+@ z#Cj4v$(}UN7|&SGQJ#sOkSEV`tYN*bjUM{0#I0e*o?wR#gNL4GaeoflI2ZUkuo1WvxDxmma3gRVa2Ied z@F4IQupM|7coBF7cmsGB_z?IM_!9UQ_zCzga1e0C;9J8$6fg`(0Fr@p;4t7wU?PwW zOae{-ih)v~5~u+hfRlkazyhERI1N|<`~~O%&H>f~7Xp_6R{+-nHvqQ+cLMhS4*-t> z{|24`UI2ChuLJJ@9{`^KUjW|#KLWo3{{x&u@y%Z#2n+?{fssHOa40YiI2s56`M~i& z5ikv?0IGpmz)3(eFdt|II)LTC8elDOHt;uK18^~LIdBbdJ#Y)K8Q2Qk4?F@q2|Nuv z5Bvw%4ZID!59|d#2fhY=0Db{}2OPt!DlZTKVt_bc1ds}h0geDB09imDa2!wwlmO+x zOrRb(5jYi?2P_7b0?UBaz!|__fpx$Iz(v46fvbV*fSZ9kfGxm%z{9{3zz*O!;AP-7 z;4R=i;A7x3;49#J-~jL&U=7DNt$|2j2oMV-0V%*Cz*t~BkO|}h#{vbwRG2b>T51Go&h3fKhP1l$hX4QvA*0v-pR0(Jr~0j~mY0(*du zfPKJz;5*=FpcnW9aK~c&1JS^6AQ2b^j0W)X`>LaW3?K(M2AB*?0j2{pfZG3yz4rib z;^_YUWl3K3Vyjo%>at{2YOpcgl+b&}5Cf)$UPGv+1w!wg&^w`rUP2E&G!t4d5Fqr> zV*LN^$PF+F$@{zafA4)>&GR`sbLPyPv$Lz!YBj3`4M8)|3bX|sL08ZV^aq1L8W;`6 zfyrP7mzJ=g-m7)7ZaSUMOLscKXmsu9(KYE5;Zx>CKV0n|`DlYJaDg_=bz zpq5grsP)ulYA3ayIzpYK&QX`BYg7jHfO-5jbQZRJ`CjyU5F7)i zz|Y_^xCU;4-@rrg47>tw0ZW173J`%vpaOaj18l$re4sG+3?zbbpc1GCYJ&!#DQF4W zfDWJw=n49PfnXTDWR~Yt;#B3-oF1G$IC~q!8O9mO8N(Tm zv$g4**_`>DMVw`vRh)I4jhwBV9h^O!1DwO0BUbTpm}%jo>P{8m@sG!?kjq+&HeETbNs%n}DZTmFHICR^`^jQ>_|uo8rkGvvrGim-hfq+j`D>#mnS{@x%E%zK9>eSMW7_ z1D?NSdm*$t}SK?RY*W}mbH{>_vC-YPIsr-)oF8m(+K6pykApS7^ zNd6d{|4!yl=g;QP=P%+fJof?eg2{sEg4u%kf<-v=5h`91t89 z92cAtoD*CWToGIs+!EXsJPD3KXYE^~>zqM)dV=rd7CQ5jJMQDspzQ7utDJk6|`sHG@H zlq%{d>LThc>MiOo8Ymhn8X@{dG!9QWnrxiiR+0QiJOUAid&1@i93nAihGLtiU)`Xi<6{j;!)zU;tAp@;u+#O z;sxTx;^pGi;`QQ9;%(xc;=SS@#YeOHxnLNYYG_EJ=~1 zN;*oqNP0;6NWPK`lnj-OkbEN5~BH1q4E!i(QBsnHI zDLErKFS#taD!D1SEx9LoD0wP*A$cRolCY#4sX!``%A_i(P8uaWE-_2(QkT>#4N8kj zOGp!?Wuz6Pm8I3BwWRf=jik+_$QspmeBo1fC8zPC7|CO*%_D zPx_s7sdS}ut#pHQi*&nmw{*Ysko1`Jr1Y%xf;3%vP5P_!j`W`Nq4cTr59w>^TPZVw zir__vB9<>7h2!A2U=o-P=75D@DOd&8gUw(&*aLn9N5M&O4qO6P!LQ&h_#He2FF__? zDsgTFgdhSafeu6iD~JVNPzV$UB|%wG5mW`WKz+~zB!kwVJ@^vz0DZyNU?>;~#)64p z8kh|hfF)ohSO+$NAHZ&K02~1)z*%q+`~q%*JKzC$0$zYWL6{2XRzLuxKmoKM3Rr*> zct8*o0|}rENCKaOnxGzN3|fE`&<=D4-9aBP01N>mz!)$AOa-&Re6Sd-0BgZUunp`2 z`@v!G6F37dfGgkzxDD=u$KVg}1~Ak(w*q`10dk-LMqmaG5C;OFD2NB8K?P6+)Btrs zBhVat0a8IH&<*qkUxC43IQRyP2UEaIFb^yO%fTA30c-_3!9H*Z90#Ytd5{jSgA8yF zJOag zG%y;B1CzlFFc*9WmVwpad$0xU0DHkfa15LRKZDEQ8n^|10}sJ7@Cv*IEG^D~fCxka z70`niU;{4T1BJn7AQ6-Ul|VI68#Dk-K}*mEbO2pIPtXqx1jE26@GY1Grh_?PAy^7l zf%RZB*ber9AHh*@5}X51e zE`nbGo;6kD4tM~bfEVCT5T?ibAK=H>8d9JDS`Y;+zzIAc2#SFOPzEG{&p}O44>SfX zKniFFI)m<@4;TQ3fDvE}m;k1NSzta`3|4@(U?bQDc7griF!%|a0T;j(a0A>1_rYWE z2Y3S*2E6|PA4q^4Xn+xzfdj;W04NILL1|C{Q~@cB-gX||_zWb1a-b5Z z25N%_pebkx+JFwA3+M^@fq`Hc7zMrslfZN^2P_0j!78vGYzEuG9`GYL3QmG^;1akB zeg${I@8BtT2{Hi_e~!TcLJ$FzKnJ3M6~qEBC3_GeZT-P1dIT9 zrfH1{U@E|KOl!;scy?)x6<{sc2)2P;U_UqvegbE}1%T(0*0=#~gZtny_yfEF3=`h} zfW^>6L`T>o_{d8Do;g}0oMB`5sCcRbCn5sR){FjG#fZlFM6^PUJf6eH#Q!_^aPD{+ zc|4zV9Q_c#{Lk;J*0p1RiT`=vf}B?=WahPHFoY+;sSlY)*MoZD48{sMgRv=y!dnKz z$-@$_Kx$X~`B8U#JDeBxh~I)S8&}y^F*h;~Fpo3OF|ROhF&{9WGc%dtED=l2(z7fq zH)}hty!&xAy%eh=s|Kq9s|Bkq>q}N|)<9f4AIF-;n#WqoTFctP+RZvdY-#%wtn;j^ ztlO-6tf#D3tS~mM7+eUU7$;JW&D=6&{4_8T@UTo5h` z*M`$}F+@6ubcY`h(z@f2XM~qYKGau!S%}!?*L-?D9#`#itjpx)XieqpQq^~~bx5fR zR4L7|P#(@kCGeFg1KG@{7Y)hi?ks5q=>2c=+k?OW`+gb^l2?=5$ef zDw5JtCMuQ+P@hp{sLE6=T&GH=QmHOfA8HUaj2c5tre;%%aD{3kwVm2SZD$^)PEi-B z>(pK9F-osM7I;5#I1*g5isINg@7MgNWjE>3M`V$Y_Fgi(rb70zO7^mLZi~hw*NW4g z(~Z-QGlVmmGZDWWZf7pUm8i9xEu7t)LwH8|1!%5u?rWbtMQ#ml18xg$TRcC#H}^kXzyG%X?+E;N1pYe${~dwFwK zcp`iyoXrdq&BmOkf0OdwJ^#)9zc2zj$h zb>)bzFOl1LPYSU3u+3j-0)Mmq-@I2pDZ4!NJ^jBQ#X0;1`TAO(FaPiR%-?c8cO_=F zZYTZj=O4v#0=ZsrhG>4y=Pw=kR_vSn-}32ldV0iv`HnV|AC7;o+|FE?t>u!^cILWw zta4g^d?`jdd3M{6Tm6$7?Z52JB#0FR1jPiUvfEeui+*Yd8VFhl8si@cz7+JvzCRH2 zxW@?^VfF)EQyVq)Fc+dBYNiS136=`h3T6rx3RVcd$IRd#1pD6U`RF^Pf3l_@w>=}c zEVwDSCwMA&Q(*5bp+G1jGbuuSSTUEP@JFt7eca2Z*Cb$WMpewqXo@)*9Wfu{E6l|h zgLxRUF$ZInaHDX?|3cq%l(UdRS3m#vOD2QOpom*8!@=<2e?H6MAJyC9zpRHc7GO5_ zYQ{Fq;y#TT+YHRvro!Zyqg^rV^RNbCO)w8Tf4qG$1A883UvCP#5OxW(tzU-8nQEqq z>0uUPR$#Wq8n(k+>JiLo%$>}=WR~=u|KHX+f83!weJwiwYZc0Cb9L)UZlip&e5-sr z$?uf!k?%w9fc&uhIF?SHn^!;F%WE0lCj1$*LwEplueyX6?Vulx+&tROApOtg?e9ZKcq9o%hG22VekK&v7=jE5ks95ny?&5ne^Q#d5 z3el)2BUP0D8D@c%LL2!cOXk3Bf5$F=oBVm^2cwd| z_OJ7i3b{h5P%DOJ4$B;ssa0Su=)Zay6)_5n!mfx_#E~9+ih$ypypW>Ezw9sLZEniS z&4qMX8MG#cw|BDAv(ufd3vYAs=~+jR(%**Ck+(tEtCm-4WSF>J`C0+feAWOg$;xmFowE=PyYdd~n+{+3V z9?6dMSoRVlm7V)JdwBuNOC+C8AXs)#Y|K>_h~Oa?i-30nm^JaZ_oL(-u@@8Y?w>?@&4RGuP}hK zL)xO4u!K;IyPry8wrx3KlCUz)>S%opVQpbO%(`tNY%Yw%y-_W3p4V2`Uf2nuhe(;iBKK=ZVRQH+%M!En4`^kx8}WPLw3Jp{fc({EJ2nq zOOz$fl4MDmSy5Th??v&A@LS;o zoF`8cDzo>?PmfWL7Dl!%OP^)P3iTb6WgYO$Ij!@?n_h#EHfKqf{z;#CwxRc7UYXA2j3(V{C{Hix z6xuUGzH_W{EDDOj#{TY|z01K~f^sZ-`8!$$gM+y)fBoWRuU}3?A?x0Xeu@E#L5iV@ z;fhg;G4Ji&f8AsLS`OX&2Qj#_-@o+z208xox5{fVPB9U_r+lJ+%rwVqRz7Ru|DCSi zFBIq>MspPl6pKhtn6v(`U;o~JK`wpl@5%PvB-~oixV_CAw-t)jpB!}&Y>n;j?KcH^ z|6ARA+nK%xm~OL6xL0_fpm+<|GidvgXmuzzp7*y;ovg<1`Jvl<>MOK8O0kd9{b%=6 zhW(T96v{`abCB=*gVjg;(f2mfelOzwn5+L_{djr(<>hi$pc?xIqBuci2!9iP%yX`B zc4l4fwr-QvChLPWfK~gfP0@I-_8-^L_B0m?Xt$$)7#-jR8?c`W8?pZoHetUKHe>%u_Oll3toQe~58dQyu;=COjV;+s(HHD+QEU9m1Q&NE zwquJ$pT54iUFOT=oD=1(Rldp(vVZpuc)!8N&JF%)KRC;KZ!5p=Dd%jK!3e{4$Vs8C zlCy>Ay8J1pk9W6Q&R$Ko&9NwG8Kz_@!3Ib1nXIa)bJ`K@xia-wpwa;kE= za;9>&a;|c|GBoyi`&C}~x2&JBg^pl+|7psJl3w0LAN1ZEA(D$!BCW_EipJf!Hc@Q$ z-MPg@@uEcBpIcs3QB;N8p<7?nM3jvCbK8pAi#mzAih7Cqi3W%U;SSy5qEVtTxJP%Q zXo_e$?$VtrS|D0P?$cc-+KBsfe-P~y?ZKV8XE8JSkm$JR6z9O2OV{8I;jPl0(tXl0+$!8d(&N(8((|}O_`0+Xw=p*Z_Xt0dJ}3RP#6JjC=xN6JB7Od|4y)$yP3Na|4VR` z`!n|j{*B-f=7hZEhVulxRm#sI)+wdDjmm_Gt;$jnJCtQ3_9zuR+=Yu*QpD#GwIdow zw2EjS(Ji81#Gr_@h%ph9BW6b|idYq~G2(}a-4O>PPDGrKxEgUg;$g(|h}RKek-W%= zNKIr+q%+bRStznZWZB3nk+mZmN4APgjqDWJBl4@rVUc4ZCr8eXToAb^a#`f6$aRsp z8qM1jxh-->0g~&_F%aOk*e~G-Iysf;i zydL>$Mh8j5kV#DqNKr$&j&S0u@&#kcnlHGNnu-)8iKJ zD4ATPRT))uJG0C#bIEWeiRY6QlEtWs%B-r-WKNYEwRdL6f=UP-k4)-L#_o}X{rK;^!D}@wAm63`>Wk69{ z*+Z42ye6+idVSv;gVF1~2tTxVS3@7W=}*&~V|eJ3l`iGj<>W$E^wFBm<$X5i*cH6& zs~VshtQv}_hO0)azQuC9DgmFebc$3=QbpkNR)zIqFm%c(B=#8Pbd?#OxMs43GgWg` z3!q;FmSis#%H^tX?UP}NrMQ0-FfL2c;8A)nce zmCAR%Z|qYYR2@~FRGn2_P^GJ`seV=6QQcQPQaw|>RQ;)9s3VjtHKpdOMQVvUQms_$ z)JAo*+N@T=KL_Usjg@wFtlFcluJo%5sf(!-)P)qK)MeEHMKb)AE?_GqsdFNtmmToU zyc776d_xb_B*;qPUGni)*}tsKX;(p3N%py{EBfsYdgkjt$0Bdpn_WG-&%W$h$n|IA ze}n$PYXG}}Y#_UFzBX0V)v%tm)VN2!z}Mj1c$%TrP zZNoptT^?)cnJvO;dFXbt`pib*j39 zy0f~gx`(>Ax}SQ0dayc8JxV=RJwZK1JwrW5y+FN0y;8kSy-EFpdbj$3`iT03`mFk* zI$eELeM5aqeMfyy{k!_H`kDHr`cE}O!`5&$LXA`-*QhmmO|-_MacJBcpQezem?mCR zN>ff#QS-T`hNh0Dfu@P3h2{%QTTKVemzwUH-kScJftsP3Fr1mw?=t#5{{ES{0cYj( zabkpqJ~J1ool2v6lxC4?t=x}uU;6C44bIFX74-W(=eW5~o}~OnqsH&v^!a&prB+c0 zzo$=EHqAXo6f|P*>c(o`E&p9*oUvvJ0wzN~FLi7oHN9gGP_d%}vo2whV z+|QAm&y#<;{QDUG%3}T}j@H7D+AY#7(Ja%f(5%v|(X7*aui2>Ctl6shL9;`%OS4C_ zPjf(XP;*#wRC8Q&LUT%UMsrScUUN}%S#w2mRdZc)Q*%pmTXR=)PxCrG2B#)MjbJ zbSz!Cj-%u01UivUqKnYUbPAnHr_t$j23?dcMrYPpb#|Ro=hDULygI)ws4J{1sw=K5 zp-a#u>PqX%>dNbqbd_{fbX9fLbp`DSe}6_+P^))!m+(vUovdH7t|8^GnTfssjHafp z_IsXp<{sI1v-imMviHmOvk%ICWFL_oVjq_sVV{&8W1o@z#Qs@!l6_Hjnw>5?%f2f6 znSBFC_zUb?vPND zXLRRu=XDo#mvvWkS9RBQH+8pkw{>@Q_jC_*4|R`qPj%0AFLbYTZ*-ZuEM1tMr4QG0 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%0A5bgc zAyNzBK1BblX|#SC+PEYnF1dvC4=7!0A5oh_`CL$P3GLHPYl};Zp;l}{$$+(wQ(pbP zo91NM<3OJ|h>h^HT@R>L2q@nSO4mYq50w3b+Rd=W)#^v6GU#Dk@grCPPwUfAy%Fjh z57g=w)cr;$3|6L4JUic{H+sr147Il{u2DR+Z+teIRk~ITJ#D509in56aU{xP+2D z9j-JeJ#~s^-=KrNi^oOPhy^wV$gi{P(CYKo^GtrMTiOZnL5s_di)(}k;U&Z>hm;#q zF4V2}(57pzqqx%1W`0=nZ#^ZXZXxo6l3FMZ#F>eROF~ey#n9&0Y4zeZzq}i9c`Z=B z3e|%-w16P&h+fl<+Qy@>FRk! zv~jI;c%xZXC@nEsvNYn{=?yh*iRrr#^MT&=t${_2;?k||LP< zZ{+ns?LqR3(!Y=uw2<})$q#D20F`rSpSCJ4E}4cl7k3rQrPlYVr^Y0F;#{DdRzB#rF;SJv7JDY8hf_pmy;fEmE93 z7x7s=ZJjF=FWNWc_Rn{&bnfy%=1WNz%6EjwvZuA1xU4PI86YT`cGgdQLwqi%UDXgB z3h5Ogx*KAZL-aJH=1||j4YBP|Ymp(E12wY_ZMyo0xX!nSwp`yk>s>u~k(x`_YHeua zIyWM&c@LE3hw__3%T;Tt#cka>*(ENIF|=~&v~W8ZTGhG8zN;CEQzJGjAg+^p5L;7R z{Zd>rL#W;u(rcl5Bh*em)SSr}-S1+mSEYrtWk|b0t%gGN3aA}BsCgOGcQW*d_7Ows z5yE|l#G%#>L$n>r`h?;|+`iiiv#0gnkotz$Sg74YDBp}EelsCYjnX^-$gXv${%c(% z%?|Zc-)Gy!vGk$yhLwTh`i76ao3uDo-K?4}+FI_qk96&bLA6^b4(MiOK*_~=y549s zY@C5w-47)-aYj>ddBaerRG_}Q6e?%^gB2Cm3IRl##buR?OZIxqqVA1b)ov{fYVH@( zL!m4ov@*4OqgRM)bpgtsv{Ti7K&X}`spJBsYtTN;>+{Ce!y0?iaOWsqtf*G=-P<-> zZY?~NH1z0NfA_XMHJadA-#(~%h)XW(+e(+Ubvm(mV<=w4#h>#umF9j~IlGm2Q0-w( z7k_(O%=&R(b%m0%9l1uj5X}kU5AucbP?8kaZ8j)t3)N?!R-;0ji`ja)oO1KHrOQf% z_6>cdH}Zi!O_Cupfa-6djcXUriSFiuP`)UXT&#<=CK%Eypp^y`FMDdk(^>|~zlUmt zP#hS~jWgovztG<=O@vyFvf|dQRo1>cyihlCp>FPmUYh)%M)A;#kGO8jitE?Ep_6mJ z#9Z7fk2kuVDX!bCp_d;|yF+R8=pHGw>9he$O#3<&8dP`Vb@2jx0o)y^%jIuHBo^a@vZVxV*2>KK**$DHq??fSl)N1)%gE>ic@3+HLKI zxRnr8ySWRnx%ACM>FRl*WW^6m_RjFtZcfy)v38#Lii?tlyYtFuwof;pPG>=O{EBOz zL|l7Ct%_=M=)_q|5QjUZg-Rz*8RA+2f|^H#ND`{PP_=}*Ee3rxZ^DGjoo0{!)I7Q&5|+8m10Q0c_!=f#n;{g7YJeTJVt!~HHy@%{Eq*e}X% zdcS74_`SIyVZQU_EoSzP*mPMUs)i==)%HynO8@A{>eH|CDOo6qv>H_Cdq z-*YK_zo}h(zn8LU-n!nEXTKX$`hKIUH2v;)xZk7+_j@|wesg7cd;eCiPX_yiu)SO2 z_gVH9g&OUhnDX&!#YaBxJj4CwY-#%amc{Sh(tL2?C4mZ#=i3Dw{F63OiOP38*?XQalb26njhZe?3evEO}`CT8h2O3lUu({ zT;m-}49}c!+^qq-){TbeMT=Dx&3w`H}8xP-~dpFC2U(Q|J zZ*s*?zYDeaSI^S)yL-j=n|kr=7nqm-eseH+_IriPCmDwGITouInSW>gk@;eE4|j?x z+?O(7v8_+kUYlOqz4mzb#mP~g@!ao1h5Id~aKCpN?l%v^?>^Vxj~x14*3$GFw_)F; z*s}Ufu;Tmu#$@%@+=pIS^?O&PdE=%V{hn{}{RVQl-SiwwQKV9;vt#zTWjGrudjiG`_0Ah53k#I;UC@f*)KD%4Ev4NWYzEcsjqMS z@ikyOF=PT;y=Tv1>(uykM))ton>4-z<(!(;LfEX949Sfg#5*Hn?ZnCo%+uzFSRLV2 z$_I9S4({s}&FQRHTczN!SsUX4H3zmY+|H(*U+WWi)241MI5~i4UM4@tDj|NqJ_w3>FWbtoRX4}H*z&DS0^M3xeG-m!MP2VCDPlEV|op;%GG~3(s&MGeMlwaxn zcEi4FU3zuHo6DOOsEs$*&_|SI2VEP%y!YkVULTo=w*o~U=nM&}JKM+~wnIXHtnO%2 zn7+y%w#xeZ3pNqx7a$GHA}B9%91AudRLxS z&tSaqD8BpfwIDv&D_6X)o;|&MEk4)!g#5$rOuTXMjj`G5WBZL=-t)&3&m;HCt!&!I zlZt=-{lVs)|2w!o$Ob>X?10#R4yISEhcsq;FgwOZwOjo3YE$@k6K}4W7H*#Qw6lBS z|MBcy?X&M%Ti^W6r=MPOvxD&Uv-D=IPcQk9(#g}Ew`{)nZ=R($XWsnXRnvNS3zL61 z8xG@0zYA|!e&MUtN%4P}6m%G7_w<+W*4J&gy%QZy$E=cPhoy(vkj2(?!hSJs@yXu` z{pO?RZ(Xd)EjEwXJlS@AL7vu#_g%8xvaB0ydU(^&+qLKR>lW*cnK=?OhomXa1* z_1QFZKDk*fTm3O^Y#X_Uw=!gxmQN>5pHAP9KfVs88?~3+ji(RZ^uNvD%IDJu4^BI6 zydL~?p2^cp|LH@9#-dF_nv3m3tPUH4IxE0e*?pw2v$^uL1Gx2t+wCfz4JwUMJ=wC6 zeXm~{<3)M}x7sTn*KBq8{EjG2YZvxx+d_*j|IYD09sTyM8wOh!di`|D7H>CWb>5ef zo<7QQy7r`}Kk28vjK#EJ)ALO>{>#gby?*7-x^4bWhHe@%=uEQxT4~ZB^WwgrCLY)E zpPfvG*3X=Hz`qk`o2R>?PaiV0>h<)pvF!pc4?L&UH{m}JWoO0;cegitNL2FJ_z?s zS?TS1rc1s^x4IfW@%bv!vyIDxUY-v0{kz%)KI17|-xS|BM&+}+l(6xA>&VJ%xyLs8 zdg|J)zOc9QVFR;W;`2%5+1Q*+PMh+X{c>jUxLlsC@~*7l#=BO3w~kJO)lbEDs#;l} zPaV&@+pqf;!^Z0wTNYejE6uix_-#ji#mdc|z)5rbWKvr`S%+;GJ#5q4x8zsgbI*3d z&c?0`eY<*nZ{LUB`ttIYXX~=^ApttZ2Y^XIUBaD;hIf2{op~j#0TyyLs^TzX^QV*Jx_@x9C6Y&;Ub;{t5Ig8qct(GBmsLz?{3;*)2% zy$jeFM{mO?AM-(NR6Gj}=acBau-eBn+)iZi%Y*p#dc~Xb=r1s<5&!VXU%%V@c@K-t zP3WX|^)KxkHuGKFNwDHuTMu`VXK`&|MpVBO&kvz{@ZQIUcWhd0Tw6@f!-r33`Gl8G zqZvJy-q%5wXS?DDcalRIqfoj5AGz&*mo)kdUnt!83-34rv-+D4te=WETitTuwK8fIFFZq(kYbgS;6b8bPj#<(Q?^&=OO;^EPwqhzlgqk^(;O=r*gH# z_7~pa=9zDk%;`vek$D@xs5VvC{4w!D$-&%c%QctTJo7!u(;bVAXJMEB&u{$aht$?z z+~V^q*ekPQ{G>Da64fi8q5f_T+W2dC2XCd(+qW)uB{yF0ZHzX%KJCs*uC4P0{LRz1 z#hVjZRgfk*_=?%)*;rh;#?x-zTM1&5*$S4fARu@R11*b@Q>BlWwrnJaRTaTz?5Smkc{gv1wLT z`e443H1uQBz}DzCzVKKU7tMvK6zwg#XDE9d^#z${Oj@Tsx)xz4)bD)KmF*~9O?D)O#^S9<_PIz zcBwR0XtIY^CDy*dbcUU=noI|JH@j3_+|k+ga>ihFEPG{)b4TR#QzxM|jT3L%$D0S$ zN9e-pxpmsrtL$4myVbBdY+Y;hEjw0U$S#HXz4Z&;l5+VEFpbu~VEJeZcx{o@NIsbM zg^d?{KNz3d7uJv1A}cu3vt7_h-+B(2h~NHeEfzoVaMp9gn^(q9<7s(1p}*;!%+EG< zf-70U+Xp+(wRLX|p*+pBlN&C#ePQ;hI+`2R7UJt)YrDtOF@0J5k!QMHeVyU0k686Pay$BL zl-lvjD%r|}CgB;M@U|Vib{^igb0?lv<)4S!PgzVRuu&IpFi%k5fq7mVZ>NEr#oII6 zcv8`K#KZbaxbx28=FzYo%+A1TfAk7srZEJpScFJHI=ae+8?%wxf|oTyj`^;?Euv>rOtU zNrxBXE!-N&VmcO1wy@IZbJ%#WxH(txeOoA8zX*3yZLu*T++JR|@AijVD_Fes^1WW; zWAUAiU(7}=zNa}n=WmzB{gO?8_WRmx+xXU+q-Rl9Ch+pZ|JJ6Z;R!E3`-x&}NBQ&> z;?nmU^WpBZF5Y%wz361|ojMNZPcGiJ;P-4>=L7A#{FQ?b|5jf%zLS^oH1@B2jKP~H zyy=avn~yQ$#Gif7y`xZ`&EFSqdNYhI3truTH-Bdjw@qPVjeOX<QD=WJ? zY`#26`Mle{ZShB!Xv4|#$e%~HGB;uz>=bhOo9}Eq3w7doXq$$%9=!bQ?HT;=$=Bu> zrM8WXz^hmA$+Pvk-fb;C%n#eLx>vLDhlkVdyvW1feNmTOIKd4sp^@U|)cYV~dB2>3A?ufD;{54>_V+HGHE88=V! z(DSbOWc9UbyqNc}>EY$st%21&_@wVf6yBV-Iq}v+%AaSna#;Vc^xduupLXY=uFS1r zZeL@~4?lhJpm&d~>=K=_c$&*Y-$f{WzcUQeo^3DRf7!azq-_^-@U1(%_2N?<>|9Z0 zIsLGCuAi?g+-#oCWUu}>C%WgpvEgp=Z`N{78@#`A1*r9wy9?{O<;hl4t*{**J@4N=y`5L^wF}%L6 zGYBUQomw8WRlca1{^7ydy4Ehl^U34$%x&FDT^|((^5h#E1K00``LxNLMb1BG!4Chv zbh2eNpS8}}enoRkc;^nVx}>XTt|9)^w|Qf3h~lR3QY&hJ=x@;kO&I&oEd!Q`e~{>VwguGcQ&mrs6*G};B;eSg|^ z(!2lC97p`&r}kpEtwu_t55hZdg;!T${esPbcioIOpY-}@G8BL6V()14Z+%Q#yPdLi zgqLS{40A3T|T5;oUJeKV*4Y!Ji}W@SRKh<4?Ov^_qCCD zc9Ift~n-O(%kd4D~(ZYW#Zi3zRMOa zKSr08)tSqijjM~chELs{JWYq~I4?g|)5t*|gsnM~ExfiA_9Y^A8{WCU-w)8&^l^CW z1ut*DoxF1J>qc7_cx4Ws^k;9vH#1K9Y^HjNm)=~@{mgA^)>B=KJFvRzzwqiRjamEP z%G+MS!;>#1;7S6-IH1V%r`L`cxJw&`T<&(^dKXNu-!M{BS zSUZ-U79@XPv{-%615aJltg+r|+KI1?%G0+aHqZ8b$lu7vR?taUduewVKk;DCr9Mjo z4xfCqP1C+Z?czlI#bwm3SFf`N%Ho{5w_i{` z?R8eJbH7_w>#n7-rXdTa?T?a-<%@6c{t(}DNP+j~)^5>7i^pI>}GBl3B z>wEih=-MKqj(3fHu(I?)_{gO3iw<{VeCt?0Vk_)$ocvEeGGkTW@;vLwR<4z6{sn87 zWZr%p`)>t|e8TC!IRy`Y$8q?`(-(EJd*V-fnKfl6#p_e%7rdOcQAXU;*7hnJf5opK z;&g>^B00mXsC?ko4`C}r)dl|ZHP(ygMb>t(vBA5YMXX+CFRNq6S0rU?zwCdwGbiD` ztQ+oI9pQ8mHf!H^VLB|H)u$)n)+!hC6JT;ScZOTvU))zn#2XFpA8rpi++7}+KTXGA zBLIC^tbN1mX_)UtKH{~7u?+TAgyqc`X+A67dKcL)-g?pKEjN2n8hG=!UbOOow=BCT zC%$_n^0!{J_1*JM#n(4sJz(E8V(2^Kq2(FgH1Nt~ZHx43NXKA3fGt`~55uiDE~eXI zwO`!X_2TnCVWY>&6W+FfS3dCOX=UNy&JC82eqLF6)uv&qi_Z^_f9r_#ci+)q2lN-x zhHFQ^!MX9-Qg%%HY=5-2cizp$md~-DR;bjZJmLCj@!2t$_9O@ARaWNV3RhK&pLN4;y~|MF~(;8vUbYf~d9FGyWlAE*yDmoeYzduYp# z71hnN@gn{kBjO?dDtYE#6`xO){LdLPUj)TZJo}x1%|HLDzR;QW@}U=eM7&vV-t;s+ zKUs^wmDL%H_-QY%`nH$HKaqZYQ7hZtt^Yb#+qf^@xE2pag6=n&AxK|5-;C9iXMWno zTaiyUo=o2TdVn-~QnnrLYdOXDO^UE_w>E4s!t^E;c?6{;e?uD(rdU9#rrl-TT z>60n5byV-Nhx@Kp<=2T<>ZW%tD0x1a7CYE1KY2cx)-ZeRT_ZVvPd-NSjn_)a);%n` zSQ_^$Ytttq%gzPaU%Q8z(f2`ENY#l7U z_JX%RvV_uT3;5*IoQur+_IrLEY)6Ou;q@EgQ^zw$)8`KV<`#`ddcLuqj=}4j!Rs5t z>u0i;r(W3*x?u(C$SoVfCpQjjJL3qv~_4Jt4 zJ^ea6=9eSauZE9o>m%u^e$l-}cN^uIOxz#oOt^R&oy=il3_kUv)k*6-`N`saMKgKA zMy=ATTkY;dwVqwP6{d|Bn;e{{wHi9eG0jP(SzXQNUAdhz zFnZdHlm7L|6IMrU3UAxN`T{-ojnZuwSYIoB>we@QUR~%Fy!!BuOH=bLeUWtQ4sRXp zRT@F*Ubrs{h5J@?xHAA@YbBe$I*QjX_%n;OZ@6_2m<;JB%(J7zi|Gt(WZnGDG4(a^ z`uo0X?!9UDE`~JxX=6&*8Qd^=E+${PDvcU${^lB+zm{L#aJglzpTkO85i#B^?p-@w zorM#x1hzNa{XW>~xqUa!x-?cPHl98tL%U4I*V33pZ@kv3zSbVIhw^8;(+#+D1>)7Q z`gTrldEUK9Y3yR2`2CixF|_+W?sW6h$|syW;l9{k8vZe!#Wz0+Yk`f=?-H+un2_MX_eO2yvq-)j=t~J98f&G<-+Nt_dU*5aF&n2!zk1s|D;)@LK6=Q$t6!wg(%A1Q zpPkFg(|q8h>D-ifI<|cBu{I67`OvX#Qzs?)mc82AD3%1sm{^TpxzWImo?2O5lm9J>7%B#2j zkgUua8?(gkn8n-Mxqx#h>$AapzwBrJWMj=aN6p%>SIIp8Fqz~NZu}{WO=>Rh8y7nt zhn>O8Zk%;a@$LJni#1Ps24PP~HT`k6C?DH+qP^0?)>O0S?a!9pS)1)Uor8_%bEn&=vHlOdzV|<-uE&2c z4tHN(yfo=&_pjLsHImX(C!7m z+kfHhQ+}mz=fa-UP^c{gm8E9&_P-aNI?%1v+EH1NvM$p~YLvV57DIFjx zd>JO6%0262v`!uA6|7#B)ww%%#+bbJ4Q99F*)HOyZ%ko(>Eo^?!n-DxH?Z>8)3U4L zcWsTIh@a~2u4ulNcrzI~25Vn^1U~PYdGEXVLbc=PSNm4Svxb%zvUO=(OSVRU>@yFX z-1IM)&z5{>=;}##i;8a?ET7gZ(jRts>z+@Np0|e2KJy~>oKj!6-t_0ZpV{l$YM7k$ zHP~3DZ{p^pIcsj>cPw)|6hF0B-;=41zKg%I^($tZXKQh_i@VqL3$>LG9$-AMf$+8w zylup%lb)=sp22J&OwRf&ynPB@9V1QY%m1vUh}SOK8s4=>{@uyHK1)8%7voKR&0eLU z=dk#AGe6BP@i^D#gz?Fy!K>R=QKgUnb6&{qn7&h4#~YK@}^Lyp#EOz#)y@lEc z*4FV~U!!Awi4XsD3|^lBUi-sKK62>1Yjw0jxphDOhVg+t(ZAr+cE*z`kJ9i!K_sn5u_~WfL@MMcqYf0t9=CY;Iv#sf*P-oO3-zVHO){2+6(=OSB zbkE4T`g6`u8I#wB!|v==-}AjG@mkdwx;TEs(~phsS0GE%IthIGn)4y;%Uea&Ugl-+ zkw5&+qtAxZ`M&2_`@-thyS(GYe8psFjjg>x`NNx!753`rTuR?JlZJfKD|0bpVfoYU zO>YG{-EgNQU(UO*t~Z6?f%insPs(@A-3 zzq5C__MtryW2;|2ICjkMmu&j%bGFWRK6;n5ckao9w<1GUPI~Md2VVPNM_K!_A@JJ6 zJowrj);HCWc1n+bm>nQbcEz*;ft1i3;Si8g9j_~^4 zuy&_E@Q(Fv?(8`?zffhoBSV-z8^_^ocbE+6v(sj$T<2EOC0+|2^bwe>*jpCiq)*4l zjTPATg~`pB$RbG3w!o`1Fn-uxcx4Ogr{)Fj=-{V!(@!#YUq_z$JACrdw;CVa*ExKi zJL%%}i}GooOIwTIwzi6K^5OlZtE|%DzcHfrYK%x$ty$4+zumXCg7rE4u9h_)_PoOS(kg#7jdy@XF9P-FIw-*LK0D?yb}6<9>x` z`yjmf)-Rnc&)KEwZgnIZZuMTd+7v#rs@>T@z6?3{t}&=FLj39>yz@1)NAohe3ZFE6 z-;6ystJK!y(7I;hBfM)GzGuJna>8SE1Kxh&w8z?Wr;$$@Yqas)O@QP8pFFb<>Mnk5 z3-9XWU;ENeUpU%!bZSH$^{;LYq(9$ItyiA*rnY^ZAfYp42(NzyYhQK%-uCq+&EST#UGWxvbk)*0P>Y z>6b2^&TpzX;pX?UUz^bD6O#Aa!-GA?dx)M}nL0h#PG`EMpO73KVV&*%@bvXT@_1wF z&vVUj;hP{5tmuIn8)Ni^-FmPyK}Usb{}=?%8i{GV|=7 zQmd?#*!!eJW_h)wv;h)`~*<61 zlMXwsWUqTF<)3fbBXqP}=$?z4XXm|pOIw+`Kl|H*7cyhnlP=vAO1j^Bgz6pogJ*sx zt5y-Z=joJX>zPvCwa00zd&+ye+h@r}>JLKIFDc#a%WtPOJ0(Eph3z6by+r7q^0OKJR%U)l`Tp#$!}nTTHuRDM+=0GtrI%7PAFSv>=3%=`R#Lge*0XW-#(Y;x6kGI?ITY% z>u5X)S}i#xnCsga%bypzKf6npr*?mKw{`g;{c?yB?%KoiIPDO(0ba1v>0DW z$X%YiSRw1ctxXBtdEsHLZ|yeGdFCrk$Fd8ZRuQ_V{Pek$pFUFRRep)+p7O3CzWsE6 zW(TWVlHL<)O{dU3{M#{~_uVtml zp5;~UGu~!a!?VLDulydmkMB+dBwhVh=$=w5?W&UX_4~8C-L-Fee|Fa_Co%5N?iSM= z;r`58&uWNu&$G@{Xtli1>Wk3PvqC#=3f)V%+eo)-@6WU*Kax#0BW)zv&>0&&J7c3z zViB zOJ|jrYip{V={M&RI$wPey1#etE6#S`pIQ4-o;jX5nz6CH7NL8}`*`H$&YAxS-BWJ+ z8FQ@Ho%R!|{a72JELii@duv*EzvsET&0k#a*<(JE5K@OPAI}Dp+R%C=a_h`MM&}k$4 zd2~=8^Q@BtTlXU~_sQ=e{>xev-wdf$*a@L~%6m(HI<>pM_m5j^dUje<=!{1~jYlk> z&?&(V;mK3zXo%3sQ|RO=bn+Cs=XoDH>^0u={L>>(KD1}|_wM70(=qpFezkLDW(BD{ z`QAeJly@oFQ@cN-^RG^e(RpW%s}Tz(l-1v7_xJ90*Xi5)v&B3)>)q%4qtHI}%uIau z8iel8e*37O8aWN*w|QG95~{ZPrqKPpyDw$`wv=ilbWi!&JlnC#YDnW><$X4ixIa5{ zLn#~oHf7^qynHretM@k4__v|6@+Fr$FL(RmYYq2jU*1}p9XQ$}bTm@vXr$2bx`d9` zC3G+0KCbv?!~K~x`N^}B1iUG6(C zUrp&dn{YSXZy>K+{Q9yMtEImh%xh)`rM%~2r}*fuecfGuvBP^$d0$I#I_h5cZyuUe z+dkjNHV@X6M|5^#g!ZXt_g>|E9g8 z-@ErQ{$8Bv9YXh%cWrf-q?9yL=%jQT+V2lh5q@FAejkO z-iA)^_v~JR-JA7(on|;+9~8Q$^xO7qop$ie#PiG?=V+EtrPD~EdrGU@y9(|s`2E@X zD7dy}bm|~f9h5HQB%^cLh3>iBM>Q#UO!?44_msN>P@Z>mB!$ zcOA4YdVjWKNA0)PlfI_(rMlMvwMGcCgJ{U`!q>7A5+^JQ-#jxBy>h6p+mo-)ltQ zP$Rk?CuM708@lsyZ$Bq_@6Yb-XP$U}wyX8*r#am5cZJS+k5K+D>n3#kU7@qWBb0}` zDevX&h(KGNKfOP@TXwt0r{@Tr-Y;~Q?tLZEv*XhWCEeQSi{W!u5386cm_qFYlBOP>V;pFK=q*J|nCi1RX&a$*>{KfU&y~UhXbXLUrY-bVAejHoE zA8u}6XvgqEYlVgQ1}7zJ)QYudcRrofIJw;W*s-kYXO@57^Zos#L|cXK&+Zn?ot^u$ zyIpd6r(E<0p>{24tI*L2p>$$Xo)Olwm*;8Tw$RZKp;zZ$o}5q`LU)DkoSphQ;dZwS zcK=RFr@Kzb`Ja2}XoYhXcbU08d^Ahwy!Y*t$j|H?l+byGuV2sao%=RfS|R-A*u!pr z_56P(WE9~i{eGT*fBtGSt1@i7UHraY)UL?M&)U_m=PZPHr*7;bT5YpVZY;4g_v;sa zFjRayAf4Ix!TjR7lQy2eJ!#G9_{-l+_$TwXFaOye`SlAQ&fjj^SttC?w3t@Wn#S;Z zeT=@pe&MGh<-U@{Z~OK9;=8l5^0%U!JbLbA{I7=-JUgdiE#%kpdp}kW)n9q|(Wlf; zF2A1Nh~JxT#tZzBkP}hK=Yz?s+u?=3Kho&*{-3V;k#{!%tkNjYnsW93%T=D4GcSn$ ziGO$g{xxAIhxRPXm(R*`zU8fH1?lZnsZ}eVytd^1#tZLX&o}(hC4YR~_2d0%t6#kE zqj~m&(E{tz*1`Q&q@M2Nht+f^dGs3l^-eAOf<`wU?9coE+ex8)+-sF)M`H64>y~RZ ztk}{u?MvPpW~&O**Q1~M#J#->AAJ<&k*x<-AL?JtwcijkFs!wt7z9p1=GUiTAnD z)^nE6^H(0vjiZInSS@V*N&0>M>c8b@yuLsG-sAb^&+qV@^|o^FYeC!p(|7uqe))C~ zo!Rk3*twWJHCxzd*9aqQzu_L1=RG}5TYZwAg}Ohta`gQ3PK@f`rME)8dnEeT(J!me zez%!FnEhj4j(*Wna|q}3Jh%E~W=9^{zwjCL3!ky5@bORz9}lqb8G{NRKc(>TR0^M6 z&%*hF%MWhWv$4)*NAavd=qr6;+FHJ~FE-bDW8tK|{VDtV>NR50AFXeO&R^4i%>M84 z^d&No}OjBw|C*w-i1$l7e4J>__TN7)82(odlx?KUHG(j z;nUv2_x3LQJb%`zRv&u)Jb&LEOX9iy-t)#=`c(LNe!n}?dOpAB`Tg!l^7-e_^NXAN zbJkDz#j8By)A3iF32%I(>G*M)7gvSNZ|?ooZ6UdB|15muQ8;<1udvWP{qm#!JwNg* zoc!=BEOdXL_1*gQ{Q37^y58t~rst%8f1mxozt8>)>wlzi*H2!Xo!7NbPOtKy-k$hQ zzw*rT2;{3y$7ZM5yuQBr?`uZQi&+EbzUUOgEdw+6Y8!3 zo6_%PIRC(lt6uiN*^A?`embSnsZRUy`FNhzPL)NMSvljwKVSIoNtfO8KEL0p4d0Qc z=+;QP(8-6bGqe2eHIK-;sE0K#9C*vR43G4TIB7ipn~%;$)yDTUV*0*>HZm?1BVS`P z&&N$0xZkwVf=*Znlg9dsYJj8vni!+7F|+!UJel**)=&H2k$|?9k958=;(Wq?U++Ab zxFad0vD^Rd!_v)n{*TyxY4g0#lCNw}EN##N%0IDmM`<+W#P)u_$R@XLeEs(&neI&X zJqq`4|9iBwag8k1+sXFdPrS2&bSZf|d-A7=J<>XS{?~)!N_;;3%K6{(q4E9hq&}>z z%rO2kCFm9E^L#$^LJZAWN&MIFcVzWE_i43!o}by#WS%|U!GTr9|DKvTr-6f7nEtt? zLJsMYc%|Q;ko-A&@t^fD8hfWN=xQas_HS37eG8XQP{}m&xATM-PIvSu`s{ZW|9h;I zdRG5`ua7kOaGvA4mRb*o7C$c=`iryweBzrwWbl8Xhd8@Fc zuXXtM=Ue{&>-lo<|9W13FlWg6{3n0UYw~|;E1Tb{1i3ng>6^>E5-q0}(-M8lO5t4_ z8ZGPpJIwT{4T<1Ffu5+Dp-*@i2#bAv-_AC9fk;l@%#?9@w zp7q~e*88SDe(ImF=}%ePJGVYoKHeSlebxKzlhIP|ulfk5Z|&pw@b?-|kMxr^^z}XN z+2d&XWE|IjJ7znA>07h2_vq{1j`UA!JZ|ql+t?o4?a2T4HvV}h+ws|*o#1J&-tpRh z(%A9af700T+#QYW8G1ZI`n_E5h59dFY=2wq>D}dVE1ukCo{oU}Jy0M2pY)HXH6Gje zXAS+yQh(C;XN~Ri?9&=g`uX<#DZO{>NdFvjAD_~moc+fhqpx{;KiBu=pLapM-gfNX z*(dcQkP19XZ(qMgQ^8*r_@`gB`ZJ|I`u|yy`afQ$_X7Qz+t&H(n%P;s`fG;2?o5y8 z?*AHny^ZZ1<)24)r=BNuo*tXW=OFz#aHsE2>*!BO`V*9X+a85`l#@DKhp2l`jxNue*G^n^>+~TqwwceJvow3 z&fC-d%L3)~Zyf8d9d`DnKihhI{?^C)C&%H*E04#c>$pBlJ%O z_5XiW3FyIJ_i6q8bp39-ZBu_Or|;=s^&ZEgr+1sb+qWOb@hA81ztej>7ymCk{fOw} z%aeNl)L;F(7u#0?dJq5eIZ@vS{YhJ&r}vWW-BrKN{%&{PS>5^*?e?7qecaN=wC!=# z&w}1t9$%+q1B-e;)bHGSn|~ce{Tyybo~Ot0?=|(OVg2>Xlh*`))qH$@|9{Wn z&A*<`c2?Ze=d{P8yM3MYcm^Mzqn`B0e~NIA%RISa{@SOV6ZxOp`t*u;eExc@<@~47 z`X@ip?@ao4EA;)*&-3;v_Mh6k6IY*X_0#M8$!PF*eSBJbd%xViVsQqw=l}2ed%QP3 zt^K6!zi-Qvqw?3iegY_doS^r+qs%{^|+;cdsAcpV+bR_$0ey{jr6=j`xnvPI>(uYU2NY|6^xt^n1}i z_2mDaH|M`uE&m*mcWT^e)06R3A1`*Uf%JD;4Is%!4Z+{$aAE)EF~KoINa#TF(Z}f> zITYwL_is};NN;QGr1Uo4ZuzrxCtqK3W@x*-UUx;at*e)O*uJCpWc@o*z1CMlPxE)v zo^1C{-ruFR>;1c&9of^?Hiz|noH@3W|Iap{kn=;yM|U(~ptVXubN`c)PhnQjaSIsa zQ|PQA6$yhBAtp_k00Uq(9Dz9u@?qS(p>Qt@@*+pJXA|f>3mq}UgZw(Egd>B)AfFqo z?`9gqAZeUA!*!4!3{!FVK>w}SMMDz6m!Xq}On_gnhEg^>dApTun%lJ>zMU&2~Bvq1h^EX0Tp>S>4JplTQlf`w=~QlPgN zwqdvo^5254Kt}-jLfCKt&~t`L_COFYh%EK))ppZKMS4PJ(Rg76Jap zSd0-7w~Ka0Z|!2$Nf zvfyG+-z%JrU0T2=Lj^`_00Ru?c8LL|A+~m{1I&yYFo)0{F85+h`2nyRjUjMNt1UaY7^Xeqax}YAOW%c{xsOgadqYJl%)@+C_)p zOvPZHGP&!!qyP`c!%a3pxfBQ=Mg@A`!e*Y~13Vl%{fq>l3q%N00d(RBU_?;JX} zHQ?hpeHrVviBGAhX*d`)?f5gt3$^pL45t%SSekqh=q5%Etg)>a%f&A5YOA95yBXP6OP(i*M zM_{4>{0A_h$qc|Z;`t^c083#4xEA26uwkPifWO6a;7VY}4Z8Bo6yV>16HQnLVUQm< zqedh!9=*^JqeUS9BVK5_1?CGDKW4NH_!CEmOw_IW2cR@ zpnWayc_RkkpM^2uBcQx5XW{aO8WI0UAKHyXS!Y=V44E_;Wxne$8YF z$lr=zHkvm8ehS|(Apn2vjnnNWf&6Mi&29-8&mzNh6FBgP69%hB3?MgwjP7Ow{1R$u zItt_{$k=Wq(94G@_N)N=FT@S(7J&TUpq6{&01q2Zn{t3295S?f0PtQg4Rj1(B-Fxm z0^m!rn8{Rz(Oz5E9EnKwe78uX>IS^Bb6%4XJ&dPKi0#J zVF9#`Cz;Lw%r{&!VgbD`Vwt9+puYdcaZClk-Yz)Pgbn8H-S|x-D}bkC`KAoux1Mnf z(+yDWO(=7Z6zIJNRqmMq%2mTydt^Y*KHh4N1fYLB z+ms6A&%i{ce1N+R)=WhJ_Zpy$#Q^gm7RFM5mIju_GJwCCTN%p%9)%#F3V_cUV2qUj z4;rYTDuCXQ?Kog;NUxbSGOaM%PiubGl z41=mn#b6#@HxQey0sez{iRlKwmkr>?7GS-GaR^4EV19mzLm00E{?*tegAu^L5j$+U z4ESH-G^XQV{(a)4rW2rl0dZ4%CP02BbZw6W^CoO#&lG5140OyC2jne?^*v%R zkDtbG?wJO1L++Ll705jeAr?!Z9&6Z?sRZzbapR^efUm;0j0iw)4`geP6!0GL6Q%-y zpK}lvGJr2a)^^Fj_(gN(OqGDIgJ})qpr593Y}hjJhqvJ9J;Q)cjhi=BgZ%%*FPhGP z_V*etnd$(a55?>r0r(Y1W~u;sKXZr{aM15B;)zBRK#qnim`(wF9j-N<2KaS6(R2>9 zrv=KeSOUCPJkl5g%9TJk&;=lmG9Vh`f&CZ*k}(1UgK!L}#z=s#KxoD!kbl^G!xRnp zcg*R=765q$BA5oW|2$;V)DrNC1|t?$0AnE=P!$-bWP>f!bztvRa|n_O%71GNM`A$! z>kz&<4q&hOsKo}z7aELNYyvDY?`zTmdy|lHC?4cz7_1o(0A?A8VMKu68NCKq5&XztCXTmlDppQds0Lh~9 z5J=-u1Ar1yvp_;ZZ34PvECKduD1iwWD-<7421)?RvQVQylY<%ql#dz$asg@pP$5bL zBqEd!q$Q|fKxL>=K;_1hKrTm30IEQZ1Bntf2B-=(4kTLC6rk(yc_7iDW&u?gPXoy? zY97#06cf}af$>3l95n;z1Zo!0Nz@#mQz!J z%X&F#1Ekks>ws#ESAk>`W(oSZfm#QY1DghP6Quz&wS}?(X^7b-(BwlAAU$A=)JqKE zfFjMdfPBRm4brQ|bTAiaGYCjqm{koxAw$L(kj9zO0411F0VSHz0i~L)gBlrTB#>sB zt${S#Oa$6FX3PN+xZx&{2+jB)Eiz*ODmH@v|52E+L0V}h0(9J10p>zuHVOPhYbFK~ zHBD_r02~>fqc_o2vD@)7@!-*641hBGcl-l#cT>lEDgs2T{BYwiIw35NUxjKkb$Pz z97u1$M8My+%-DcJ%;$k*3ao0-J98P(hrkzs1PxsR6k#p}612G%q&JO;fLfX(K^v^h z)j*Chw*YCJ`5KUq8Vmpl-h2qqMc6Q)OW;Zh_#0FM(sCFYXcEk|AdN9Z067A#18D`! z63AB!$Y7P>46Q&~3Bv%o3P*$Xkjz(rszE!By*n}f8Uq)K)x7xpn zv0SrcJ!^^3Jga?H1YLMmbwGV!8D;q# z<~iJR_~(cS>T@e7y5R;)2iH8Odv4{q)#r5PtHulj+zM|dvVuI1c;51PxtRd5@cioY z_=ALl0z>IRk>Ql_!a>3z+M!i5{-GJzG;ThD&e(Mu!k#1`tO;w6sJrj7dlul8$5{*~mF#K2iba z7|$DvkuszlsY0reTI4Wt45@-oBBzkk$XVoq@jP+?xdvZCt{_*DYsd}c77~s^ppYmF zlqJdvwFbkX7LD;JB8r4sGNz&ECs(VYUU^GJ}{y;Akkq9Bsa7Y-w&~E`Sou z5pa_E0-Rr>$ zxD(z<p~P${ddtW;Ju zRcb1`D+el%RgP4itsJksP&rk3xpKDhTIE9J&C2;*?;+Ot5BOVrG3FaCGy#!dmSB-^ zAOVwLmq18xPmo}!34RH0@EHl=3G4(ZMuy=g%#j2Ml?mMma?G6sbfN--PjpEnC3+{) z6GIYNiAszLqsC}3T8s`egc-(oa$^(uiF3S^L{VZ7KQ~dDSe97IS0vUa-bft9jA51% z$1%4PCorptlb9*YG-d`9%H2qOm}r#r5`TA+WfCsQF^QbSNqUt(iPs3*I+^q)_j=L_Mj%+jtYh|g!IK?%`;xKA zF3F^1?__#%NOElQu3h|OE3PQ{OtL)XQ$%0NP|BCwlPS-lM^nzFTuhlxxso!May?}+ zMeKDeC4jq8aw> zf>c>*WvVh2VcnF9wAQ3{rw*j1q0gp{r(Q^%O1+#qn~Ju!u)dbMkZNgtGu6s^IrUEJ zTI&5&H}qyI#`;kz&Khq`uqIlQtf|(&P#D%sYnF8;dY{lrh!rmK@In_M$C__V5(=z^ z)*@@MwZ!@%#ak$~rVB%aLkO8QODMNiSjP(a!W7{j6s5JwS|n6k=L$8}T5C9U7gc9% zMjf!0f(w;0p+Z#ODp$UuwJyjp0;AWYQ1LtB55&g-Fm}% z)B0B0mi5o$~cTcCL zXYnkse(8+#@N@}}oz6`kq&5s#VJ)eG^z?LbdO^A@y)s>y-juFM?@q^K30OJh6Y4})y{dz^YLorPUUznQ+AekXk`{eF5iWi$Oz zIvWemFv;Lxi+Oyk0E^BLVpp3)*nJsdtW|~tE5%|n@EJ0!O9m;!%u9|{V3kB81 zp~h;kT5L#$4m*I|iyp$VGKR4u*iq~lb{so_y~{hmpTu&xQ`jF7)7Tm8EOrh%k6pwr zVJ9=br7mM{oL<4+rCLx{vGtTS>^k;R#!SWrRznF!Z(^@zbW!>!^BJ%8Z((m_Ky2VP z2%Du0w2g($?Ti+KhZ&YORyGikkq9Y*lQ1?oo1dt=MJLGpWJ{5pC--RUKPbY9Xg2$} zkEo8K6I`OmghCe4L<}3I&1u9LGRuZ-!?EGp2yBElA{()d#765CD3aPRMKT+?jnXDc zq_R=l)bQj68XK*R&gON*fX$E%-F(<)#D*gpwW%_gwwbY+wMi7s*{FE)HVZaik{4~< zJeF*}=Pui<*vLgSqE(wUn{}IiySIuqY&LEBM7POXHV_;fHzYbK8Wo)rO^A>0T*q8uE;*N$8<;ypp29J6qjINlGq_pY9FAeWfLp{Z z;W)X%+!fpdURLfZZVe~NUB@xaIn)i@ChliMajrbKCKqDc%!k_|Y*o2P+tyrdF50#) zcPRH{uBGj0?zvoyE#7t_mtcD_muO3}4d+vBX|}I%r*p65&gEXurQ0%WnYL_Oj%|vU zz;-cLXe+W6+e&Puw!?_;VYhO(cq_SbTZOIC_HM4qR&A@X)!H_Y*K;4_ZskJr5P3RV zvpkEu19@8BfGxoblV_Jl$aBx5=K19f*$&%&?J;6IYCC2-ZaZPi$eXkc&tvCJ*-qQe z*v{I{+0NTWa=#-l*e=>G*)H2Upt*U1ycOG3+cn#D+YQ@I+bvs&-3bKT4q;bg@CyQI zmw5(lXJMC~C(g69v$8A58z*DzaCQk)ydA-gX!nbUERSSYnO8BS%xlVH*|F^i{85At zmt)7b6WD3;gmxl3v7N+DYA3VvLd)$Gc1k;yo!YKDPh;24f1Ny#cPwut?`)pVZai;| z?9RWCH*81cPvu=CkJ=G=V|JJGX7k=AU&~wJE#!^c-OO9go3MKZJ!v;(*TNUOOEr` z?S3Y2*lpTv*+J~#_6U2VJ=)&F-qPMhVrBn;obN@FVC=mmbO}p>vyYYVC3yQ33Bg_@ zA=;DdsrEE`x_z!hDq+|&?aL%Ls4RQ7J;$DJFR)ig>LqFk8ZET%kcjNX_7Z!ky-p&t zm)k4smG*-YmA%?tV?Qi8BhlLH>=~pn$$XY7w6X6@(f=j|8l7wwnqCrL{ZF8{VI9CaX~?Wte~<$SwO%y6=({G`0fG{exTr30ToZf8|)e>I9o7YaG_wT zfQ}!gTrQX`VBoJ6(7hH4ZWi1rVB%SLHlBm$i@>;+z;+OE!!e#slzRe5GEh|(M))!XsH}ISIEj+{l?r^?vvJl~L zsSxRacCc`;bV#9EIba-c4ol$0ia=?f^rG~x6z^bHL@07Eq89lTF^a;A*hOz4xJ3%D zf}+bsH;V>I%SCsJ){58;_lq`*-sV0kf)~F}LKj;VV~aTs_+po0J5N%vcd^icUMzA5 zDP|SN7W0c!ipTmz#ks{!o@K>xTt#txvAVdUSXVq)JY0OHc&vD`c&6B%lvPq(A}`4& zX-oP_);)$wPL_<8oGVc~XdHae6D1c*rb~Vz&6O;c+$uRp(K_fHY$yW`ZKRcwyCp*o z>m?6Lwo0HfglyQsOm;wqk=e-zGI!aC1BZmCj5 z^d|X}CLND(qexSZ>HO8wd!-wtGmdrqN$RZQoa00A9|F!h8kHf-794k%S(Y6v!<8*M zE;%}uEjz9_t~#zct~+ixZaTh2BA3z10?U|XQDxvUQCVUc!bw<`Rfcx5aI$o=a>6*_ zoFrw%WqoDm%I=mCoXpCJP9!I)QwEjhM0a91G0K@vEGM=T$BFMGaKg$-@=J0^g*EzM z1+K!eLg+-SAXm^T0xQD3m=#eKoQlK>VMSJjq@uV&ULmGRoTN@Q6{-rEQ)`8`qOU^k zq;OI?4OOU|)J_^Ft<%Yh(TZ~w%cOkj#fmExw<>f_15O;TAt$p+i^>C)!%mn=yUGzK zLM64*uaZ$Y>NMsQUODbG;WX(q?Ift2ahi2XubgxGjkH{Or*f_Ge&uH6g43eYlGCF~ zc-6AgijzszE0k5IHK%o_4JUNfrqhR&cNM(~L%x2!$CSi*Zi56EERLiO>tCiJF z)%!g))!o$t)yJwws^6!ctsbw2I6I>+R8LjMpueDAuAZ&FR=rSNOuAXUTz#kdL+)Dj z{p!tXl;@*rcn!K{UyW4_+S$SxTVv_`3m4;zbH>-W)R1cWJiKe@H6b;unkKK<8h*`X zQc8`e<|2+eQ=O$XWi^VLCQ^Nkm``)2JF9CL&c{g|HM*L?n&BFjGu!!0%~%b` zneTkQM&LYIbE#&g=4y@5S>!BsmN?JX5J)#_mTGR-tk&GC*{FF~1F1EtMb_@FwX8i@ z`|K`Ut<>4Ec7j5zeUl<{ets9ZmR4Kr6}=&JsV%OR*VfdIIIC(~Yx`_v7()m{H zO6`>MJBYirK3?m!4{CRNLX`|&_d_y1Gs0!MZJH1=SM$JQYi=qe5Jo zsB8+{9nNK@&I)~yhj$^k zT&BpF(SEE;w{e{j|%BOCxF4rL}&}W!@zpJz9URexm+j{dE0;%a!^N%A(7X z%d*Q{{WNdIW!2?+{bK#C`jz@MmvxuB^&2jmE?X`TSGX&}73PI>MZ4nB>-7)nEnK(i zEnVNGSh+$QFs@~!;~rHcoGady;7W9*@d#8z!@tR94HgXt8ZZrZ4TJ{w25JMz)s0G~ z`Zf4a7s<1TZxM`!2+9>+cmunE>PmB^yK);Cu7Za22600{1D(orC7@*ul?^OcWdqxl zzT{R6N*Y1XahGPw4SBb0CRpu&p9ch?DC|s4UD%Z0OYS;0G3k~y#sfGo_ z<%Zb?jqA0Bg$5$}X2Ws=34NzQ>#B1da2;|Tb{%mYbscjZcU^0kaJ}C!>AKmlh!RzDtCecmb;Whnb#iHFB-N(t zmMetlt)iWpek#U!3rO{y-bW>i;IEaDP^O`KOPBW|eZXby2n#U~1gw^c&o zs%ixxB8rI;qLe5j%83f1l6X(Gp;8gm#8rfbs3ksBK^l!3k&U|>b;M=r0C9-83?K9u zA&wHqh~vZw;u^xTk%68h9&DT|&~6rPs>aqvZDU{KP@|>W$wn);(MF6L&h1btIZcZc) zn&ieu3(!{@=Nhj!E;in3q`J}E)+uy1h8xpurSWbf%Z=^Eaa(WXy9wNcZX!3ao5W4( zR)l`gxYY=4lDQ#v$=wugN;e@|gjTt!-4IP`1G6TLn?;k>?R$jEKh&y;7n)Z6nt0(qjuLZBqy`G7?<#jkVkDKmsJU*Ut8s>>e;&{T~ z?%#N=dVLf3H7pqVqt|_}U%j@x{)mUgpEzpd{Sma)Bg$jm zfw#=F!V~3DW%hp@Kk%kn)iC2>~AI?@NW0ikh{pE9uD5!p8cLk(laEgH+CS6 zbhm%V)7Sfi=gt1u{xhC0d73njd%o^@(erK38P5+qlf18a{@b&U>^QLKdB6Wl&)c5H zUT6Ei^IY>3dSC7T+4F(te?1@eXL>`(hU5xw6Y@TiIoX2zEcqbWh8#p{^mvZMB;mm8RnX zF9w_ocr9Qu;H`km0q+OQ1$+{4BjAgG713SMy2w3~n#sr<$UK`lo;j6yCo`9a&XV#J zJYqIEo0cuiZp|LbUd)Dy&BP1hX@m68Rs0%$9e*I~P#7-EAfHRL_igX* zyw|*k$v=CaCU*{`Cx{aY5@ZR=gr)>EPm?f^a4caTZzSPt!g#`kgsFtf39|{;5*89} zCM+kcCEQQgOn8(4Pc%t%=k80iO2j6HHM5&Dnl2tX z>%&ZnN;*p(O*)q}k#sR>I_XN%T+%aMi%EFit)!KtyGiRw50bW$paO)TgJdSK5F8L- z1a<-!9zozPpbGp1JtT%8T)-A^1p}l!Qo3ND*GE1io>)*IkO?XUNaPaIlFuhkCSOXPNxqsqpL`>EDfxEtYVy70jpT>Pkd*HRj8c#(yHhMv4yNEz98-uX zm6||vqmgMoG&(Jq7EX(%acBv&6j}yNOnaC7 zAO*u`@}Q|^sn2=k(~4>3wAa-NS{<#4)<)CPdTE2Sh$hVYKNxDuh^Zkr$ z>xFKq@;ymX`Z{`j<g(#&>H7ldSgOvK=Y8Mso$`Ih z_loa_zVp7H`rh>Y%6G;0d*6G$|MA`Q{oNPpXY2#_t#Ms^5=(_x*nL z+wwE;H}W_2NBi&fKj44JALsAj|B&qB@8M7N_w^6-5A|pH$M|#oll*&IhFVUw%ru>C zd9`IwI4nFP9217{CWV)TGs3IFdEpJ=lJK^0RVehoC)^M|6dI)=({`s>rm=Vj({O2y zY2-9oT3{M8jgyv`CQO^Kp0sXFo3fs^&h+2o{zc2}mNC-2b*_J*zs$eFzsA48U+v%S z-|gS;KjeSH|BU~V^{b?p{MTE?{a^RL=>N9Amlv}2j{)Pu=7;wmK6Kdru>T+y3AAulfJ%|G@vh z{t&t$-GpvVx1c{uKS=+BY(s}rc2UT!zO7~yJUyZ{p;g#g&|2E6Xl-b1Z5?Pm-g>6> z<<^PT*bIIKm-|6$N`@$7(%qS!;O&EaQB}5&AIwH2p07 z75W5ygZd`@68&BJ!`4|k-sU6vb^2#?f{j7j5*^WI-u5;94*duEI{g>=L;7#jKj`oP zq78(yE5IyZPrxmnWx&3+_ejqNU<2#}j!*~zR2#Pda)3_&JzyUBY{qRSY$k1{ zY=ojLkwjE1YHDk5)3qIGJK6SP+j!d>ZI{~KYny9RiADmnqKl%=!&gLeqU)kX(Jj%I z2%6b{7?Ej~X_0v#6O(C|Nyzle49{d|ax(>)>6yn5i!%!{Wto+k%FL!rO=frIvCNUo zSl)%q%bBy8eBQOph0L3o%b9DL_cK#?o0*R?MLc-c3x`dz_GMXRVYBdAE?J~3?<{&& zNER#WmBVGc*enY!KPx3mlvU5m&5~x7Wht`iv(#B?-W!KIvUFL4S;JXpvc|GHc;~Yw zvo2-LWL?eD@#eE`WG!Xg&Kl&cX5Gu$$a?_%G+1ImgWv^u4&0fzQ<2}gU z%0`GS#0SI}v7MM8b{A8{eqx50E#`^^;`6+8u~=LnmWeCHN^z4|BkmRth>wXkxg+AU z;&Jf>@!N-|#FxeIAD$Io6W+2Kjv9r2p@zIapoNDR+0$wBAr%dyJA=4iMs zIi#FRJntNOPDl>%g>SXQ*uN(GrZg!X--*=BBwq_oio5a#$9b&4)`|UZop3g z8v%PLzXd!BfCWBiv!oybQGvSy_Xk=9S_j$%It3B~Jp;W1{R0_+VS!PBYTO7{i__r- za4wp-z#$wza2S^ym>!rNCfap9U6 z%>=G9kU-G|x={`X9t%7bI2!nJ;5_bpAjAA)(i?$Of$s$7Yh;=#O}(Z?qt*0lUiLVq zIjtGfEaR>OCgy$^I3M_F;LX6V0#^dR54;yhrub0)6Sx`pdmuE(I0zZ^Owhid=YlXn zwn21?W6;N%6^~$wYmkL)D=(Zv3bL~G3i1nz^g8Sj6jbKH42lej^@M^jqRHDb_Uh1n=#nl&!E{2G3a)6lqO0Wg<*GsafYF# z^ip18Fzv<}C)!_UTx1MV-e!y-W*8qZM%xGMj#I8NhV1^$7_nPqe94$;zs-Oh`;M{3 z_?hv5@m~fc*f7{6*gV)G_}Sot!8XD8VCP`>U`jA8I3PGAI3jq2!VZoPevy(GoEj_& z&Iv9EE(w+gFSl0**9SKTYl6Fi`+|=I4+ozPJ{$Z>@I>&N!RILV+J9-^YKL`f=F#1Q z-Sgd3+?(8wySKUbx{tVj>wee$CwD6kZx3sa^BxzP>^#09T?&3T*s^0b_@m(K!Jh>$ z1%DlUsKc(~POx*w55c64^Z&n9|r#s3=i2A@*2e~WRkKc#4_ah5NwEj2qDBR zgdE}%LJtY+V0Q$Egop4tQaYkTI3WokDIpml;*hr}nH~8d#UYZ8@{p1aMMzypQ%GBg zHl#PCvSTphct~A`x??2d#gKC$ogIB0uZ2v89PM~3>6m%nMh&fBtw;Nf@#KCUydlk9E@exV}n#JbzNo4J>DR(Gm8H{5rJ?hmyJ zy-YdgVI2xBKonf%nH5+R94N3WAQZS4Pz(GD7zH)_v)u54ajsqH3!U#%oI;7Ao}u2M z{-KP}u+XT`IZ9k8KlBqya%gs_B(x~BEcErxs!(NUW9Yk`S35uH{HpU#rvSgvDa8M` zQ-p_V#rR!X2_CJL;`eK1_=8$G-d3x?6SS?NSzeu?y3oU+Hz>zKPlb+#z8q>xIv@H* z=ogf!(2zoYAyXTzW{SE1@5T&WC;)dNcH^(3Q~dL+^$DCv-FP_fRNv znPSZRmV#tH!(1ipV?M|HHX9^mo@Zx^l>-YeWFd{}scXCy^Rmw3CSmePY#oYYZDl#-=1>1`fU8YSgO6Qx3F z>R^^sA}yB6r8QEOv{kB=4oOc+N2TYa6Vhqv73rMxx^z+6%D*LDk*-T0NVlZWq6=I^ zky(*N(SagNk(61=tYmIbexp31z^Di+in^Ox%TzI2m}j*e%pT?d^CP^KI=F z?HKb_<^|@znA6Pnm{*w}Gxt*$n4dFmF~4E1GJj;=Xa36EVt&_T5M~r+8io$r8@8bR zLVH_FbRaoU9cT`MqQb%SB5~0wPgYb}q%69}Ybv5UXo|Xv28xaqjTD_N8ZVmSUMQL> zVmizgUFKdZS|~E?LU#GM@98?w z%y={>DxMSnMt@>_E=S4{#_!`~#anU82PN^v@$&eZc)r6x*YU22u77o1?)so>zU#BD zTV0`HR#a;$D=a3A83Y~@&>im1aYuBwhn+9( z4*TAtKWr%MMA(_Im%_%wBo42KT?~6WY$oi3uzlT5)N5h?4tu_PG3?8*+hJ0NdmcZM zh*VGNcVXVtwXhrRG6#RE)a&Q4OT|}<=ZkL?FBRV|UM;>?yixqHc!LKidB`&=L6+<; zu`D@Q0^#FI97~8L;Wpv;@ThL*@GB+m;goP%ctChactkjZ$_@{s#)l_{r-qBd zbHWS4OTy*hQPiStd3SYqeRy-YCcG=WFZ@XOaQNx)v*E9VPlU%&-weML{%-he_($O9 z3)jOx3ttNVI{Z%f58>(zew<{-E+_`f^u1TWx2AvseE_Ovptv| z`yNesclkj1vGS4fv*qLE7s{u~FPG1jUn@VzUnsv>{>tET`5S|G%HJMbE64Hgmv5Fo zDu>HW!y#ZB&mimeK0C89E`C%?y^#bA|j6r6gFn$y8)jh~9saRxcV9Buq}gBY$I zcgm^0C&Qgx$*l}yMX};od{#0mot4d!u!>k^R0W}oRmD=W8d*Os?Jv_skV`qs%EMjBO9r%kx~5lDh~hSo<#nQ zs->#iRjXC^sy3=_^gOI0MM4x_k>JHg#cqYA;-JDWGAPnfK~#_xG)16-sfbc=6heNY zB1<7r6f5M48ih*HN^MnW6>uIivQIIjIH}0ucTz_c=M)o)i;Bp|X+>=0oZ`A-QE^Kl z;jbu6cy|@c+?AgDJ-_wvA_b9Yky(*>k)L)Gb7Q9(gPB*TFvq zjgOcg*?;8F5&I*qM<_@9kAxnHKEgYadL;Wu;gRwqwMUwdbROwHa{R~(N4|+%jr=k4 ze&i|YuaR4k22l(?+!^7FbZ*ocMVUsSqxMGi=nh1UQV&Jpq8y@JqCBFgQNB@uQK3;U zQ&~|lQRk`LsH7-iRAy9e)Em^oC|OiRR83Svlsc+CsynJbYAEVN)S0N4qNb?tP{*TQ zkGdH3cGOJN73v33*P{L%wHQTkCOUr^bvx?2sI{n{qaH;4HwqGM7;O@*@=}q^qb;JJ zjXoG{6a66-AN`^3KOWA}zmnXeDbcj(fas9u7O#ltO%HZ-d~{-TYP2XiC%PcIBzm4I zkFJick8Y0EM0Z8^MIVVCjy@fIHu{z5iRd?@<<1IcrL)Re?QGKfOs{3{pOgW-Fs~lHODQA_}lncuH+?&c}l63Qu|HwoV1L10W`E1R%l?VI!G6Rp>@)C$#h_w# z$5_Q!$JoU<#Smjmd7d#}QH?ykWBg+nF<~)LF>x{cnCiadnDm(J7*kJ2653M|QxwzT z)#KGdDvPO#QO3BE_Ii>?2RsjXHpU$8bF2@npXzgSf448%{c7JQeeb(3_I=d{^SIOZ znmfYd$G(le)|k#1UCiN_V==0FZGB(;Q2hk|Wc{g_(U_NG&d0nFGZphr%$1lAW9DN% zjky`~Rm@7v_c8Zk{u8qq^Lq?5);Ja!yFz^?_Iv8S*ymy~v9_`IsQ;ll#%@wwV}GZT zz(tr}Y)~vSHZnFgmKQ6CO^fyD&x*~9g?dS2OJgfzYh!Vq4xR!15CgkrQnOEUU^A~d zrMa%Tv$?PNX!A((OU>t--)x?4e!uxz^HTHA%?@g!I#`{iE>u^m+tl6a!|Gx63+i*~ zMfF!|Xv?ma{VfMuY+F29yjucVm@V8EQAw#8$t7|KxHMTXowX5}Ct(RNpTR&^P)%tDge_C;E?rouMg0_sd+_u`bf4ALi`?~F? zw%^;}8dJ?~&9fSe#$LnMq-wG>uW2r7-qFlzZfL&L+}Hf3F>beMr?yA7bJ}~_UunP4 z{#N_-_RrhDYd7h5rsJiK^BwPZT#YsY7HccCN^OVsl=fBaN80bT>)KznkF*J0!miRTMOQ;tYgbp-nXZ?+zU^A; zGVjK9J9X2$L%ZX<1>G6lx!twh?cKWWH@Yu%|GWEU_t)L4-4D8d?}qo7_PF$T_5}5W z_r&z@ds2I3Jyks|J=&iBp0S?Uo-ccT=z-|WbZ$DTE=0%CCFyc>QeC;OMyJsY>Q3lJ zb+70y=-$%J=&tKN*L|nEr~5^>rGxc`^|E_;y(zt!y+?ar>b=|hbMI#FAHC1@Vf%=E zetl(qs=l_q?!Mu^7y8ciz25iVK4|~0esur-{)7Ft{e*t+erA6w4s-ro_Zk~=jk#a(L+Wb`E3FV1P$5}6Ya^}dH{1*r>ynd$Z1;R1yG0Je)iO}Jb zCwRlJoyZ=ZIq~U}un{L%5g)2Son!>r?k(}~9ePB#y8PoF(TJic`N z)l+XAn>lsoMBeF=k^bT4ks~8HXI?+~>k093i({`G-#UsoX?^OGWAC4&9%G;R{N%GI z-yJDC?syV&tnui3M>~&VkH0WHeEf&w^GDwpe&y)JqYsB39``x9YuIx5{oyZ;E{^Ov zaq8r~GpH9RXYL#wJ8d&U8F}~gD~ZJ(Y8+>eSCi+fOB* z{QXq-am1M)PTo3JaPs&m_A&Ix566B#`PpzZL^0GjR88&}^7Ih9-{NNvtnkYRng^_S zJx#|4UKr>f`fR`|d3dOH;KiYdl%EC=ss9=xrdhX2hH4KNwaME)8Y&$4L33j$cj&vr zA(GW0VSdTbT>h_zmkWL#${ws8yw`NS1a{Oywje|Dkw<^(-h1?yrjG~RD`TrVs&I;f zM;&$PI+L1neB#kJj=X(jSvOqg&`0SD?h73XJQ{J7a})~R)ei%2EV;rd@WlR7r~ybN zf-ha@`Plv=agS5KgEytNWu|d@o!I}?N$h{!K+jV>xAW8ct%0>qW7}gNYbEw)gZGf0 zAw4dkx2n&>khV1*>up<)1>fY*w?I$3|A)r@h35XR1PVz9w!vGe;2EJI`AKU}+Dz|1 z4SSkD@xOgZ?|1wExcm1w8_WF-9Dk1MFy^pk%z4%v6d9pm&DciRktx*JScgebhA5&U zY!u~uC~9(OMn;UrDJG-XC_+Y!5JHV2hlq+0a?ba9-_QG5YYp1_^ZNZ>-+#WZd0p#z z=DOea`S{$=NitGBrf{M^y+%5U{c+I$W-iSY!)g3b$GE$Gzs!4N>O7C8OZ!yPkznnG~*3 zK4vXaS`B|a3!8|N4?}%Wt^zKBBgF5f_Xg~A+pCot>1OOF_$b&HrKqX4p3{YAB>nlK z6#4L!oV)O=YGq1gZiE<>c~1Bn!)>Z(p)SfGIDb@nMtKHOPURjPt5M6hmw>x43~loL z%s?4ua2qDuX`HHn?|_}z3WD8?V?`QM*qPhBQQJnl36xUxe&R0tNyKTiY%^zyG}>hx zcWq*Z+q2M`MR~P~{z0`!EsI=DztrabnH47Ln$l{9LAK`cXjk=PBXwtj@@>RB+7-x~ z*Sq@G7B@<|`lkp5_a7hPT%n~u(NBUD5s9_rIsZSX;o?@d{8nIG(DP-#N6tnriyKp9+ zk~QMIDO{$(@;T8nX_hc-tNSoZ(C~Ms-fpJB7-60({D@(VSavn0QVk4bPdOT!qW>Hp^nac7DsTho@*BkuM*IvQ?)dZPCq(cMBu zUJcj8B4d6w^B(L*{iJ%IqW|56!?;x%A-D^t`^Ny98>oED*01A@KMyH8lM;du-Gyy$8Rr6J z&=Yrj1wt@ekGa~xv-5Z-h>;4j)T#EKC=3Z2(RxcUG%#UE$=?uvlcv>xeHC-)UTEX%?agvY{p`YFxAuk z5s!M5N25-R*71F{GBVs~JTtAt%35}3vJd||IjK-!F#KQ+@U`Ow+vdxkPjn18Wq0w_h(9FpcVEk?Cj6g zPIfVU8M%rJYGrq7Rn@JH9GE@--Xe1Z$J<#7|0s+VGx#6K!CMcDZE;sIXrO;@O zJE+olVANLcpk8UFKhQpn_{~%pXIjB4sDMIifF|lly|*$`Cwp_Y2@WA}9GRt~+=e%y zdvuT9Ve~Zm&iuk8&V`xU8?ufb|6JjpxCfZ>ZJukU-?CPD5^p`C`~}L$4B@6&kGb() zN}AhxWHqhk(-^e_xiWn%@Q-c5qgeGkQW>A)S;SZ$HOe&ne^A&=w1=bqK4I>)xC`5J z$iXw*5l&;Eyv#bjRWZxQ)C1!&<&aV#{llzPnt2uJMX|=D98!8a;2hIv2TlArTrbYT zsht=ufjyjC|92O*@b@F?zqBSaQeyh0na)^A8-C6C&TtRZj_GSm;SJGBpB2B9#)qdRn(fytH^YxvW^U|jnM$0;s0ZVG z-^?ZL#~2p$OQl2Q99Rt*|5MGIc{S7VizndEj6L8xFkYDJC(}Rq>dWQ-1X`~ViWzDT zuP!~L){*MtU6+k9BT-*9e<@`>Q7dLh6vqqx_G7j(GrX~U24J>cci|O(ea`Y91@}fX z7k`(pKs{D3H8X}li=lRD=4djnR?Rx0Tm;D^*vY9~fODn)Z%`@4M34;n{<(?j{g<06;`J;k^C4W5h4@v2c~iL6P@ zvSPEypIIYD4>s$`ET5WqJLXS$Rj$Gbb0=t0Wz)&BakM?ln`Im|$uqS{6CWrtwB5F0 zna0tEq78+{(OQ2fPQMSk-3<9)-Y=?Q_gdjl_R-pJSDLklQ*ck0RuP6>r&?yb71p+S zhE`#nmw8(L9J#YKF@03jGLM#InLdtaXW8zE_8T9awwbOyiWg6K&PAa-P-GrWoV9pD z(@fG9Pgp#myExMP;dLoq&prwZ*H17~uztdNwkye7Wi!&Zz+W!ErrZHdh+NoQ>{ z1qJ?)_xn@zR-Rd=yZuM)B4%ek=c1Z9hxce0;eG5cwHifcctH{K0Q`!tZytUrS3jQ#voR z!fK>+Ugjn)wHyBQ&CEK(HGLt=%(-kg{m%5~?K^)QH#1GwVt*VCzg>fRrt5lt>fiOJ zYD3;WPC;FNKECw3-qXY^wPl57+1GDkmXOC^evABRsq6RqtY16h*J|XQMd?x<)yVse z%lWs=vzZ@ek#^Xh(yjjbaNcXCKGJTMeT=^}F8Sk_?N3XFKOgJ;@rKqnL;3Dqv$hWV zT{{*%R%Fyi$D$H$*^l{;N+y(WyT6iUw$5KsGe%1s>~DX%KYfj}%(6P;kL_cBY*+p5 z^lIi2Zn0N0-{GS}{v5?MG1I)wpSLi-cG0hOFIqm^=&SGeLw?5}a(crpHY0DJ`&00b zEVBmZ`n8+>cpLb&<$f)}U*gIBcK?>&b&EeOU(Pm1LZ`pwEN*D#L-nV=mj5WqZx`Lg zv^!|~h1=u<#b#|C@wbSMg=QRO{?Ychzh$rR+s*Z-Z--y|)}Oaob4uq-DWX#!ap8o86Y?<9aq6Dn`PJRYv(X*y`M~4$cJZF{{_2~Mch+6y zzU-OeY2nNBbn~3`{q7Bsp7QqejPw2JyY8FjS?rGX{Kuo@MM=wxRu_F)c&R9&$Xax0 z)|pvn3Mal>_-@@fcvV{AV};G;G%e~_Y?WrpQ{}hi8m?J#qH7MGe{HGPQ}-*sM68Nv z?r9|7CFNR2;Gw0(F?(Zj;~IqJ$7hF4igzZYC0tL4PAm>fODt6{Xaf?*S<`Lt;jNtI z&c)WtPOt5PJWs=0GgDW}(GmHIO$v^qw#(rPm111gW6pGup6aTB_w=uK&(aQh8Y=^} z1ibb5xV+yxS&x$XhgQX$jHw8n5qmiHSnS!*K4AmG`Y6#!&ZLuJ+mq&5$E9{ji)|nmb|T z1e;g!e&N|VVSVAJ6Lw9oN!z1yZM&6Ry-cnOuZ*apJ}gy4S4AI=J{j!{O$!~SEs=Ar z1u+|AMuk>{=3Aw(F7Zd?KJn%84%^xI%keW3DieyrW+cWaD-$PKE5pu)l_>k%wVk~q zW+>j|F1BvT`N`{){>hV)%jE0HGs26)9VtahpOnEVwUkLIMJY{`?I|0rol-A{50bRB zQsq>{B)w6DPs)y{l5^C(noXJ%lO9(bHbdI$lu~Rdr?CDW5n3Et8d2kK%GG*HxmZx| zRO2tY{&W?i%wt?{%X4I-4qCbn%7b0M$k$wvQax9;E7#T8^`L9GYll3^wZT>5TIyOW zPjywePPxvxLNY_78mP4ea$DCHd7A4J*H+i7u4KiI8ebuIbrre}y7bIC$_ZCOrd7Jn z)!VgC&Ucl&7P{<;Cgr(WDh)GNxl}19HZ)>;sxHk-U6v{-+aq>G=+ds#VfrXrRm7>( zu)oPws;i#Mf)%# zjLli4>C)o(mGQk2`y|@%hUc7w0^D?P*)0z*Lhv^G5+zLOt4!5e+L|d8-)^~sr-N;WHCm#6Y~pN95U_H}SszO=_%^fcMZl@$U28@<4U1$BM67G*&NaJCqW+ zL~-EhdR#sAwTNr4pYcTNVNwrezdByMp^WrQ)pjdmJ#+MHo_Fy^^f0xCv|pX2?3XUe zbKNDLSiGgbv3^7us6?Vvc6)ZkoKs5XG*%B<=ctplCE9qkp*r4{ps#i>i6}$Kubl9O z#~2F&d1>kD6`P3BX^D5e`-;1v(hn&gqHI+gE4}b-07`Xx{i3J2XSck^yH*{d+Z~hj zGWApGGbtSD?B~hwEYMbYH+e_f7I|tZk9(F$vuwj7O7sYPkz~KTTU+lw;$E+8M(Li5 zi1E=m(hzN{T&9NLnsGfv*NO|vw7!UCzjj>iV7u$KQZ~z&`sgR3j~XRiF8cUF^w>Je zD$!@{N=oKY*9zsdTuW*c+RmC2+AC(1=8Vm^4vXz?9Ti&~TONBown5xQwNu!E_yJ+# ztOeG=Nukab;kn7n{b?NvE1vo~rf#uYr?n<5Y74C&nErnXv zR@qXm=Y>nZ;R_NM<>3nTix|AoV6F0&XRW8Zr-gh4Y3dU)&(c3+K*->bQp>OqtJJBc zw`P}``8B%Lyl$z$TjTeJRD~P}(WL`Xhog=~owb~d(xmNCr!2do_C{Hx(C8WR6uCfl zL>FOCaAVDinw2%T*W6W8!#7IOYh182s9}{xgp3Lq7t&3e6fz~GAS6N>>=@=4;TYu@ z=a}SZpf%F6v?)rq)I>xPH6#V z>9(Hr@>)-4#ey%@lqs@$pL87UMwg__^vsLOqnTqcM&D_!4Ux_xfuNh zL!Tp4|7ldM=4hR9Ynz}s=1yZKg<8E`2U2Rb?qB4CuG{DRDxUReRHRvdg?qJ|W`1+t zkC14t>WbN^7&BQyW=dv@%oj2TWqyWIdo;5$Gf4`K$&I0zK1Q7q`jxxBceiy|#B5J{ z+a~2AMh&N}#Irx5gHoO})YB^2o3bW+UHGn)y{Lu#a((Z9<)*tt9;npBe^e`v>-7{5 zMu2njNacohL~f>s;5#82zP-^F&+$#tN-iN-&z@z5nV~h1MstG^?~q z$;&L0FJf$YUYY9FF`h(v$~-d_9Xp1-ZF4jYJ*u(ys@xTObW7yrUQPPSJ=1eUDa0=A zdZmNM0e%zXc;BoVct1&Nb+mHDeOx^vcTkTg>*d|@5WVLAv5x+`-B<3;nYBG>(zHxX znv$57yfPvu?QXI5XsDnJC39UiQ(K{0T~(Rp>g;*7y;R%twnDXK*S09MQd^?XY&J)u z)!Jl?=y;QO=EzK4S|RU{mtuWFD~PFbHs+HM#P%Ro9Y0^H3@5%@mMkR zcC~dq9-&FJiaF&vo@GOCNENNJ+?A3^y-bl3GS8v4--nTQ6~f;lZ$=o@wklkAqyM2U z<%XHPRZXJR!Q)w#nHI@dbJufG54EA}6VcOJDpOs{GkwaSJFZHtQhD65xWVx`&e|yz z+R4-+savSmIxi+aw3~HZ%&C~OF_)FlSj{#C?@>>SEe_3&T^yPlyE3$wb&5)FQLl*I z6}va~a;y{=9oH(ZQ(T|80dWONQQW*ZN7&-H!*SQ+LgVA(2gJ{d-xx0?XbGVS(FySh z=?N_orfBUFIwg1$x+E-4C{LIa)+n(+>y$XkT97yo>)XAF=}K+evBW76mlLI=(4q>B~OZuOwj8WwZZ7-bb)bq~Iaqc&5Y z#fs~Sd!~|ruN&3!b-~>jU%9K$+gd9n9$6WJuaNAQXJKsxAnl z`hrifO0*845tr5?)Q5}FSCbX$!{$h@N#;6{`n9o&#`k-~ni4tkpRZCsP31K=zLO*7 zI(!8IJyMg*-W-eZvktyVwhQ0)nyJiGPe;tbdhMF$EvysgVT>u0X?@W|IWFtC2BP8X zX|$G(!gZ7-@)68@b-dHv7H~tn5lZ)jKrO@ld&6zTg(dP9Wu!V)-=Rj~o~Yg)8sF>V zD`yF|pFFF)&9F{hrS#BaY%zL!@AFC*yhZBo&Uww1QD7Df!CYPswKiH0Q_j2lD*H8> zzv?6Q{puC>Ih5jep4Q4N)MsOSzib4qhp0YU7aW&<$M>_gXqTiCrLo>uIjvpuJSWjA zs<~&N80kA;jYKU=$K6!ty#J7=x*xJ(1&3Ck;mb`IBidqZYQeYTPD-=XzWO<-3tGq= zwWT*p8mKiz{nJ?recSGavKwVY=Mh+Us5CdNM=7pF3DNrcihGVST!~SdDeb)-a0XBF z5w+8)7#APRlx<7h2esXDsMHEG!d&-wy@P%g-`l#PMB3Iz$c{&`)~kn=a2s#3x>cTu zR(4LlqIN*K+Gci8n|klXYVcrYZL~dFHJ2%;QTikC-mWX^0?e(iNp^jQGG6MdUz9hg z9rP<`V;z)+YMf^zX2g#8KGgd-Ls+ZUQfo?UBX+0{$WdaJULx=I+$AkhWpxiqqop_> z+vh&-j#O8;kIQvbya()-Jqu&U;`Z9Be%@!UVQjbUG(@9yx5c_DA9GEKYbwr)sGrbz zHLXVO&NSww^h}y_5)?W+I4AeToWBg;G76RMLR;PJj`VEuCP?Ge5(RnGX?>ueZPZe& zXtA~Q$CdqfSC>PQbq%$&!&^t6ilZSIX$Go~d+az<94?K(m&WY!Tb>fU2kf9mEpLIZ zF;>+xai;jJREY0uwZtsX*rNbT*p=Glt4AJ;c2 zxLU8x!a2)6cNuDOiG13fE(#HZuG*8?HS;R=#BSfQ`d=+kMX#f?Gg<{cn0YU) z8WEnIOJ|nY`*C1=&35TxWs->9INFQ5wZ&7Z*TcS$gZDIyQZh&DLhS6&YFy9!6RWQq zm|r@mbCjm|GMz(`Vg_inLp7|Z`^VHyEK0nroeC?`TBMAy&Cqvgxnc}Gr!>TVz(p-V zm2Exr{n`RIofl%4Kp%v!Ykh<-UfHlWQKrzEd_8KpBx0XCgwts5V4Ay#cS^a#b*J4v z6|>V(mxQu$U{zO)bzCa;D%PTv*27uMRIKPuWBgx$eXCcowkveedao_!GDSLvb7%$Y zyb4zYdSe}LhUcbxg-_R4s0r8~S&DlL&Z9*)!^|2Y*1)&!OFn$Z@(tc`2+Rm~9#j5% z>ojVD*1R<5p1?eN3Nvj&X2Z+`Ws}+zUlQEmEt9v(Ta_JZV|*-Zy4&NCReUeAurYdn zm=vZD(I)GyZ9}DJiideawO73kEzMrrUaCiH2dWBx8JGFFs z1N(Npkv+?vZQrHSn-cfxReB5i0sR^8Vf_(bD|?jpnBK{kW6$%Q)Z5ul>1Xu|dN<$e z-u~Xp`b*yHdQYEZiTCE(`}j0Vino*9W=YpVEnfQzK8IznFWU05FWxfB=d^UOr&+q$ z^X6Q`pQTB2629`3zZ|#$mZOg(}^m>I}(6Upo+EKL> zt5l$B@wS8!*3zWKNvELZN34voO2?wt#Li1N>D*{dPxYqhk~hW{zdb%Qbr)K#Bepyd z-*t+~4Ufc^TQ|Fp;A}9$7lVB^+S^--XLA;~SBPD>CW@@r!N|WvKB%5{_w!II$?!yC z{V`H0^Z2~OalN2_(PXs^zIeJ-eOvX}R$s+r#ty~fn6L8 zMdotsDH!YCL72@q<1Di`HdAO{X3QPV@h-$f+)_5Tjs>w8`=9YX;*0Wj^5yxc?{xF^ z_rB!q>5KRF@uhf;zVd=^ulWkZN79_o`^u-A$I(=|9`>$Y6ldYIQx$`qDHZ!wv=gsjM{5rL`^rr#eC(`XUp))oe+|K2 zT4Q}IcFir)NUU3vu~xjHtdhep4m89Lc%)~M=ZZqR^I_QUUf}MGJ@_;!Ewm`6IHs4i zG%#N(#VMC@#+sE{o|>E1 zLjB+4Mh!7*JeWy)Sz5Sp1&j7X!ZA`G^mI^ZZ#x0wc&v0zYi66HkF@#p_WJGX%sM!~ z+^1|&sSjUqPxfFBQJll{FFI${wc%J9e(Ift^FrDw->nYB_!on<+j)0A5oV-qE&B0p z%oAPkO~^=$1ZB!(i~9-7=Pd7gGXWu108JXX@;Y;o)2_Qsuxi;iCt-zdS6*e+>rk``W- z6zy!`9OsZ z$Aw!ZZ)hiLm)ONlZ}>**ILtojD1-ji5wT~(D#9(&_2_oi!LfVe$0elU+E;XJQLHn( zTZ%;*6}l|$RAP(pmC7=l$#n~@l9ws@xF%MPy`{rRSvVUVY|V+2!rH|RjyR>HVRoBj zbvhU08r~^fFC7)PJ$#)NyX%Ps)=?>IG>fz`x=~Cw>j=6=iu84g#p}GSr>wh@b$m7Q zf|{SyKfEg0hFZSq-lX)^SE(Iw2D=qI;B{=P)FoO6eI~9C#Ca0*T6z=D7VMO?^$f9f zw!H)kZ)~@?3-OMGQwe7iw8UkJ4re=?LycC~B`?z)sRzQN|4$=c9(Mm6(lGC<-f`a7 zy#?MW__Fvr_=@;^?=*aKdy-{}<*vMRTw%XcI|v@Jd%HSe7G9zzr~`3!)!kDE??}EE zeUYwkr+D_OF}OlS=SFpK#XS2Wu7ItuX|-eRf02dj(S0AkeHp=BC%CsyTsD4QP%PLCN)2Cx4JBB zxYABpoOm+vI%+!%XO%rG1TkoxO!+qrJjjY0uTBI0_sy97T>|$2>==qm^Z`W0|Aekz-lu zSmRjd*lyqG*k#{qZ)d4+R5}jWw>zfz4%>4ryBx>tC+(dqdmX3jRgMFW!;Z7|V~&%K zQ;rMvvyKan%MP#Qx5 zSG`YBuMEd-Ykluh-$j|`*iGta+fZC#Te#(QJ86p^-qx8hnWIwz}Us9_P%o z9$De0>&d$3A*{+zyJ^*3BA<6}!IjQ3xi!X<5NVcj$xH8xpBga+U$7tRIq#cgQzW_* zARK4l)3GyFhMihkPZ>L%9k33kwNtnxtHafAr4CrJKcqKSZ^$v&;Ve=Qk%zvqtA-sXx!jn^&2mCoN33;*q1hUtc@KI zBYmrQr`uTP2lw;NcW4{`mlE2CD_Z}*mlB=tS1+fLx1E>J^{>aX=-ebi%8uC{nie-D zu7&Novr+Qk@M0||Ww6pKWnRQFZB2wt^2WDwdYxUI^W?$KWzOQ%SZRA`qd1$bTS9(9 zpRiF0S&6xc-4eHljYx_QU*}wg*CXu>&%xJo^HVoQ6zD1cf0aQJR`7`~y8d>bxGSkG z_MzxJZ39+4uVVMOs5AY9#}{b%Z-(=y|wJM97dx3MWry8W8H zF%E==yyNW_=?KY>EcW(_j1GwpneTOmO!K9M7^{TZAqAEhmM-{$#L380k!K_GLoP&K zj=Ub(D@2OYqN?AaV2cWkT5PF)Pr)*aBPu#7J}N=#71bxIf7C|HfT+Py!=frIBcduT z#vKgXEu*5wMeVZewLDpTI3#c(9-na#un%GaK9Rs@dbO4`NrjThgqPvbJ zN0iCE#hFE>FC6C;R%x<2OFe=68Y0y>Sjo4>dEP#s?pcLi7(A*b+_sw*xYk57t#QS_ z`h9*6R11OH5cT5DceqdM_P%D^8xc77ztdP`v^W}tf_v9UWr23uXUBa(7O7Q|7b~4c zDFbZBG!-MxMb8y0U5%%m{mClMki0ZTH?(Eqo}XB8#x@!|olDd(+mp7VxEr9EJ_lD+ zO60BDFIY_)bHjR>Mr*s&)thYl&D%q7sJ@MRp`6l#7@LDj%)I9!M6zPUH%4x%+ku{3 ziJsNTiCJf%-%favEGMQI&uHbu9IipXS<&>HEq+^w-&W$co%rn}enYKf;}yr<#BVF1 zl;i1^oR~?G^t(oc-$3YnMJ#hCkZ$}oilXBj@jFV`4->K15g`~hue!))mH4d^Hl-n? z`~y!h<-~Loehtf9k%oL>>D9mN|EwYLfI%ns}RRU!mp7A zBjhaMdRT;`3tuxt2!+DlNQ3bkDr{46USYH;3X#BnDP zOS&kfa-p;kX)E?p2u2;P5jL%a-bwr#rB^CavQm^!zR;b*vbzXBTf|#iq`^p4BVjpT zgls4)MT`aF*CFi7MVJd+6njGvPCF6iGNCUPAxskXMt^J|T-S-%2Mb@nh!)a9gf>Ey z&phGFF3P{Q&?|&}v9MoegeiVQGAZ8EB7}p&)hR+SMjlG@yqI(mf>F!0ML0#mZv*k$ zNVw*U@noq8VWUW)Q6sIy@i>u^0%4ymlosN*T-c|GG;A07tq{7AqbiZ>E~0hiig@FN zYk{!L5}}O~HjRY7M%WnT>=dc;3f)lp2wz4zrwCu;MXFATyxWBRV3GGeA}#EA@D79j***#2uaMvEO)F%>P|+1~e1* zDO~eB;A^6s_npJjoOHd1zM=KJ6p1@kT1pGB|1sM`Z;rU>i}7i=LPhV$;d>la8}>;e zJ->NR`zGg|#~R{sPc-gsyAO9jw8weX7HyG-_GsfgOO&m?GdOSR;OXeC;R#deyHs{* zf!bL5w?tpXqP0pB+g4nA?%{n>X|4CLWq6LrSA1(d$+|9G@~-#obMNue-5^eF8LnYD zkSDqiWUIObZ=rFDdw|z!bPsn|>=2fDT1oWfu2tR@xI4P3x5U#1clpvCZ3A(a$xdHG zU#9Pn_+FL`_c4^rc|)Qvb(=&s_|(jmCNrdsV(6irx3HGzt67OSI?p=demElj$8TKHN=5XX1x(Z7&2@ zLUr{itXB>yYn8{bi#|{pjlJ#_zE8aozQ=9#ajv?+cSODE9-6lacMy!kT`H@wyK2Wh zG*@u8O7Hridk;czr7cW6?YrFDJCC0C9ho;rTd%cL>r4Ie=uU!A?Mb|s#44@8yP;Yu zGJba}=Wv%GeZNf=t~;PvU2o&5A^IJU7EAxjNbTF`Q{!bTt`}Hcq>~L<7_O$Z3XK%Q zm+6-jvQ>nushYk`+fU*@kGHz4xSDL(n;eLTLYLuc`XIYtD^1nNax_YmT&bkYlu>ybsSO<6 z9ww#Ms4dgqtu|)ao9@B+FzReP_Ar8L`R`&4*qBE~*n#vJIigU5^I_IE+0n7ls*Dz7 zr1sV{2h#X=r5T9X2+{oCjO*5L%{-aq6`bbkegbg^*N<5jft23bk^;F4*i=tjaPDvI zQ-Sij)pu}u%yKtcP;Z>8Q#h0-BX;_aG$WV6K8+S<)U?@m$;$8%d}OBV)=~-X{kPhf zwG^C+fd4@HsO|%;--z94{bq<}I)m%a4BadlGvweB543Iysd|jT^=SGHgcTff^|ndj zo9%{NC~X0MM(WLU2I3E{WwWHsa186<5}@=@f4Gw`v$m-ojo1PyGQ$Y8dm|s!N6PBq znqipXnrSym>sFPl10^5GpJ^9pU1nNHF;Wp|%>k=GTFiLOFz;kty`+p>8d@Mk^MA8+ z12F_r60olBYSfH5YneF+4v|_>Ae=j=Ah>0j?anN-;J#_Ly6UMh+Lmc=aaZVCQpa zLP5fUgtZAf680yYPPmp3k(ioTKe1(E2keFRPaKo@ChnF0D6t}OXX4SsKNDYgkN$j% zhA)bqJ7!_@+%@lSdw<>hb@LC;e{j(r@E*Z+=YBBvNNLN3Ef=;aZBu$_zAWV@e7~^z z@9BgS^Zu6-@TEyZ6GDP29PldI+Rwh^tmoNK%`m?-$Nl^z0n< zyL$AGyis%(+O|F#WL6MuS)d)JfSRuwdqR!DiXh6_>n&? zlrx9Fe2uhFnN}~+QFG|eOyi!?y6-(ZXHRL;dpYmf-di@mUa1*tK5FGngnwe5ty)fG zq#%%s(+QL^Dita-6}f7YG%t~IA5~&#xPuiTQRxNJEcDp1CO+}vKufm#Xn z`F}q)>aqjZ<%xNhkX~wsr;&0>UvNlfZFWNmklUX5WE+x1C4ORFAeDhMQH@rhEXd7B zdq@(68OR5P8G_O=!nlN*3zP`ColeN-@E;4R)j$k^lA_jVmU*CjgVP_&?SOI@lJviN zm(eCREmYAK)c4f)s6Egz@ya|F3wwcbQ+kV>z5+2I~L>BQ=rH>DPj z-y=)SrO(Gmhh^zuWy=^TO_BZ~wU$2k;7c42nIq+s?T%MqtIh31wmaB%SCH*DI3CEh zB|C54y!qX=7+HEus)8-~Crzp%t+{kiXb&roC?9?UL+sD}Ui6GljVJ{x3v zo$|J3De~J~dLFh^<|*Gp%m4UE(q3ZinFG*@{>mY3C~Mj;(5|QNBy9w1HA$0R-9*}G z)-p-UiBBPI0&A^F8&UQrX>YLhlnC#o-$^TAtv6{W|M(YaGg%u%+TpxLq`k}92+|s; ze~>npwYj7XJ64ahQr3=;He&Z|(w4CHC*>`Bk?{K=Yrm7-g}zl}_c3ewuh6bfR!LjK zS`2A@{=^{mCJF0l3kX{~;4OxhLJekN^QI%d!2(qF8dCQaLECruq^v@7j5^7}4!08pF#j%!k5L(ewZAf#n)|%|H>WKDSi?vRq z<>!ku-^1EO(k8vXjQrMT?RC;@bB>YLh_zXym2cZkS`*evgywsLwEJ0GL|TIu-;wqJ zYoC!;Fh;b49M&REL0kOiHL`2ZT5ZxQ{t#vGFV>!;yiNJ)O|tW__9EH!QD%_Vg|$M` z8W{cKN!B)!c6OL(FFjfNp0sxN&LY3hvUZ5H(q$E-^=IueX+;wUkv5Pu{WP>04fc}u zZ`R^TOD_}Ydxf=B(v~f|i|j_R_8@6%UKjm*JZmE5p1khY1nZDe=hE769& zV6BR@@_!1y+gLk8n)g3F$?q=KYMg<#c>PPH?PD#0wCimjC+&OI8j&`sh8V*Rv6ewv z@rl)BcZ{|6q{S~1ZQ~c#yriwUltgyFv(}9?$Fp5YJI~r7%G->Bo1|T4?G>`?Gx$r= zZm>4^EVS~!nv#Y`>%^S$Drsjsxk$qeOG5jGw5-G~q=m9}lC(ZOYLOPnn&TX_bcdLa zVp+R~vr1!=>6%_qNUtmTq6sgW3S>af;}v?58waW8AXQQrEjxkP?5SbLr9 ziqAhlS{7?>lXf6(5oyg>Dz*hM_Qx%9wDsn)Su8!p8Jcm>8vd!t=kRJ){0o$Kx>uC z-{Z+{4r`xKeh+`;CT%`zo5}C?EHNJ~V(l1d!$xi)yJf6hA}#9}&ia~5D_D!T1TDYS z$E5v-wYy2nseO^OPg#47vU(iY0%bN2LG^xKr+J4rilijXfVvY18YimhsQPqs>eq!y>E6`Rpjw0c=UJDuCtbK6Y|c)nKhR$pVRyaHgQV4Ctq*AzUb{lteXNZlEq=3T8=0(qL|V~hF-K*ywx2Y| zlVUt=$=YGkCMlvFJjmKk%3I}$w<(Ucto=!LeOfdiEtj>wNE>!}2x*;Ji@O1>{Gr*T z<+1j}Uu1W`n4`L~wwbirZ-{kWK5K7aJul7pLyS4SSvy8)sfb-h;XTLNP115cbddHU zYY~T`ZC@zHjlry?lGf;IBeEOL+WVvp@QJnPtE?R)EiGE)Z7gf`etv^A+>Tsy_uangzg9ilkSv9^rzc6gIW-=D1M z$0)pKpCh|#tldRgg-0SynrQU>M@T!_dNOG`Ym-Q;taz2Q5Y`rxRy3|HX%Vbdkap~) z2-2ciJ4o8R?PAT4z}i*Pu8+M+b}6hiKMu{gQ?%2&S@V&0c957C(pmeG^0s}2IEQV> z+Dl}o4HI*Zi?xxY9cVAwb5qtnB(2+P>nYwAtW}ZLVp;-etyv5C8QS2bBD{xLyN9&m z3-^%SqpWoxEvL)tq;+DgH))|mI+NyOZ6s;K`iZ{(1Z&etJ6WR!*>z{_Cgp9{&lgDR z#o7mCcikz{j5Nnr7TeIMC(uT37pMW;*Q8E6FWbGc( zvSY)^ZVYQpNUP|0nzV_mJxp5q{bJ2Eg*6{(7yf-e*}ctLKhpM=KTO&?tT_&l_Km3D z*{n?^yN&mXb})~%V$v>e_=fy0VC@sqM!hHI!4Fvbk~Hs=Ub0)x+9}c;mMqd%vUZ8I zPG^RawwARTC!wuN6YJB@Sj#3Ydg&izx0$tnlBV?+X{lr_m$Yt8v&n7;Yb_~n#eaTJ z+BdA_k==lvGf4Z6wbw|?zE`Y$4zTtvX{U8x}?x-4CnBw3SZDKbT*^77kb&puUsV`kPpkpH3 zSlOx^!!uN;l(WhO6%d5An*9x3N3qvi4P zWSQP{L+|OFgSS~Mke^VthU4us@(Ots-cGPy-Xw3qy}wT>JMeV%K6yW$5jcXofq#)t z%je{tcmu{2`Gzbjx?)$tlt|n;oS;0TB;(1kI(RcjLp+b!1W$FgR9Y*~;r&4EaX(UL z#fSTKo>Y3^3C_OQZyqof`>(*uz-z!bU^4I~FdZlY<^c17MZhv(1@Ir>Q(z;o1^5cs z3G4;-13v;k0Vjdez#qUR;5s0WlhQ0e4Zs1!0Es{qZ zfUZD3&>MITco7&33H-ab#=t*-=0GdpA>a|9Bj5!d2c80+2KoTc11|wX zff2xHU;^+4PyoyX-Ua3YrN9#4L*Qdz4X_^g9QYF04(tZL1%3by1IK}1fiu7b;0o{; zpiaa~6@V}x3Wx)oKrP@NpgzzDXad|1JOJbX?SX#*9-s^GB+wIh7U&NQ1pW=Y0*nI2 z1Fr*b0W*MEz^z+#{b_y|}HtOGUyUjW;HUBEuzd*Bdo4EP239XJnM25tb#Bq_}b znAf80I5w}Fbli_I{P4t2XuKXU*|#yzF)kTuGPE(Te@yQnp8>} z_Wy)tT&sB%{>B1yO=UbdQfer*lR8OVr5@6A(yO>f@Ga>b={;$gv{w2;`cAs8XzJE6 z7z2QxfpdV0{vHmb0QG<@pe4`_@BmK%eS!W6e<&~+s4Hy>PgU>2yEj%j($)IveQIMh zOKqy&ul^j~QaushN*x~AMtxXa6)ij3tGQ}N)vbm(d}LzAA7}+U z1Uv$C1l+)5KsTTV@GQ_D7zhjoh6Aqxqk##)>i|w#q_@D+fkI$5Fc)|qSOhEumIEIH ztAS5}4ZvpLOJEzY6W9ZM2mAmW0)7Hc0KWlefb+m5;2LlfP?tyrR-gtD0n`NIfFvLl zxErVo)CV$vOrR;y9C!d|1GEJm1v&yA;4z>p&>eUhcoygfya)^eh61kuuK{C$iNG7c zTflUn5SR_j1>Of10ZW19z{kL9;8S1&uo?Ig*aqwb_5j}jKLCe-pMVp;(1z z-vK`Whk&1e6Tol48Q?r{3AhH_1k|O-KTrdR0BQnpKoXD&+zr$P>H`@-CeRdU4m<#~ z0onqO0v!Pl@EFh)=ngy$JPY&#UIYdKLxER-*MPCWMBokJEnqrO2+RiN0`CKhfTh54 z;A3Dl@F}nX*bICLYy)-zdw}nNAAm!^PrwP_H{c9#9=HTt18xH9GUOkq0Ym^bfjA%u zNCoZ&>H_tF3?LI|3N!~E0NMa;fk%Ok0AANt@EFh)=ngy$JPY&#UIYdKLxER-*MPCW zMBokJEnqrO2+RiN0`CKhfTh54;A3Dl@F}nX*bICLYy)-zdw}nNAAm!^PrwP_H{c9# z9=HTt18xFp8S)R*03v{zKpc<+qyl#Xb%FXo29OCf1)2j70BwM_zzWPCkAnXNbOyY@ zW55%@lR!T3H1G`27w8YX2)qOg0fqsu0Ive0fpNe@;B{asPykE^-T`I-#lT!(KCl2- z3@imc1Xchmfz`k#z`=MZgC@8Bh*<4EzUJ3#TdNZ93KTv;^rnD+EJ*#Lw~g#Z3y@QSoR6Z1NZij z`=7#Mw^|NuJ+KG(9w^bP`=5Hhl<)ZzeFHcSRN;R!&R_BWQ|r+FzeE|}ogiZ>4G!Ci zvcPjB`_*fzqS>_=ZDP{rZ(tn^>;%384gtr2p8?~0S|5DiE|l`0gkM>ztDT2VoWE7- zMBJOX5A*ZPFEI~gewq0-<}u*l@F#NkHKrKhzb@=Dw5hDu6nchM!2idw-Eg91xkNy?aONJK0dJj%_82{g!?HsT(!=d`E$?pBw zJywKMS4-gVoa{b?-Ba29F6O$-_cCWNXE8TpZo&M3;0*0S4)+ZX_aSy~$NVUBCuSdW z7v?9KdxFjUJcs-|%i+%DaQm^{3(SLY9daE3OC!}*xQd4t{G1e@`_4I538 z@~J<3%62o@u8_HyxrDitc?t6}=H-Gjw2wI6-5lO3)<0qWJJ#2;zm3eBnZID(%Di20 zhPIpipJ4xc*?m9r0p>%@N12Z^pJYDGe3tn<^PhqG-=BCW|Gq+@J#rzQSBg`F`-ON7bCz!hn z&d_>s{5LuNXW6|!^NY+cF%M;anfW#5ae_0ni5yUeyqEbq<^#-! zn2&=F7}C1ZQZ{4x@eb5dJbWmH+R};aGMU?Xm`QxZn&e zlI>n(yJ&WgV|KD#D%%ZbySv!EF1z2$?xWegA-lW4X8x#OH(|TUY?sY;&6!)>V&8`C zXR>`;wtIxRBeR>?$J|A5hV~@;U&Q|NS?|qy8S8!6Uq9vnY&V4MR8}rx9dzimv{(<>N<|E8MGylf?yWkA%9H-a%meHRtu=^$E>&!Qqm9KgH zWDa2t6O8Xme{Hn$Bn~eIx>@e=a62a({kj&rC$aw&=DV5Gnd>t*Vs65m&D@gtLFTs1 zk1%&&?!@e2?!x>eb3XIaU^BgakX~~f>cHvk$969;4-B#&4Etf6|Hs+>6}B5CI71uD z?oYG(1a_ayJcao!<{5%Bv_kebkp0bO_xG4fm`j-#F@M0koOvblYUWRvH!y$ByhU(^ zR>|?cCF0G{w(ak^?17~{-;SYOL}UDnsJzYWZvGjCz8 z6r7>$V1G^6-!69F!|va*drP>R<-8x-0oGfyzeDWrDDw&CUztxcpJhJJ{3r7@=D(Qb zT}HdqnC;Br%#qBo%n8gX%(a+nGuLIlm$@O>%n!}iu3bhu9K!i&!glvFKfs*B+@3j? zxg)ci*~i?4xhr!%^V7`FF!yDCfq4+~znO>X zyUcT$OPLoje;_zRTh8IH7vZD*@&B7RzEy1h3G)W__c_~bW4kTT&GN2<+ctLJ&F){b zzdfw)XZ>3a_Xp;~%s(;z%={bk@66|zFEC#coS|Li@XvAhf3dr~+h}hV!5Nx;x6vN1 zv0WIuM={4R$1^7}r!e2md=GOy<_64-nX{OiF}GlTKyZeZ!|6zV+vx9Y+5Hi)S)LtW zgBwT1K206A>lEZZ2JPF!;WT9TJPxNT^Ha<{n4e+p%iLdZhV~+d)0)G1iQR{=`!IHI z&+e~4H`Dn9((x+0cVzc*?0+Kj>&#P`3z(-1&d}ar|2^1$F}u%Yp3ioR*sdSjeZcNz z?EVqE4`TN(2j4;GxE4drmoa5yis{u=8SSs%mx#)E|7yKiLo&CHd|JD9&= z-X|FQNbJ8U`#-?$hnSBtA7?(ve46Y+nX@GvAY-P2}_T6&&sxY`2=jeG~po`{{6Nts3*odbTfQ z`^{|sF2_5UdA{HbZ2{ZuV7tZazLdF~c@^^~%H#kI9Y(qlZXl=DewT_xcdra#W)>V7EMt3be{%LK3 z{aLM__M$dO8>-E!@rsrm@|reQo2U&6dqaCmo30gVv$eTeeeHd1XxJicskU7EG3;Y) zwRYK3R%4s>Q*DE`S^HAkrtQ@BXy0i+XqRn=w4byS+Hcw!?YwqLyQbaL6y2hS=;3;l z9;+wnDfnha9lf63P;aa^(VOX?|bNUPV zOZva{m-ScmG5Q4kb^T3!n*NTSVtZGAPoJ+Z)IZR3wGZ`=^tK`Y(Ld2Y(?8e0(7)2Z z*1yre)xXz&)Q{@xYy7PLs?QDkUH?P>Q@^VJr7Meb>cPD`4l zwk0tv-O|9)$dYBrwzROcvgBCWS#m9%EM7|&OE*itaQuc+E;EmhPOTkQn3wNg>F z6&2J@#ZFM6c15VYMeIAVQ&q7ORlm#+8mIm|-SP_sCur^?0Kv&O}fQq*50lx+84fs9aaKN#EQvv4! zE(Kf-xEb()t&sapz`cNn0Z#*71iT8cSgls4HP9Mr^;q**^IMxa3R#O<-?Ub9zRgSh z-nUk?eqjC3TGRTmwSl#<^)qV=YinyeYbR@0zNQjqt#A9%I>W4^R?=45R@PR*R>fA$_K~f&t)8us?NeKGTPs_v?G1ZJTOV5&TMt_ozc|}w*O#{U z{Ri2G*oN9(IELFs*~Z!?*e2Vyxu)4>+2-07*p}Fq+kUpKv8}gN^xtgTX4`4oZQE}< zXiKvlw+#*sXS_J;+|v9cuU3^Vsv-3)zd> z-?YDNf7jmMcFOv`y`udCd%4^n+IL0Pw0~@GU~g>y%>KE(jlI473wu|4PkSGGfBRs2 zynUE`gnf*CynUj5ihYKCj(whek$stcrG2%1oqdyifMctDhkdtwzx|NQ5jfLy(0;^z z&wAXx#(mm;p7&A8TPgptXV}-fAK9PT|FP$FwRV~ueh!<%wpTJMB)lGsGF;%9RM8RPuOS=(99*~qyo;8SOFXDer{^Ica*X9sr|XAftb^GoNX$U)8_ z&ID(Y-*?W@&I9go&P3;r&gstC&LrnT=TheiXNoh`vDUfK`KvS4dBe5KxzBmW@`p3c zdE9y0dES}s{M&WSdCU2iGsF47^~gEZ@yz*;^Oe)$vbr3uKv$^CUz_4$X(J^+Evz7!PVWrimQyNnrm!84ObmkeOD7}BiE;{=B`$*SXW0^7grBgoa=+Y zFI|INLtF{2?_8r@<6McZk4%$Y(_FJ$)$Ma#^IeNw$*!MWt6l3{yBwQbTU|R`yIuQT z2VKjfj<|aJpKzUV<#JqbU3UHJy6(E|y6d{{dh9a0pSxbVa=HE8cDLKzHBX2;!kycl z&mHe9=&tE1;x6tk=`QUq>uzuDV6Wh=;*N2Du%_7;%??{>2Bk0@BYHQ(XX4k zm%Fcffcq==H|}rUBi-M-X9oP>p5&hDp6UL{J>R{^z0AGRz1qFby~(}Ry~DlRz2AM% zeZ+mjea3ykec9c~wbpUn-8u5M`>s18@V@)8`?>q2J6E88U@yBp&>a{Y7#^6M{FJdb z&+!5;@d~-Pk8goLtgs^pA&5Y3Yy&_qai*)6EsCLv_@NWKxcGCZ}dSw48&l3jd%>jFbu~CjKUa<#{^8oWK6*{%)l(n z!2&G85-h`Vti&p;#yV`kCTzzJ{D$4wi~aZ=2XPq3Z~|v=4i|6aT|AV7x!=< z5AhgJ@fi9YCu{uqd_5s#r5ju9Az@tA;#n2Z^i zg*ljud02o&Scc_Th1K{4>#zx1umgLsAHU-u4&w-p;RH_M3@+djF5@b$<0fw74({R} z?&BdI<0+ow1zzG6a&dpb0)N=ygd0H!K^P(siQLGC0w{tvP#h&t67Qfi%AhRDp#mzQ z3aX+Ss-p&Kp$_We6Es0nG(&5&MLTptXLLn(^h9s;Lw^j!V0?{u48<@E#|VtV7>vbu zOvDsS!wk&9T+G7)EW#2j!*Z;|Dy+sYSceVRge};L?bw0eup4`^AHU-u4&w-p;S|o` z94_E8uHz2w;vVkfA)ewnUg8yU(I0GqKdi9B2{(cef-poN61kBV`A`6_qX>$l1WMu^ zltvkpLj_bqRn$N&)InX;M?-vqCTNOgXn~e!jkaiq4(No==!)*>iQedgei)3e5s#r5 zhT#~2Q5b`<7>@~3OX_$don1i{PhXq)IWmt}tScTR21?#W@o3I7j@f&tyFZSag z4&ww);T$gD5-#H^uHzVCqCT3SDVm`LTB0@Dq60diGrFQDdZQ2eV;~0O zYs6zHhG95HU<}4$JSJi?reGRoU>4?JE*4-BmSZJWVKsiiI&8ouY{6D+#}534-Pnu$ z_#Fpv1jld+=Wq#^aTV8b6Sr{(cX1yN@f6ST0TNU71m)BwqOT#V=wmOcO1qM9K#8m!Wo>y z1zf^qT*Y3DCl6 zw8IzZjyUwkR~U-#Fa|$hGNxk==3@y~U^Uib3sSKg2XGk2aRwK06}NB~5AYQKAlFHr z-Gmdth(I0`Kw%We+bDzbsDcks3-#~`K0`~yq7%BIH@?JRe1qW_jq#X-X_$?9Sd8UJ z!8&ZlcI?7_9Ktc2#syr#P5g!Xc!C$;5!yt5I1q$zF-(nQTVIp#wiU(evW=fD}fs6Az>QN$J+X!sJH7x&(8$Mm0DgG*u z|BB;wY~c6PIfjhiG7m2WGo9AviPh%$f&Wir9`FClWoi;Q?LYoD`#=6R??3*wn7`#B zPox>=o9;^O|FZM9#>k)KUDhL(^^m-;|9}4eD}VP*bLW5LVefzZ?T`QX+Yzt)c&E#o zhqdxK$?{HnO(SJ`=|A#t)hBJWO=Mke`TU=h?>+t&!L!q?14jm)i&_>uCU9KfguqFG zQv#<4&IBZk#9S=IGAu_5)?y>JVK)xoFplFK zF5?F7-~j?m+X8n7{tom{CVIj{>{glfTB+qzTf|>>e1lfb8 z1-pWRfjQ1hUcLG6M%^S!}-L4$*a z28{?B8#FO!TF{)J1wqS#ida?ztqNKbv@U34(3YUqf!l(11nmlvlGqz`An0IFTF|ke zWx=b0*J&d^DL z!J%P%XEI-Cq0l0s#X?Jjz8zXR^u5rEp)sK~L+gb$4s9OVCbV7X7opul<3iPQ_Wk)1 z<=3IZLPv#;51kx3BXn-)qR{1`t3x-0ZVmk{bbsjK&=aBOLNABj480rrI7pt#e;E2C z^m*t%q3gn5g_^^xVXiQFNxDNCZyw$z zykmH`@VM{+;X}f|4Idr;L->#3GsBa@7l#)JZfQ9gxFm2{cpJ-#@Kxb!!Z(I*3*Qmm z&ax}~R#->N-tf+r1K|h5)54pEwhTQMelq+_`1$Y>!O4N$ESJK2TCRl0S+0lQ3cnNH z&+>Qp{qRTOPs0aTGQ(f;>2gbiEy5iU8W9;$Iyg^6zKHuAsnHRyM-+`H9x>PwlKZWQ zcOsIL-{d%Y7ZuSOU!Wg`ViJ~P9k#*$49}+`6!}pUB~bx&@fl*#1wGLR0}+q0n1rZ2 zrr0UO8JL6lSd0}&!8&ZhHvEQkT*ou`pXHo}a75ufe2T943g2Q3reOirVJ9x&FZ=`R zIoc(thfmQ7UC;*!7=@|$35$`86s*Iq*onP3j7#_nkC2I12tH5UgnTH5GANHKsD>J- zjr#ZmpP~g?;|DCk1{}j#{EesbyNoF|l#2fa|MtH?I|YFVg9p3$zr)K!FKGzL8Re0PT>MB;|A{H2}~Dx zo*DD75{GadcaaJIOKeAkAP=HZ6eUm^Q5Kc)A!?uw>Y)kRpaZ&M0OBzWqp=dHNXKpbi*}!y zVy&0iR}qNp zjR-^`8bwhYZ{Y)U#1IU}NK8QzZs7sU*V%_r9KDc$F&K|Yn1-2{gLznprC5Va*o#|u z4*wf$3*Nh#IJkx@dq;@F|*swyWuLBephTtPwjH@e3n% zHDV7V_BLW)Blb7qAR~Tl#BYo^%!uC^ag-6iH{y6BCK_?F5vLk)h7o5Qajp^P8*z~l zml|=o5q~z~Y9p>S;szsbHsV$zrW)}#BknQcek1;2#KT5BYQz&pJZ;2tM!aam%SOCr z#G6L^(};JCm|?_+Mtow#=SKX;h_8%j{#)OU{zkMJ(P_j$BZe3;+=!7z%wxoSMvOM% z>qabU#NtML%ZTq7@m(X9HDY-qRx;uTMyzJUkBnH$h#woVz7ZQ4v565sGhz!PwlZQ{ zBepkUCnI(-Vs|6mBQ`Z+ zb0fAiVjCm2Gh#<0b~a)+Bla|6oDusOaR5>JEd~>Z7=IgT#BYr_!ib}dIM#?i7;&Nz ze>CDWBhED993v(fae)yR8*!NtR~T`X5!V=Toe?)0af=bR8F7aZcNuZ75f2#gpb^uI zc+7|=jd;e0=Z$#Dh*ykw-H5l0c*lr;8}Yso9~tqf5i^bW(uk%EeIK5hVuIt1YVBP`&c?hWCnMOco{5xC(>uqGa@b`F{EFF-g7b_Vmm!0 zgCiyd4v7e+H{?cOc7I44dOn6m+>H7*Lf$ecy&oeY{qZl0_ zy%eg4!W}#|;)jT)mWdI1PsPhH)hls6EGqoRi0qz;is5xaRgc892Ua1x;(vP{wns?c!_J7FmfaD0|HHnB|L%cMJrBQYeGi8sjzp;bhvW1> zoQhC=5aVW<5@zEkBw;=lVlkE?87uHJQm_VVu^t<-8NXs1Qn3@eum}5a0Ds^R(r^^V zaT2F-7Uyvh>9~SxxPe>v6Mx}vWZ(fF;R&806aU~}m}b-e4L=0H1_xXSL@+`T4iBP` z2d^PNqEQHiQ541SCf>r^D1~?N9^OZJR77QbfEav;k5Ch}@iFS50UDt(KE-Efj?d8w zZ4it0=!h@S1>MjCy%2}K_!0v!2w!0czCi-M#djEq(fA(Y@Bgreh{%<0m9x zJ{DpzmLeG|@H0}d25Ye%8?hO`VjEJi6T7en`)~k%;1JSq6vuHAr*RhNaS`dbf@`>e zTlf=y;csN%0UqHAo*@(e;9r>Lu>IkO0NCM#8$k#`7$Ojf+{lZ3D1d@^9Yyd4ilYQd z;vJMm8I(miR6r$EK~+>kb<{vD)InX;M?-vqCTNOgXn~e!jkaiq4(No==!)*>iQedg ze&~;Z7>utGkD(Zb;TVN67>n_k05kP_m?t^;An!yQb)P;WemgyRJ#TnQcz(>al=pKd zCs&j{E1cnG#`jD!9*MZl@5#hy=D8Q~Fyd*%i-=bd7LV2A^aOdrJdvbR!1KD6);pdu zo^qZ_9(fn|kGbUi-)l*`s^>$`HcL~M-ynm2H++t+=#63c9&@n_zhD!#VHYmrPdtK& ze1yV-*H9Smpe!n(0h*uEynzDLz}-|)EGd*80f&Y-eqm|1_U&N$8hpZj`Sj+k8i!Blb64vQ3VX#&Mj)StBj7$h}Li zGM}HR=fD4DEv-i%OtYk?XPR%kA!+UQ9QHrxk+iOp#!cM8U2Q$|?U?q>y}s%1-PO|2 zw{LdZaW@}pX&#SXWQpnV#C&mE7mKVG@u5`Le%yubWIS{~s5&TgyjOz15aM zKV_N^$M&%Jn})f}ftQ`tobjGKr1Ki`qYw&{wn}Fx<=p7&%pB>eWA*g8p%(tnT=SzC zZChI@^-|3L9?Fx3EL*m*N=vqxq$Ph(JMtv!@3L=t@8j}2uJ(}}{~vt#sJ0F7CleVs@GY@P3A02x~k0a9hT1^)`yFIes zU-$g&dFq+Pa^_+I7O}i##N}8Ci*_tc^QgS~)@hP|DWl+V4|3$oH2iLk-*OCjrzO87 zE!jS6+sx3m`J|4m*yg54Tcm9B;K-=Rc+Y0?upPf)H}>Noj{1~~sw;l2Jl3-BTBiB0 z)<>@sf}7pwo3Q2YtlzR8 zasKzUb$RqG*-~uCBl9;?2U;Aa8axAL4s2jO&(k%99gUn_wC#GA{M^SwJjPQz#|ykf zu6c~HnwNcyO4+CXa8b)g#?Oy(lxxyg_jCMC3Dx(-!o`!deSZ2^owfZy%3I|>sm67! z?5!p_x+>cGvX?gG>5kkiHy;Y%b-Y0yN)Ssz$|xo=Bge9m?Dw=hrS8+$y}aLaOY@)% z^X>&**#A58JXwZa_W#Pv{{cS4M?UMN>M*HiWnUP#W1+>gCez%me>*MT87=Sj^)vCL z9xa7jj^yNqq|pRTNv8$T`#4N_WSpyvy8b)M97|%pOtb&E=G0&P-1n^Up7zZ11-kg= zW5=Ex>*ia|rRqM`_lsM5w0wS-d!i-g-edEn4xOoMr4--gX`XmbAJXoR!HCCDmLp{+ z>*t+UwZH89VX7se=mYZ?&Gqe6YS9hWSDwX-_pD`o$CAc)OeCEtMDH}z`E~k@LE5%{ zZ)X|ydA&XK6VuN3Sx3{x=UU#&ml>xWZ=+Xzn01UKGyTs-UZvjjUXJfEAACtqC*gv$mC#MRa5_j@%QT^`yBGzao{icM+v5(o3Y|NMApevd^nhpUQNJ)|~AD z+5co8X%zF5C3X69bMY@a(@vYr6Q6RPE65olIr$LFNW*cQ##vnSEr)rxwDcP}o@wbl z`u1zfzRsEE)PPFtCwi^@7xQJ{fl(%=7iYA2Ovb!v<9^eACk)u4$KFS@7)(7Od5`X; zpJUSU?#QvO8Hsw?m2z&dBn*CT?if8tE4xMo*6Zo~xW2DTJ1#FfTUaCgj``Q-*+XeZ z%;dSL<{_`?c2oCun4N)IDOAjftz+EYVZlPpOeWt!K$Q!i`#zsa<3 zGoSbLrOxVYZ#f2Ko#NVF(PE>Te{1FTTE+2})L$Q(FO6@ktwX72cl!pIx(Ap8E%rGa z3y)pN$?ubHMO4NIh+!EY5oJ4m7x{s<-%umgvE3Hr0=&HUy#X9ugs?8j`VWT#EhG%n*{Y={J-s`FA z>KM;z)=$=Vnn&7Ua-NI+FhfftX0WuEvi~o-(Jt-({_Ag&$Ha`C+I(tXk3I2=o(^ph zZ5{skMJvmUuhweY`Ln#;^?iN!uD-cVtNix(mx)x*Jv(^5S)Oi|nl#ROls&&vWc5gS zK6MIDfu>S|om>+rKk^(s8B;I~GcXHtFcY?nhs zRc2bdnEhN^kLG$kVJq5A-(SZw{!Xjs;yq88Clmkp>=Uu&uVj_Klyk}x#jchSpQ z+KGcs>dWBTR4rTn-xO-J*Pa~B@pp9%ne@h=TG`r~&$c98dTc&*z7OqAd;DFFk82A?TS|TM z$Q-({4d?obEcI_~S!GG90xF@ZPnros_49K=gnqr9c6OR2W#BXOfbFd*Pe~)*^D*-^ zKqH@d<$6N4g`69_^OJZ*>LPug)wbD;$NzKPo$^Aqh2C~cTzN(Ne@QEP_T{X!q|DO~ z9M`wW)FawDhMV;^)U+$@Ei!$=zlXTK*4s>t*+bv82l(v@XwJUb&E0}Lw?~HJbACtWgABy(y!agZ!VX0o>@37Xc z*48iIv8-(-*N)PDlE3TMk^1z~Cf3_k`tL^PPiXa(D&Mru7ma;E|NrRD`u|Hh>2X)H z(oe~Kv9FxF)O@K!jvMJ_pBMCYww_J~$F58->BRh*y${LuNeI;UQ&|_4UV4k8S#_-B zL0b>!Q7tyAe>!VA>Hm=JDF3f-cVj(&`7OtOA?q#e5ZOjcFV3-anefD%*jB%`ZPa&b zR(hrj7yC+`p4Zftw`RzjFi!FAi?Y1A;#>b8{F_tP&fqN&6>W7RZ&>4ai@{*t7U0Lz z`#ihvk*Bqfv3*YA3@+djuHq){;2!SdF`nZkaxLWC4lC?%BM2b~LnLw|9||rsr57Q- z0d-7kbzeFC{1H5SomLjAzf1MsrO{uf$~NJXlYLDm_4Z=QLH*pA9`HN=uWvg^FQuP; z4V)CIx7pIa(fi#RaUPPgrWmvOjAZ)Qf_hs{onuWC^>ebcTV;A#j+A}J;9Zue(wXMF zpO4IHf5`l$e$cmZLi{3a`e?r;T1=gMJuBbzGxpW%C9iy5%kC4AeMzRtW2(&+g<8MJo4q?{O@EW=?=ZdOS=!~^^OVo*VN@yEwTqUUsVfA@d@>9|#*< zi*n{)U9+vV_tDDfma9ZoT^z~ud6`}-bJ~k)nX)Z13g~^_>bxoE3n_2Y=4qCVTQkk0 z8#K?_XJz`7Quk=P_jAh|V-C}6EZ5qvlYS8tM+uZp1z&*=~C`&$(k;j zc9N7sOke#vU5+*Rt@?Fhel@Pg`s?lOlyYZCS5HUU;%a&7oZxX!BK0&zdhc{hgoE<5^pK zZ;#yBkoWM&TW})%*4qwx8t`tF2fPPmQe-vW86w-LiMuIf*8(lk79G$DozWHD(G$JV z2mLV+gYh+nVi<;F1V&*D#we-Ep`lsE~`;JO29c`KJcw+8&sfqNb*!sCE+Get!>?O_pIEW)SrtK%$=VhsL zRQ{yyjoWlgOIO{uQ2T{!C-3PJiyYRr$GF*xwe3;U+}2_>N$HydyLvLMnBFU189v+!^8p7*L}m5FIF$M$0V7>!BTpOsfR=H$MV>=Pf|SZLYT z^SSxQ7M-bM^j4CK`2rEjyei)^Px>>xeG$hsiIku3Jpu22$@Ipzw046mqkOUDmQp*p zN3pNFc5iDIt+9%{A4%F{d09>Y6vXRz10{TxtJ-w7ZDTDy+f4GK>WfD2>-Shxzuc{g zt1ZtSJux4M>Bs)q&%MA;YQ}g^Ptxgwe&~;ZK6zBK19YdgoR8BD3c)nQWC4ElW#3F<3!g5TRZo7*^bMF^mM6!zcmC31_5DB9Pw%&t zwu+>av~IA4`(NhNleM+&Dc1!ue}?S__qf)x?~k?F$z2iNKJ^*tH%BY9K`hJaNc;lc z%Tn#jR>MbXd8|FZDtYXx-6QVDv;(zu($DJ|$IkRkf2A)|uHDu7Ub_x8uH#hM%K657 zIqJSyY}G%q=8JQk%c=un;^u4XqON`P`Ss<>GF3Z7u3crF<#?4cnf+>=mT&W|-j*QK zaCd&&R`%*iT;=^9(3m&qMf&ySy=xb>9_68|&v1;u7>vbuOvGeN!wk&A9L&Q4Eb`f| z>fVUzlNvXU`vPp2qERh4pH;NwV;iJ0-!AMiwz2oUbg5qwZ=crIL#~zotDNK-O#NM^ zkG`~n^_99$@5f9rAIvHfNkiKYg7oXiQn7l!WXcEn^`Cd!Pwwrivdp-zw^{w3>SefQ zRB!#f(r&kwo?N?!a8GZTOU?xqc`Krmmf48NgSLCt@sYo3clSEEPIwNpo=0#3r*IAz za2Ypn3xDD-{0+XV9Q_D&O8qA1QrWf}KOSk}-{zu!)y_I@qLy-Re`)sd zEoBqCSFeM8+Xkvl)M(q;9A&AdSKIH8UDLIDsMY=2XzMTiR5nw8*J1ym0S7(z?Q(uy z$@!JR3b-X}kN=Q+nZ1ozUfN75JR$L{R;9AC|!nImd_td}wEVChG+ za*cR`^FSTuuaAbL)x;+)b&gFLqK^ei4a~le#W$p*W0^;*M~q`oju%y)Qa*A_djFR7 zQ@^FWrB6})mg!Sh>&Lh{pOlI_tL+ccu9xLVAH7zu^;u{sKkbQm#jdUvr>PciG#zO_ z$kBHvpq+I}!s@7MwN#12%NkjU?B})A* zG3&Ua{3UI_lT$35bIjewb+%Yd(la%|wm5R4qYnAoL;Cyh2M!?(M{(RIztU%-r8RGi zHkPYP;RYNl`aMy;?H$dxy|uE*7@U2LE_qb2{Kq{u8fuV^cN%g}O8u7htGYM3Z^KwEPn&+JLmIUl((Z1+{EhLM zPa3K&NGmwn(k1^RbDe0p7pQNCwoKpQ|CxT!`f-+0DbLO8`!&w0OS?0DZ=dO9yGS`T zy1vvh{lRnd&<^^z1U2qP_F=USvOT5!AosxIJ$K#RBTsk+lIGW>Ig~gI!y)Ot^?6lo z9m&7>|10+i%r}|oWjiONOMiIwb+5X1v<=tqfi6GUK|3Dhifk71%)vb7*Y+ju*?7+@ z`<(hM^_%Q-k|)2Ad6v<;GtJ=*T60Y%V{l|-RC01MX{|sC){>?=@5=gSFy>I-SF-b_ z?yEohbgE_gYY)wD)s^eoini8VZEh!xUD#*jjR%mm{aCJBC9kRUi>tgz`jWQ%J>#SE z`u=X*7fl+ik9iyNgMR&9ae61NC*F-N;b`E9lAOZqkL1Ezms0nBf{i?&WCPs?0epN*{;XwsNn;`(BTf zdDisYSJJjq_ng~Uu1(eau@^J4rk663>E#}SL}?pJ3|^hxS0!y=Rd>rh2KoP(`_eC- z-G)@lmwO@d|Eix`#^TBEq__1xy*Q)H)1K(-m0oy{K0W z;Vrxt-j5qgJtpmde<^oUGIb9EV1omJ2t_zN$bb#)xP&i|;rToxLbM-yh_b6q0Y4f;EGo1Z6B3e39 zt?9H;|8;b5OWW;dS0~pP@;DX~FcDKQ4Kpwcb1)b4SdT@-CGai--(y~lwY-%+UaQwC zHm#wRNmtr)TbXwUc9WJ$L+Ty9k3rubW&W)8Kv(^KOLX3i+Pcg2vf6LuyeDJaWF6&x ztVHkqTJ90)*N=L-G3!of_lLZf8@x}yj#Ss*3I3b(<=j}SMRi=I&(`~jV@m4d98?{Y zVO&?J`#W;2rqb8W=|AdqnbZ%GKXtsyy>$7V_HuXD^jbO8k$aKZ^{2Y-R@ZiFA4uwU zK%2i*3w?}YG-EkcT`cJ&ymp|kYHO)`Ua=v`S!v5Ovj3=M$!~S6%Q|`gy%BYhmRF;{ zJdUv(@>`XOciku3#QU0E($(+N>gy!GO%3$E7^zFVmm}>4NjK@-A6oRCPqv@@e}=J7 zcwa}WbiLD4ZS~j`qfTYqjM{hP9O^yROq*Zpr_au(x_8&;Q+=DK-^#vjm+9r+p!f3R zI#lwft}PQ72j>0%YOKF(5AVMxbkY06dVIds5?lSTc}>ZY+I3Le7kW7)RLr@LsAEI& zqb*NMPv6I-p3b^I&UoJjrh)Da#y1Yk+Sd*8@Kpo-D+bN@dO=@Cr55J<0kM29z#RB0 z;9cvs$OgQp|E_bkRo=WW@5ZmkJMmlb=KE2+<9y&AQ%g;_dKr zti5>0dnK-Y-{P(7jd+*(Lf)Rf)|nQ0IBE& zqb@j#lQ@mDIFEE(!8P2%U&z1%Ji-$^Lni*gzc4MQUVsq0)dMoGrU$nri-OSUXs`qaF$b9dTY{oD^CFVfexhHn=1U~BV^ zC6@g*-o^VUkBX>_56F|Gt@??jKUw`&$Eh6iS^K*&?%DSqtGd4#J7cRhziPv%IyU3i zecIm>Ki2E?gq_*rETmng+CEa>$nvw6XN&=oaq}uaa&A)RWvM@<41UbF*1|d5JiM}g zA5ZEXk5(4){7pl??y<&h;j0+ZXR^psl(K1WFXNCWa$4~{0eLEivCNdmCuoAEXn~e! zjdtjOPUwuT=#HM~gMR3bff$T<45e&`6J>o&-%DFC`<$Zom0}yFXy@k!^<-?~r+#@E zp}mB8mSLr_ZB$*Ru0^G-EorL1OIuW>Ep?)_HC0)~1nte*c4^HvWKAdgpIjShWnD+_ zKZ*T%XV!euwp80djVGj-wR@}52ddIfUvVaDI_Yzj^d!nQ8B$;Gw;NbW@3)ioML5rh z<#7)P(0lAIaW^&6&%<{%D)BXm7{2qc(YcGSH^h5lsF&7L1{<*%zhWCwu?zcf0Edu< zqd1AvIE(X0#}!b|<_kM8mwW91$_ zGxz-WbFE!mHPGA3#0RqW9nF=R(`Pl{Y2^3ZTy|#Ccxe1_)u9Iem>v1pHu=z?zO zfnMl~0T_fK_{L}3#pKF)ouBZQesBG)0aGn8M>5S93$R*yC<49fq3u&yw25j-kkMA{t+@F-R_FWsO_06q1 zU0d6iJ?zVSnEwC{`J^Fb@4b(tR?yR!9x>7~sLWGy_o7WWj=Z*&SKTD}=fPC^V`MZz zyyttqHgbw(oWmuSbCq}#Ip#OUJ{GPp(vmnc(;Ra{?*GUUlbrmJX`lM!FEy|6EX2GS zTAymM#I8*LLc5pwis>ys=RB@eJsi7ht@f;5+6O(erg#2KpWXj6eX-n2EalCa<{H~S zXL|j9awOB|^_gDvVYs43YkfJ>N5^F4|8=H+gX!g1FqOKY9TWPv$L#Xc`y8@=rzStq zwpn`VW!gP~;Un~C9Oe8Sp!K(yqhx<_FwXuR(l3oND2GZct13~JmwH(5JCJ9OyvsYW zte*by-=|xm_B=5kwYOvcD#d(}o`aO$M8>(pSeYvOLM>#fTZM$&}`i}HQV?1e2Bx?1R z_Uu;nHt}x9Y3CNkqRM(s&$n26E@nf%u9TrU@BuAwS;v{AGaE@*=#y79jwG6U1=@CE z?5m{J>hCd@n8%OI_pY_l^2wjHb8%9Kbhf)WaDr_SEr&c&ue04(k?t>8hYh5^g}4>o z+gXhZld<34e^>kKkUitHZFF=%3vGGoT3hlZ%j@o6h9_g^yWPAScRy(##9bV_R4_UvDHqF)c=PlPh*Ph=hmwQs=EzV@uN#`c+;4bd@l$YG=^v=KB zH}Gzk%QL~M9TQVPe@*o$$RjvncBFQpph-u&L8qkFgXH~lRcynh1Zauw7l~v;=TJ3si&Inj-CfPSpVzAWc-buBCR2VCT_gf?=#qV27yvQZyI)#A8q6y?u;P?mgG zKqXW`Ra8eU)J1(XWWAaYo5Q<2)Ht@Nc|U0FnVRz}Qy%(#qMl6K$JiF>zv<)rf_bLU zdwzA#Tl(2#eMVQAs-+Wuv!%BG>ig|0zk30CpIc4F-wY<*uMv-77|t?A5v6?Oew0Mn zcf6OQ&KHSGCRuK+22sjc?tyFN{mTO_s_W5c z$3r~EQ#{8DyhN@P>JIqB3Ok%Brt~19EL-JCo(+@V(&kp>C)+@ceUr9;)tavvqYw8+!dXhF!h^$$t+Bh<#nq~Czp2(ldM+x1>f);YE7EbV#5ytNwX$DYqI zBC?QpezR=qNu=|}lYFKq)^HyQIKQ9WB(?DiB(qq&dFPcro~lYT{M z$I4xCo&^nfIDwdiBuW;qcx1QshH#vn*oTWj^_kcC7dOS@q7( zQ!Gh)pPLVktFIlOt=St^GyghlA`Qv2oZG$Ul{TaIZ>b|?I;lUjb>*I)lxyMq(=4V+ z&&_Se=;Jq~-NrNN^d(iat+PwprM-10%h`o}_ydQK#&VAny_X?l+9b`T<;H5yk6*7O zZ$ovyndXf=hN>y##GVIUuo|i)!HLVsqs#@ z{I&MTUDCgg$1LMH@daK&)-^aedklu`Q>wl7KVy`5-btoco{uQ$tLIMR9_#lIRR6k+ zc~RR&qUsm(?zfgYL-o5Q9oPH8Hjez+^6biU^SfQTY5B{#MyFrRWs*C7jkq>G!1q}1 zS&K!=Ha+37bM7ule%?W8ltEdPLj_bqRa7J2HHft!c}n9xi9~q^hD3QMkVI*ddhZLW zt*Po@)i;>h={J49`*^x#X_ZIjCA0NsrqsDtww0tOZB&UVUv28^Hf^_w&$!FB_MTteds6G6#`Z_o zoT|MSqWCcVm{Q|zV}9DjxUzok^3-YP0;bT0J?L_C4YZAArD7-cU>^>!>_fyfcrQ~u zrxU(#fY!zt?RhJ!p1Z`fSB*T&vm#pA8~wtiUY*i@tLLqK#}p^-lD-tZT`TWoP<`WB z=X+ycQDXtrzLQlpjN9?vX2%!*V%cYVY~H+gAoBP!ZHuzkQ7 zgQ9MEUgj;X7IHaWx~s4b)leNZPzUwV5KYhwEzz3wY)9+>-+Xxg_TFx?zH)sa`THki zsdlYbEl!?`uFjW`?^xsj1TSxku3z#GIR|N9MW!!6`x5dFzH!_q>YzJu4fPy;#8gbjOw7hlNWy$9 z#9}N(GFIScq+ku!V7PnI&1GyiyHl=mPR+~f^g=K!fRe>NISzfAF}Vr zwu-H?NIQPESJ%g^I5;C0VgBMM>6L~Ydoqqo+aHX6_@rUyv^1X8SY+9k@yz^Wn7l(x ze@~w5t#CUkmqmR|i?%R-SK6TBK*m|lZ zwajC4_Z6{h%j{{SZk78sQWn3_!+wT-gOQ~BJtnZ6$wVm&^(?eHCQJRIU*pMjf=W;7 zCAq(<&Q0E9?xnoc^`ESpcfR$0dOc5)hO~WE|CzKOz0;TXRH%EYrL<@E^)l0zO`WaM zmEY=Isb9w#=YZ6$ebs%6)2&x(?-L3bKOn2@Wj?8|ywg$7dC0i72$RRZpnnDbUj9G( z|H+lZWoJsjXzN1jN$XtO4Eq7TCO?F0>ASAJyx(muWj7BCun0@A0zYF7)?y>JVmo$W z4-ViE(r}z@aGH1?>5y%q#$@SZMfCOZeg;IP9kSnc+;+?6a(oqa$3HFd8OPeU zQSGhC$>z0;%Rm4ea3K((2!{tz$b;9AAJHg;!YGPjcoT2oZM?hIl>R=kJfzHGE!pGi zWMA4ozWdV(Fgr85QE8kJW-b8+n=cV*1oH&zst+7MQN>$ zmzrh*^Gw7P=2z>W9lyqNA&EU(Xmxt(h!Bn&{Tlx#rl0RMz1E-MGY(kqyQWY0=4{LK z{?E;`U$oSgskQo;|7Wc6N<)^Z`UNtkPqo}CpJ^^MU7o+!`;oUW{dT68^;6eiiEH)p zmwocT@;)ehiFVBA>#V;=?Xt6(_H5E#(%O&TaS%s*^5Hu!U-fSX9~)%hnR)Y@<>g&o z=D@R@BQG%jWn4G%roTTzucu_4q`j0QZ#-)u+kRKS+1fp~4X0u`kK}RdZ_`Xp{+qNi z@CeU*@}tm_2&n>})^!{5JGoaFuZK?O`>*p@@Tb*-Li_X{1?Y;Z7 z%W-~T^TgRrYTUT$Td(Q*ggiDy3$#W%bU)L!YS~(zo9fSb$~(He|L%KUY{a#p z_y4Q&gN*0&{<}IasQa3dPuX^AdKrr-zvbNq>KaP=t>wJposK$B$g?Zne^2px--uSm zybs0u|Fh;}+^P59<^1IR`+vqr9?E{sUDEaaf3+``x|gEm-@7iB=_OyXUjOqffY)=Y zGMyS%D`Qi&<27M}R#%^XTduLQ_Z9DJdzsJo9HIK$(u}dLQqDz8&HM)XU36dY{B9lK zU(au|e`r8Nz-s~h0uKA1wO+L5whgyUvn{Y~w(Yb%wOQ>`>|LXt+23&7=U&{8PB{|H z?htoA_ebtF?r+&oMq)I^ArU`fDrRCfenJxFVExdFQG3|I4#`Qogmj@;t|=C+0Ihcc$KvUfLw> z`H)iUxfg))sJuRB9j49~T@uz>68?E+Zt{H-wV1x{e@rjiUfsKo${1nkGW?mj z#+F7}eLjTNMHA+0h8D~#)B0ZP_}&9n<4%&Ej?$j_aq;eI^3OG<-nZ4Bv^t^-didl= z-FuB)ma|_%{au~`mORLFq!OinL!#WjmNK(dT4XuB_=$PPhkE-#o-wtv{+GC?xgy{u zeLKgwkAB}hkY#_3cnrgEjKC<2Ay4CplCIp(R@+AQWz~nE#x1KlLY;T@ww&JPljmSn z-=jRUsM68)0or(yU%zF`w6?^~zWV!v<7f{#+1C96)&|sY#yam<9Iim^+4D}WIpk?B z7GM#UU>TNU6;@*%dEZ3zUY5E)PCF(uv;ls_W6Hq209mByY`rkF@nR)IFws$UNHi zG~U6W#*%s0fs%LCmP)xZTdRY1f7e1ASCGmR!ZN<_1!=v+E9BZhpWKF=#|h7JYWs~` zlgYXszcoPXM@pDfg8jZa?|g~(gfL$OBAHk6B-eTp<#|gjkE);8>s%^%Q*FzX0{S~G zpZ=jg*DK>%^>+Zv`FkoYrJAm2(l3Oz%X=Pa+sn0H zpsBR~7ycczce)L=t+a2lFLma3mF4Q>h-+p*a&kw?sw;Y-9|mFwhG8VeVgi1|bjox# zaURsNr95QpuX<)x`Wsc*$^S_ovh0V_|0nx!diC*^w7&PvkJ?DvzMs2~HWD)4vxPKM zu@if+k7aqMBm1jr&&XIOsk0=#dM_qg1{KUS-w)I8^U8IxAMfie%^FHy%yH5>jq{|J zPSlPGpL>()x+LMLKA!a%_fq(qdF50&r^(pZIUEPc$+wyR4({Q;PyXbdt>h*c%L^ild)&V<*eSTe$% zoA>{$-v?IX7Nj3s)~h@HVE?+@fgh7*12iVx&xp+->#xT0Z0yxpE0^+1@@3WG?U|;d zPd?N=`j{o(Xx9UYi?YXf_F(!rpXq(?bE$V2q`9VBf+OymXN{EOQy*hGi1~*gK}$og z52gN4?VwwS+Gu%9pO%+A>g|s)Oh2CKWnFxirTQh)!?+KB{gFA^PsVT`)V_K$h54po zmNBn)9W3v#RQ*fd`-AKo>UwI>%3rj5(?1r7 z%c`HG9+2&~hxEnkb+c9n%C_bnmh?Tudp5aVF#jvk zv24m&kIFlp)IRaugdZ%^CqFXZYLoMwd@_wit5;^Z+{_=k$&~IPYWs=te4bjr)Z9rH z`L4;x!EJJ^pXvil;(c}grh^`7N38Tri7G%k1@Ss*zCkQuq^sAx+2!*;zm0K(tx|Z- zKb7}S@IFO9Q%mkw>icq8(kX{Zs7l)2WvAYc9k+alb`0!3C+{)IUY35JL&~kU|HsVV zfcYB}Wqo67uGh{jaxJZGXXClRv~a!eRL16O(;4@~)U(TKJ~b}E)NhYAor>zcGwPX6 z)AZ%q|I58eNsoaiT2#+~>es6Jel34f$3nf9Yqk3sZ7=r8u}-S3o76{t4oO{O$~9>e z?^J0<$vueN?Rn+r@Rw&)Z}dSw^v6I9#@C3)PzkwzT&A`-$$V#-?>r>0s;^wH^Ro9XY3IxT$Ia6B6E(&|oonP- zH&w?;8%@=n>Yj!4*Lu&d_toh8fm{oydz~`A)w>Mk_>pz8ZR7o;0Z+`8zVE4>vn3xP zrX_xNxDNc&THN-t?V4@8eZPIVqlfc5XNt3i_BDww+}ByJo4Ad;xQF|Ah{t%27kG(R z$hDbk3s~XY%)Nf1c&v(ymnF9Hm@kJ*M|xs@0==NA=Lw z!?z9Ci1%;H@}!T-ML)T`nMCg$oD?~T>!4hYnmm1;oLqu@mBc$JjWQ^Ua;StVfP zI%+}ERQFkYuf^4O2{IOK(3Y*aqep9w}v|)cb$LPg6t(6s~qy4b$PnyxoZbwS6Y$RHi$(>e1R_L zh92mJIDCl#tm9Y2AyE0z%A9kEK!~U)cSJ=*g@ii^L=q4L4U=R@CYPBo$pnHdq9Tikig!drWPwFQL>3Vd5fPC^ zWDyZi5fPC^MMXsxk&ypAUDMM&O%jk#zyJCFXBpne4+OU@5Q+SOKg8 zRs(B*wZJ-H1F#9$3~T|m0^5M?zz$$1?7SP-J-|LdvIWia((it_3G?{@OHOOcpB#-g zV$aLeLRRxSYa=?x5^aq8;8f?#lEu96@oDYn-Pp4d?02cMpHiR2(O$#AX-qV4Yb*s# zAII-4%&%i?19s%$!qo#b1t=d{+e%l;ueei*c#a?pxePwLsqSs;y)T9A<-iq4udI{w z{MSe)d(YV4w#)As>k9d6RPtlHuzgS)%M1M4UZ=GmUQ2(cj@jTw$fv92Q8p^mg1=1` ze_NI5y&>MO2SI*_LY~HfwD02_GsS)~Vy9f55s<%ClxO`>nEamjo(IxD=jmnq%J1=B zz)P#3U$(9ETM+WqI&Kek6$5Zrc-gXi=o$xICAfwFWg7MRho0Y5#?w4Oc}@)7$@dz2 zN;{xnFxEpY#b;P)A2|W~?f~ut?orf_`jGTD7U*6K>EMor#CL|~kM1Fk2RgT;`#XE_ z6zg>OmItBZ5#TZCnS*OWIq=RmB`>WlP1j8m=j^OrgTy(T{)XFgNV^z#9(t&+(7iKd zT6*WSlBaR5=Bd2Llb_&|R{yH~WF(z+RqCWWC##@)HLw;~4{TJ`TY85rtw~AG)VxK! zY4I=G7k39yM)v#E?MSy1*cB@yy)#T%2I-xU()=uq$Egq9Bi{d;jXk-Zo22hy$}wi6 z&YwcpXTTT0m%vxhE3Mnf7t&mzzIR0JLSd56qjL>*UPyh4y?2ntH|qm(82x5M9Y*KF z>M(lll)@za^e!(ZgWq30`XZ0DqxQt{a@a)Ho%#byqYT@a_T@Rc=@|=ke)N31I*j&a z6y^~BUe0&c4fdxj^jj->&h>?)v$h-T>^E0G!e%Fd-+($mw;uN_0SDj#ny%*#CgYk4 zTnbzXbONYJ~# zyp(-`-Zf47vN1o?mHs}PGM@HG6uxsEd&Zv5J(cm&`>OW6gue|LKBaAXjJ;!x)_7t$ zzuSX*om$7Grc_Hu`yf0E{Dx?q8!#rvqCADbIG`9P142LrP=#_%#B~xNj&B;{v40x) z;aP~+Xa@cPe*wI6)3=U-+Qt3<`(Fc}ne@l~J@6GtH{j#h$=$ zpb(e={0&$Iyant7z6E%^PwW!lI$$7hD^LVf0)GXb1Qr8pf$hLoz-eF*-Ze7~cpmsC z@OQkAa|Z{TiV1@I=Y3-}iJ4KU(&pB|tU&<^Mg+yaDv zslcPaQs7PCQ{ZR7f!}Fm;@{W)&aYKe*;Zd!CpWBxDVJ3IPvUTD$oT;2ZjSBz@5Mx;1JLg z&&S*eJOwNP)&Oq<9|2zjX8&%d{)KY$r$?8!h^ zAPdL?76aRXL%=V94(DzH&<5xQ+zJ!}RlqdhVc=QdU%=0R347<}KnEZL7y&#CYy>_4 z4gxN$>jwf;fO)_tfF5&UGSC6&0rUfg0k;Dcz+Zv6z>C0UU=Q#$&<%6KNMJHB8_;s= zk~U#&KNo*5+t`&GEAh{$_=PHdG5Ck4%ks-q@h_?3SF7S*Q^mibir=W>-&XNkRq5YT z#qUtXf2fN8RKetp(;KHyt4m|RPp&L`63lx zrsBgYz6!ij{}fgHT`GRMO8!9=|EP+eqvD?duWZkSD*o>(ewix$ODcY~ihos=e!VJw zi;90wCBIV@|B)(wpNjuf#UE6q|4J4AwTeHc;(t`7KcR~MRTY0m#cO^}w69LZ8&$jw zyt4gWs`w_V_+(XlOI7?OD!#2szJrSItm1p9_?uLGx{B`)URnM@s`#O*_*_-|?JC}{ z;>W4dm#X**m3)^8=KUMNORQxU#zgLxhzbgI<6@OU8|69d>tKz>0uk1fRtKw@_y!J$* z{fyw1>1`_BrIPom;+v`BTdLwOQN_1a#dlD}cUHw;t%|=v#iy&}`>WzJRs2vDpQGYO zs`%T$EA5l7;)_&#nJWEw6(3c}PgL=LQSo=F(oa+I_o?I`RPm3hmaiRQ#(d`PWtP@2L1~D*1n@`28yRFI4e|Rs2zv{I{z3?^W?XtKv_p_}^4K z_e)~`(5rY0c%{E`s^YyWK1n5?qT*Yr_%^EaSE%^*D)~;T_--oxI+gs5Dn4Ds_gAIQ zRPi^f4psb}s`zQD_`j;+XQ}vyRs3Tr z{weUv@;sx8e@+#@SQWoa#jjBDt5p1}Dt^6+e@n%`6XSp3-g2CK^7y3ij9_y*ox^;? zeQsy6v!%1Ov%hns^Lgi`{7cS}zR|u_&R3jkov%A@b8K+Fbpa=iZTTb4ubsVw3psDB z72Xvda?Er+;41f3_-4B*eUG}Ha6RR!_Py!a?s~*A*(bQu+(#UA()eebGQR5B?8$IH z?ReK?7w-2x=o`*I?5p+6cR0Onug|;RljMEO7jZr3NcOh$_V5mL-{2j|Hxqh!pY&yT z7de)A=lY)UT`G*`_c;FUxSfB^x7_=ZcZ1i@Z}uMb6!PzSi}-Ec_r2?VJH5l*qun2R z_jo_{?)SD6mO0+^mGGZ?(Gzt`t#*5232w>@cB(!QhvNr#iZNjjc%GU-f`wwbA!qnURDo(BX{ zfK;Fj&=zP9bOyQs-GQD!FQ5-F0LTRP{K#cza!0;_?wz72YzKA%yMcYce&8T*7&r;<_H#2yCV+!nWeN9oPx% z0>2m74SFB2A20VDqp6>E|k#s`%k5DUm+9Qs( z?v8HxeofRp(VfBf<9~M7xi!K-{&9!X+U<|LP`1B`$L zumb|%0h$2KfE1t=kOs5^Is#pQZosubFCYWx2Mh*=06D-&U^FlmC;&=;Fi-_d044!X z1M`8!z*67^Ul5NQkM+3=@e>zYzyC=eJYO9e>emgWYpf0z zYtKI`U1NQsq5AzRC(?6n>YpIKglj?UN^Mjc016FsdXV1ps{T)u zZo{1h=fi?@w}jm*p*tnYGdQ|G!k)?A>3m+GbGZ8)vmEShi2Up|d-D2=q#it-%9Z%& zT#nuUsPt9)*j*2H$3uBe*Nd-l(OKQSzF(Z|yzZp?SMkKo>2Z59d83fzVP|$j`C


Ll4BP|E1Re(F0M7zTfER()!0W&! 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%0Dast_8EcSo6gip3a}Op>l)cxP9eqv%XUQ)wy4B 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�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 DQh2QI diff --git a/deps/icu-small/source/data/in/icudt58l.dat b/deps/icu-small/source/data/in/icudt58l.dat new file mode 100644 index 0000000000000000000000000000000000000000..458da3e69df37fc755a0a74cbed8bf20c0363629 GIT binary patch literal 2680800 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
Q5b#b)g)HfvY0S-XnO+LNUA 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%0A(ul{o4b3txU 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�KuFr#8-{>T(@+&L$RUcAo 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

WgapblQ_I7?IqKi)6bZmxtw|6Hl~9ZjP)t$J>y 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 xfR6n`cDw|G2} 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%0A1{pcz5!v7SsT2DJB7FQi&1W*Uv? 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

!s@7{0}E-=ar3zWgJJ> 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

6Z< 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

o1)wq|cH^{+Aq-&yw#M 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 z%0DS!3vY|0j!urrj+Rmz>00SfxrxG3!Bsr=s8jA$-u1rgyD%^>@NM94L3={3g%@gM zQR`xx;xtLtslzhbGEQfW$iALinb(#-pm1Teu=YUh^V)lLQyXdUDjHVvx!B3ZMdwO@ zm2d%Z3T)v|^Z{&v&`RLgP*^tuvSwqvfwmr^PjMK-4VCQosDv}1IdVm44A3bFV*uE$ z3e}h|803LYD^v3tW5u?Ll}Z%LL!L&gi;U8^#hWB3(_UvE&+*9Rfd8WRg$(x*kyL~` z??SA;0AE>5GCsuVPvE8lpsmANZFSYWr?|JcGVwI8)2g}Nqtq^;%KV1>sRj3&tnn@l zTUbK~K5Y+Ql;SB0H*gqVB0_81u2pj(-x=G&M~q|S1CPF&3LhYCf>3Hf-g-!3OS*&hK4^y4AbA za?5uwaNpzZGTbZ zSlVb{RjGLb*_A{NQjw+p}xAH?Hi=3z&?LiwGd+f0e z2;9!Y*o;|T1-nSp`s#y@%KclXYDGrWtW+lU>QQ&_?)Y3}>g}26NqwSw3bmKPTJy!$ za`s1ogS3}xNa#;tWs&hw&*Nq#c%*I5%9& zgQWrt>k(@0+nAREmQw?b%`vxr7%PFo+YzTCMACZPIS?pJ_5M|QT`P;v^;=Dk(HxmW zS-;wRw6hb2JGME^aAvwBD)a(|2fhgY7}JCr7d;Vlw58LsM zdeT(sZ?ZRXfw#uH)Nf_bnc$=06XIXQM<%>TXivVJ7N0&Sb9m-&nFn*vhFPfg#%$sfevS}IH}{ z!n$nj%#-m7ZEp)*M2AEiM+c`)$)_l$c*H0jRnNU0eOLPC`Q7rH z9XuqgJmOWvAkCs^PW0B8sMwm=`SCXrM<;uw9!XEj7?a7&-k5ziZ$g1#(a4ffCGwKc zl0QoW%IN4+(7}KhScPK1X4ZIHjy395F4p6?$doo%qp>6O;X^OMoUQ|n4dA^?VZ$51 zny=tfhFHJ+4#O3{|BT@dul@nq-XEBjfbkwYXg)e12eh1q;_A;jo+wvg7b3NXvPiT> z66}7={et^N_cX8B-gNI1{#X4^1RHDSM5&{~qwI=gHLf*FYvP;fKuZRm;$RYMki$9P zt>1%xqyW87YjZILJRkhiBIwpbX0fEgp;>F?p`by{n7Jq7uhC5w5N6(im) z6}W`T6yDSQ_k>Q3sEJvV!O6T-xUi@V>?a!e`xrWXm$9Po3Vn!TbWrwbaiZ%<#~bN1>i|Z?yr6+oDr$2VP=_y2y^Wg>fBoU5mMffjx-P6={R_CLotJ z!-H=kD+|$SU?Wemkc~->wF7ubLnf|3tw6nPhSa&P*338DWb9*EOq;?!A~-GXWk1FK zy~N!`U!hj4R&xUvMOH`W#*9h`$~v5tR&c2*xBhzlu7*bqp^dX(g;i~Ia9$>{8C~!a zRBO`_I|aBio=qWpZg_^q3)P7V&sX_s-;F`uS-0D39-Yk)xXCDtI3^-ATKdi_e%A86yPKNk*k7_G?lGKngR+Yxs^?q0^}%t3hv^FAxMRXU|? zOWB7qW<_~LTgC4ce^)6HbLQ}BF?1G+*o%hua^b!HsKA4vt7Z)HiK}7oUM_OW2hBp6|PLz3^f(rL2u8Mj1t8@ZjwOOJ`3W4xYuE%Euyr$Ie5kQr_t-WD05Nz>$N z@-)+8-8e@!xQLW z-VCh!GQo~mz*!bDB>GSApdesxDaPmUq%7os{ph={0PYO|pZg14WCiI_&`NJ;r3@_V zK1Log(hzvmSa?<(aFGM;?1fidf=%4O^+w}oAH;VUB5N=ZtUqGB7vlRAI!6*@v3KYp zjDr^Y!0uNtR>J$*&{2BX=7+Z|_+vMzPIpvRwMI`;_X)L=?X<(U(KIkJ8d2N%4Yi-l zL;Jos6)Js-Jzg~4Ytzf_N4v+8&*eoCrkV=PlPH6f&@5glQJPy3P%Xn;-LUSU0N=th zzVN|1txt75rFh8H%0lCk?0z<6S>}w2-ZfD*Lz_o5+u&UX0_CdM;GmO4Fym)$#WdH$KQspYpT7F5z}Zq=x2 z?ZE!<#t}rzO`zvfXm>WUvNN*aEM%L$kZ@=xLh6{_6uYnNzAw9jJ(PvOxyDWnQk}LP zhEdEJf{AvEMeD_N4u3eA$$oH~>OSASPGRg5<~uELLEx^Saq-X7j;7PHtLxkAXEbIv zu50|dX$|6oy!Z{q!w7b()z zm&IRH-@|^i0qC`V1ooZ9t{z*+n+!HH19BR`;?H0+JcJ8Wp?s{XYr4?XP3$2ybr|Ou z9q>NhIP*gZ4QR>4o&zRUY8pd+GXl%H`%euv)p%W*5_rjtCUqd_>}ZwpbC8(>I&x#GmQJw-_hCDH`ufI)!r+-*ZMtDdj=7j)o~}{zD_61i9(+?{-D7TLSogF6_&Mt^JVL3yyhxs_#x)e}}2dkZ&{_nfzj z-!3+gn7K~zZw=V2KCf;F8XDX;)Hd8XJTH8C_#feZ5l15rL@kSn$o?y5LtaXLbN*lX ztb#FxW6Kp4C#r8%->F_w_iNpQrq@k0timy{e!#%~BO7phKK3~av42;LeOC_HXXOZu zJEHsO2=?s^X6=l6%oW`VWKDD%zs0zSuJ|h0cmtT4EAY)0-gN*G@Duo8tQJeC&bB3O zGQ+^xQf?6$8~s`Q?fCC=9~B7DX-xrR>WzNd3FzX9HnyqW_mBF2an=aRT-Lj+mb>|` zS5FIm7h9K7oEDm1n>{I(DPD0mt3IKQh6?egtkWhJP-DrspA> zkGpj2Ns2(mX>Pvd~|+h**?hj%Q#I56p2saQr7QqhR2) z3=Cni*49)P{Jv3yDA2xG_9SjZ%8=a1aw+zNJK?z{SF8)-SqJ$2ms)Ffb;Tb=^Uwj{ zgC*Ia77^9v6x!gXB-E9l~Z454`+q@2hD|;i4_YPX;?F3 z;F%;;dF|GCikgewBi^kDn;1b`XE8L$avDVQaqy#w(1Har)eNm=b=~vNOlQ|H2zzq> z2CTTH^IM9uGYn4~eQ7-1?4tQEbbX#FuRp(?&l3y8V)0wokFG=9%sm>FP0DtqkN3Th zxuNAT{MeGjEt!6~+q^%&S0(9x^Zb;s}0%&gOSa~xu% z-#f2$KH-t8+OBd4Xb4wD^od=P9bS}FB&tKj2K|sbQC8zlR_IJP!RuFQXRYg)zm3{m zm|G-31*yPWMX0;zdgBvq`Ur1JbLAoa1%b+ts?d{RAEUmA*%h<6s9y=aB&1|WS!2bh znq;ir?}Kk|MvZEYc^(GST?=lKjn(a&@Y_GoANdo*9=x&w2(kb?gM4a0mw|OXcUwb+ zeTKtvhg|8GE)!fPx@UWNcn5etQ%f{Yb69w)n~&YU&giVj!GnF!N78A8>b$oZTe7Z- z)%L3#OMc|%tU*xy_x%PU!&8R-CKoNYu~h6C+<7)fcz^JB+g)?mDy?^FaC+$!?$XDrua}|k zH~vkDLz2r2w-jwH`mrbu{qx_!*tWv**@*7zz|g0tF!E8)Y(ccDaDOFoMLMjXi)diN z+UGGRGvv4dT5QpE{Er*nvvi~Tv6yT#8wXyVK;NEjKgM~Z^CstoZcXk_JsOmUeINTe z`5C0$EWA_ru8>zHtopkqqBgP78n|tZo-7|bnr*?@up1bt8HW*%T}t<{n)w;@VGNJ7 z1j5wAD=$JfCy?FM&`l;P=ONHf17us*87b7-fq^epYda&CV$}~ByIl^tSjlKI7q^cZ z26k|A2rtBBT!)<~hTYq009|Ok+d7sPEVv>d1V@GQ93D$&%I>>8a4QLV5m6S!k3JN$ zHvMDPguIeGLH?fnE5(D#`c+P;v8`#WQPt0DaBq}1S~oHA{tp&m4Tb|RKvm#QWFYtb z0ECKy7heL#Frd{%)Kh8Z8M4gGEPD2Lx$$|o^9u7v7bps@7riP9Di)Lo zOX5pR9h zA7@~{0237))^#w{EiCLwVBv{aHmVCYo`2`y4VE0dKaPtG!^86teC&g<1NtCC0snWv zXLf;ctborXVOMzuGFAeav5f0WWRx6JHs)k6+)`=D9d}5Pol;H?emf}7k`hWupct4@g4{f z)?n?i@;a3Vp;>C`?xGnG-7PKy5aEdVHZ3;hqUyfd}Td}xmL)FW=ruxc;ZyJr8*hD3C zEkpGt0d6a??s5T{>LPTs7OYgi#TU;^;mK01Cx>@*E_WIJV0@Kf%G@s*>9#;`wA(_z zyXr+jmf?3ImZTiW++6seIJ@M0#o$^^?H{#V@H!WCaokXqd&5S)V2b{D;+~ovb-i@` zV}?7K51B8y1$L1_1N&tTLlnamivzehDR~7<1`Q{Z1$odvCE{DFsvO2Uu zUE@~?L$NC`E-E3)r*uoH1gpj5w?5hx!dL@S!(;TfT%p}?;Zo5urz0-k`Y{6pL3=f6 z(UW54#tY+R$)U+H$wukNGFMgVp=-SZ_IV1=3Pav31$r)lM&5PU$_IULvU=Z23lm-n z<&!V39yFF7n z%(bsvDZj2*p}gvS-8(=dNpMN}E18-3Aag*Tr1)S>OO0a#-kXIUI{9Ah<_;Z_Go)%- zL*qe~m6lUz_Kfctw-|RBqnM%AD|xSY8vZu^Z{h`dx5P6gtDX72Cw=eu4Ggdgunhbv zcwVSg=-p8Nu!~_!BR@vZk6rx#n7Zn?HmogNcW>8rm9?wON)6Y9C>EkXus}i#2oT%@ z1OkEJ4hhuV-P_gOx6&3WtFP|9zAuE(_s99AuWwE6J^Gz<&pkISA^l|YGQ}&dc z={bw?W@^S2FtpJny{jfwRa8AUxB>lQk^=mfHMpY#qMLzO^Az+O{P`K!;a+fT0c>y% z(Bc8CQxDGRP{oTv#(xwD>==;WVAx51$NJ6v4k<2&sP6O^jB^~G@M`Ika!fmiq=$8K z)wD~Q)l2JMcC}99UAhq5U1yP3kl)Z%d~g3j0o!Ga$eWShqBh3T6aGrHN;{g?UAg})gJtDFI!;{|(o z54jp=GtjUfH|!@2pM3a^Vesw|Mi1Yi5oRnopE!oITU;bfj=Z7}$8OEZ)hsUST47(g zwyM7YUJBmjU7HkKljF{>SwGF$dUv~HzN`2y!Zle7YT_Fw=yUYq_FD>{{*O;4OLw)5 zusUaV(V>{W+4BcuGBZhVTHIGMTJkKuSJLkpdopL|%ql!sbgyAOB2CYZfBo}x%2~X> zScJ|jvqqYK-`#hxpXu*HQ6(|`Qme&#d!lnJNvd$tqFxs({`$|V<&Lny1L=cxVYR&LJjT|GZ~^Vm(CiQJ&T=HMg2{{%0P zoR&mM?}YD){1|;X_F%&61bX70tP@!Wa{A`()!7x#s3KQK)KF^gHcm!7)Z8YcR^x_R zj0f&=cwq_#2VH6$bkJ~-h4FAV4!xv^Tcfc)I#7lNxQzy6aRgek0&9H%yEy`%>b`uB)z0xWn&}%N*$ZAGxM-&T~2ht zxWWx3{^cVpUe#FE^Wmez5OZfD_I^d5g9KUb1Xx}lpqm@`{dwz1cOf-zc$IKq`EqE~ zSVVN=EcA=WJr4jaCLp4m?9gTNUCIi_L85kR5+e@`Oe5> zK4yCGqxd}qKLk@kmxWrzoKIPkek*-)}2JRr^8|bK~yW>uQM++DDx(-#4 zPoVLT-z?~QJ^WxAR?CKO7!4dd26~P=Jngz=j@LIWoGh1HUbXIKGtG8BVG(&A<1>TB z{KkCDdd7OeTEYJq&^7R7;HyCEptaI88Ao0bzBF=GBq`>5OiAptxMA@d6Z$89PaK!L zEBRy^E7wxfEq_h{Q)g37Ex%l`zw%CH|LP0X4z=#JtLo0yov+)8$UYVbE4a(`4<5OKm{6}eF}qU$nTb0(E-s7GxadfWy(i^iF&0{XMILtlR0Yy6isiK6Ir*cp|tLcKwryr211bkhAD0dZnGlbei?jGMF{t5mN|Ac_045Zf#fr`fP?IdnG_e&!LdZP_ga zPVh_|G1c6vt%us2w&`h`Yk%GTv#Sfqha@F4C=;nov==ll`Y87(kH0)Ky$FoK-T~e% z-n&^(S>xD4I0f9#+&W+XfHi?Xf+)ek!J`B!!R(Mk;bGxGX^Hfy)I}CAdnYTGPl$XT zIaCp)Sfi+nULNx*W>;LFca?_ZY4vHF(&uM5W{5M2GY)5- z$@Ei6R3}t~ocNsjoTWKmbGoSKs#mM8s=adgnpK*<`62mKtyufG(7D8+w5;@InO{X< z#ktzYwQK9%HRLvKX?&y~VUQaPhObSoxC1~!W=8@3r6PZz;)Wc(#Ste=1W*>p4*AMC z@VKJY4fnS^Psb0#)M!p!KlW-+`f1P=)IQY}Ft1J17*i8&$`(sI^=H zdE?K2B6c*uvX#*6!|>k&@Hq7WvOq*rNc}R)xq~4a$I~-UdAe8E=e^LEiH> zXdUA9KF|W-H5*vfCg{caRt2ogqzk6XEKI^k#GQ z!IK3I!qdV?(W#qU&-CAL z)_xXTeF`so23$Rab0%Z0Spg6G93Ev8;y?-P%N_Q`!U`in^;p$KWM7!7+wN&i)zJ$U ze_ME4Yph4u&9`%OIN^BQDbl6DWf>utoKK!d=|at<>1i8jyJ%NwR`jKA^WD=t8a-MV za^@;lG+X66ke|<&_!s++2sj&XI&igMzT7&No3b?JN6Pus7a3zS$EZ@W=jKZDmTPuv zu4w}Eqw);}y|p8>xmu03d!cLL(xOGWhq|x23B?}8{NngxyHZxAuyS0@_!@GJf6emx z>-EVE6^+C6Mf&4<0y;locTegQD_<-iarUxVE>I04qhfd(el(BOZ`5p8Cb)ZJ% zzQ&38CC~vQ4)TWV_dw1EL9L)qpkE<-qaR3tKS;ypLHGlEaJvX}0CWYk2pGh>!-JZt zzIn_t?ri?-gv|wk?RN$xsBIZ@94GH2?jWCuJ}<npBva#*o zB<;wrehDm&BcO6%l&!Smod1tN0;Z3?f@Oa1_-{=aRi@({!c4N2N1k`3?`{6YK&B)# zAwDHKgRG7%d{89T9n+oFQHl?jacct6n;P6PFWI;P6aL)nenwy?4#}Xl+-svF6ZUAI z^Y|5<%7Ml3fPhS$@y2zS{)N!$l-*K?Yos9zA)`B|2WN^fG|XR`BYz_QSFVj38htqa z@5JRf!rU{tlPl`0CfAgsPCM^51yiDdwvY|2!uO6v%rd>cB<<{8d}KMmZn@J}ms`ZW zt|^R6MmFOOOYXZM&@#|E&?fMTz)?(4q$A&c~cX zrOa|><7+(?HiR==*wP_*q&LW#Ymn9KhZdcMC)k3>>5HI>pFhLoULuPxM0U{7~@h)Ensb6jbR6{`}jHeEe_O(LZo+P zve>-Xx`b~@n=`g#+Ny{ujw)2unDxB;Tg9TvB{)+}X(P8h1BdC*mI3hjW#DiC{PtVy z&$B~ofA$sLv3YOf=Q75tHgHtX+$i+5bm;HTysW3Nm+*?*N@=G|OFP%>1wNWI-?&;6 zk{M=~O>7}wm4BAUgtvybMinKNC1xgFPx~vqN>#5a&3>7EyVjw;rQv$RdBbbN*k&4h zzZa%zdgCrRx-8&9l~~_H$Y2nBg$8z@LuEV`DEdC?z@s~*ZmO@ATGv=pop!m*z*sC%kK_bE-?~Zoe#posxqgMuZaNW7z0;5u5Qkqf{)0P*$DrzlzS|9mc5btfIG{VDCi>`E}S9k8umKOGvaboM65D)du)Be z^31ZVw^{oN1{Ce69AX$_a4|SFT}7sG`WD`@L9AbJi-dV$=bQ;{t3&oA|P;~ByFey)hyV_Em+R9)#IClm8=#aOm>b%|RxRs6VHakBDsna{B z;jX{J<#nb0piXwrao^+q&^^j~0Ef(NF!;eQv;tI0gXOC0| z8@0N+5e@qq7Bp^bB%wErgmXE} zBnH-RMbz*DJ%VO((2@Tc+Bp`PT@ZHE8&%X;AVCTu$SzpqOymQFsG0@>{SClQhk{0e zjI$G-04+p;Zh+ol=f?YRjoAHUXiEt=&b(_WL&+NhVOwLbB*F3A@BTF&qyQy+2$+(_r`rqc<+)j48nAmYY zMcUrwXpActxTgQgockSekIE6_caGa z&fhitck#|C&f7>0^ttSY;F)rT!bRzx;GgktMz72bs@Nv%P26mIbaUwqa zml(Uo#B}I{2guZ^Vp^feZtGnBbnQX<&OPk=C2)?YR;J0glj)L`tG-iqpyAKPMS536 z7b?zV+%T!y4V@)g_JJAqnX$HGfVRFWOyn(<2`5kSGeV!5Y10xyXxT@W94y`dyH-4ZckW|3BmZc5GVV4a-QY?F25#ioB0*>$%1AoM)qV zB&(S{lrw^}lOyw68?YhZL6Cd!aDgIZW~hTWKw7QbpZqO-bJhdxd+oZCttFotN}H>i z8_*+vxs8H~DIF)oZn)9LM292?r;O&MrP8p+9OKxMPn! zE{3fQMzu8pv=Y*8hTSu}%k~0?bn9V`**m(%~_&4@Jou&pV*nt6riTTl{-50k4}8@wOxdXA2bg z79ULb^2bCH8F0AiJAU?&FhiGWOn(>M>EHcr16(BJ1s*}(|FL&Tn_si!A=)ds{J<7sDK)L$)O(OeERy1wVSh9 zwe!-zYq9&|=BM?}n$x9k){dOpIr}s!9V7;S+Z$2a4Wz`s7NMU*(z$aJhWpEkViRUF z!2SwBL91jX`!4aFz@Ny!&p+T#5cCSm3d@zAk*6qUsyAvcXq^fp3vU;F)6FUND?44o zK+gcHy>s3X)e;(3dl_1=5z%NL;&l=ve-qitL6EUpI0=5_ONWk{`$qb^xVbuz=Xoo+ z-FTPy@BG689!VA9ha>h!UXGlQR-D$Db}=nL^*!g6`l#lH_I1gd5@o5rG^~6lF}{5lCeJ~*F*XQTl&48ck^!3&d1@k_q zJCDs9?9-jUFmOSrP*@{BAeTp;RJ@5E5fdG|GjU(yv&8*Lgw!kPgE9rG8r9+~tL(Gc zCvunOoz|Sy%r77o9xk%cozyuOyOvHbv#HotWnHhWU)4Zv@@pF2JOVK-1(D#w3^YWL5T{L&!@bQ0rDge>MZB{Q>)22r@v2LLiwD;D;QN!8t7M zVFshhBEY>lAv$|SuxD}mYkiv$_pSjgCUxkxDf{|vm*EmX`iK0Qd5rbNXMo@EAd4W1 zxK!3AQ^kHuNJ|-(YEe0<`b3SiF0-z!ahsk2&m_g^yorOR9HN?gqJ65Uv?F)8Vz=Mv zA!#T1hWk;E3mz8iEcSRAIYOyyjsKFt&N`P>TI^7=zhX_@*1G8p^9**#Bro5>y#v_d zwcDR6Eq~l(6m;~v z8@Xc6TP_N>Nxw+7Y5qW+fyn60-)GKJuG(!R?03Du`GY?zBqW54jvv%DP{XVMT0Q{O z<^hUoBG6`iX$Phwp|b#fcPjAJcg)dhT!jZgGWY)x90+N93S)oHhC4`~l;msDS? zZmpiG57u8mwR8s7tH64PA(|xtO`U*GaYZdR7noz15qCfWdC28^K+B%NQ(c0F6+)wo zv+yfAf8CsQTp=B&I8#g9!rimn>pbVizf6#%ElwMqGoy5R<&1hw{e3+j(|$zg&;Ge< zQv_e^FwLof^okNdjiRQ~<}-GO>HqmyXl4;dEF=X^3fzxf}C3YnHl4>B@@ZO)O+(0-)Lu zbm)Yl-Y!B%ix|C>xakSI;&kroXBMFfRtMh;-Wi(|_avJD)Q;K+s!3g-)$_3mbH-qt zwqnj1EbMODpYW~?`#bJo_SiBv+)VUG)-P=DhruaBr~aA$`w0=|zx#O#^xEQ$#Vkh( zG0!uLk;R;HL4d4;JooB*B$J8F5<;j&{Ra)m7S89-QHt;-(sQF zzjh1lcRN}+ehgih|b!vqI*JlO%RhmqcZ<%J$V%BYj=Sl^1y zZYR`{%7G8=!xEo^y5R^RlrO9+f?-DLC`;M29C3G;(JOYPm7s z%~I6ZE@MptPs*)VoI^&n z^Ew%#mv)sumY-4#k2{#YBjbwNIsbD(SM9{ou9bFG^g&cjck7VG78l2cAz^|Dm#~Y*9oAzjTlKXE} zNXHqId3O7K4Y^}Nt$Bue7~klRjMK%95psh4bjO*F>5e%r#oVpj$2`352Cq4;eHF&< zFxBRqZJg*AJyJd8Xm`vln^w0AF9rlao8N%k!66?=ZVaSm-ENORriz4V*T1XJ z$BgWrt?0@G?(l7+A;-ZTdDvkxa%Rs&n1{55Nd}9jqdm1AAAMhL>VQV9i-!x%` zT*Lu2cunruojEEmZoj8!oS(y=!wt|EVip8FfYH6z)<2nO6Y0UV`?wLTmaU2l)-r zwi(uEymd1dwF^G9--y^3L-TtfYivT6;{%SZ0PeYtEZiU7$v9KBuuXxPXC^tBJ4*&x z|6)DHx~p@IGn2$3og?>R6mSZ85elBFUmi&}re-$$x&%CW2Wc3ftu5e(sXxM~cP2h0 zSQc2WvK?VxWWU0Z>|}7>Ncu?nK~_=jQEpM+xV>>->9LP_z&9iCKwxpmflx0|P1wG$ z*J3}(c8Oc0Z=^;sDSAvyKjlVcx45cAO42J;v-+-jw&sUsPJTr`q3BupmWuNg1=Y{0 zuhrPpk?X4JHr9WwKVWc$ev_a9WSl-x(UnERy&W37F&*9TbetL>lWn6Tv!UZwDCXTD zvv~;K*`vF_*g4l1Gz79f1rPrS{5uQp5d&m@5BtnRj8el>%tE$HMit~dyhQ?iDMfPvVB8@zNL>*D`129LiauS+2WW zI=D_WgeLM$AFi>bUkPu4Ze33wBjtdP}d&gjO#X4Ab+(D zvLE3frag6=&3eGI@nQLt`26M9UEUh;G~!M)HO?cB8+Rp@mTu6DDEO-|r6^pd)e&LU zt~h<8z*Bo6N}($jzhJy4pobjFLG_5X1F=pEc!FKv++Q6wX}*7*!EY<0qI;VSKWz3$ zruEFSR$8yICfMw?v3A%_-cJpt-EiCQ{?wz4`H^#n>m5=O(oZr?B9$zYte2dV$Q2h9 zC!?yOy<>u6DiigIO^J&WmnU9G8I{G$Qs)UYqsrG+itCotjn`9fu1>+dO!yK+#g)*p zmB{Cr;Eo&>6a}!42w474=+rkvqOL%*8=z0d$Y^?D+Bi|)w8ANl_gq>@C0+*JGu{^A z{D?6H)`dsVvC{>5ei|f)4#xqdd`85X4Lx;1b!{s6kPNLc-3E|#+@1@y`eBu7r?%JH zD;*3DYaM9L4_q!2T#2j6BFYL{6|SHz^T_k!c^_c+;TCdr+-KY%-XZ?+z{??2@khxC zsjZAC{}!<|a+ks)sybSu{3mu@;)%pliRTh8C-zM_kn%3&ue8+k_36DcUZ|4P7u4Ny zw`&^n3$(U{;=%%5&(b4ho)vCYSF5|#jI3EzJFYIdKD9Adzu4f@w6clUoZY+x`S>Jc zh*gmGU+{3lvAYwX-T1R{_RuY4OCMml197M4BQVAmc)PQxKTii|HzU^i00Sk1azVwQ zBgmRgp@x=-%<(E}`JdnkOMyvRz@=7TfoC}PvqBy1Jn9!OKsfC{{vX`Z1RF7aZU-i~ z4LnDKbmoIBZwqk(B|^0&43i+kFe?nVmJ!#DeXMpJdiA8;l7DkxIh}XPp?>#_@IJyT z@xA1CDxka4Rhh5+qU;jukyw<>PJOAWDj1^ut>}=>zBr=Tt9DKo@7fK9ZHAFeVNG~7 z243FyYTW@uqX+O_F_7{CWX%Pr4?4p${lNO0KoqQh1iZN`*4qv1?uO6#pi{sdwy*>? zypOQMdQEj=vZISnV)Uh^%S~=L)pWSigpyi5ZiATY z##}XiOHT4G5Zs9kFEstVx$jmMV*20a9-dW+|*|EJpPxgOz?2|gMfTCSaYlzjP9~>vH7xyUF;B!)B7Zo4V z5;I8|n!GBnccHWHUWrYqpfsjbirWG(LYxD*0Ru4cN-L}V1&CMRT^DGcFEnc*G)n*q z0jZ6j@UmT@LA6-jMA+j#&@qq}@!=?_H|#V3s~+9K*`F2JN~?dY*4bVq)DTl$%W0l; zZ~Ae!LGCQ~74DzizqqgRY-P;juJg^~ck?d|s0kP?@DM~tUWuHg2vf|Da*eKt)5md> zFQwj3U6kH4V|2!xjG~MsnHw^XsM=J{S+8;wYIZIsH!UwkW2bY}jjKqixL8qA{kD2Y z?Sxu&t)S7t;L>!e=`8a2oxs*K>v(MM}AIXvvinFIL%{7@b)z{ zG7mU@8tgj=|8^-jX1ohY1;;QasXYq)tSj$!stPNLu81B`xU%R##meeK)rYHR0Gk{^ z++PnL>jK0Win_@H$Ri2ZrxI4a5%|Y=*K8$Lvkl+;4=OpsJMhoXYBRAJxAXB|ghE28 zs4YOx+JD|8P_i{HR)l}*|Zbs&sFbL z+}z&fipu%*dm27rw&ZfulP=w+p$pFq{=}=r4xalCQ084AwV|jhu7Gdy$7+}3vjF_8 zhJAlVgxCRuWd)o5(kjCXiE?DgW*(X<&1x%KXGiWnOdOqz+}a5qF$1_I0srbp2e-|) z9Ix4D(N@xSx;JnJajShN`soCH6~VfmWhcw@jRJj%zD`fVeJCzsEEhT)g!8IkbmN2p zZ372@8>5i59q!~*Ypz!` zV-jaJC!OoU8|stgdoLg)_`AS23c`K{t88K0HYM zCiplLdbtT?z@Is&NBQHNQVn0815H>3O?Zq5T+p#QQ{DQQ)eifc4m6idE)fJ?4ko#Nr?;pI`o8}IYf=Y!uzzb}5P{ih4^h4aE1#ewoSa-XQ#FZH!C7{Y+ii6KHtCKt+uQ@xpGg9b=@EJ0~?i%qx2z$I>QPB zuZe^%S4=yFw)DhqQxFA&pzXI&OTo@lknxt{%xVInVFNgji0-wgAYY)clc=#o0w)aw zC#;|ge)!x1?4bm<%|rB92EXNkO8zX69`1an35m z4G}5sqREiI$k072hgHklUnx@J)6_L6>tZ?=_|xJrg~#~eofgSfe2SVH-zAr!3DUS! zzHSV}eTG1s;{@Vf3OW*j0N+EFejQlTR9B~3&9T4lG|gG-+(O*r${{6E9Ni7>VnzjH zGiw{`5UkK(uK=}!mvJ)a%q74oxC`5P2{tv z)yg~ZfhmL2dZd@7S7nst%*#tEnpn=S{9bdkwo6^K{*L~Wen68FUi0m35<1c-h{P1s zxoMCg4f6wO=+~s9TIq%x9qy>Rx#LYMFWiCh27YCMKP;RzvT>G-cY)xujFS?y@TfVE zM;&73802nrc!DZ;*BGM@gI%5lO@eJkL6f6F4ai6HA&XeZ;tIHO2Z$vY@>m9W1i%9m zz;6rKt}A%|wu4iq(*p+M58ml?DQ*Lrtk~pHJ~>|F&h+`)H`afwJU;nQ`sSQ1Ifc1X zG#d)75Dl5gJXu&d53BnO?I;0)I0~t6hL@0aeoxo-8bqwsaht)mg?4TZlPGDP3%!3Z>e}+`KZdhA+O=F0kh9w-%}88!r_g` z;LHZt@*Vu1JG9UXcHAGk^#l&x_`b^AuCfVh7jT_q5+FKWB{> zupRO&Sok1lO%GV@V`#@SNIwq0{i2ii=IRH}`GC*&P)@|b*vz>4qDCFLT;9;r;AJ47 zR!6~U0_J(biwuW{xPkaH9Gd5ky-1C@8`e(-oyLkx_cn~YHJ>)b+NL;_IQ{DqLX)~J zc8mAu>($?Dg4a0Tu>ltXUInxSa%6UjZPB-5H^yy>zZw5Dou84L5uLeEwL(Qy_sJca z8>`dk{7O%hMODO9T30z&M^)di9$Ry=Wow!Gb`7i}VZ~BdyG0tBC~^+_IvgmO(>* zARY09jyKOeal+z_Oo)luFl_iSHtt0GqEk8u+8qp37uvEF9Nq{Ho9?cgHNsSrcw({B zW`oOcqKK#>*19frRgnbb-LzcyEgp|O1B{p(HPD?p#A_KkxZw8~H7t(&8R|;Jj0gAsZYVU|$ z4ZS`Gx(vFG3eAg-xNn+3Z`zT)-9&O2D}cWzz%zJZh*t<%az6Y(OqOy+W>{grqCqHPE_ZOE;}egXcXEuF2#rE!|*TgX9e#U2t&RKr;1*P3}HSJ zt%M=(uILjJ6B8G6FNUUk6Bn0Mka9!yOtnyxs?ijT)}|L;FY?umFV&V-)@-e@)E|J& zoyIxH9oX9eRL&kiBYuZQG3Ki-meUI$dLEWSbo~N6%75@C zZP?LrM3xhsR%SYfim^}|8s<_|lO-4uH}dzt-A2c_dN=W2pCu{ViExk>F$o9_0& zjqd*3eT?^ArZsCW$BpwBx1Kl5N8(fCGsbsV06pM&Kw@B0ps#>0@E7bA_=hBf+zF9} zR)$I>TP5A459Gn&dEqVLt0HKTXCl26-ci@1IMExTPe(tAd8d@eEsNh6KRIzv()Sc$ z>YKEL3}I$?W=m#&)pgZ(RaK5aJw1<~SCFU8d!6@hestlg!qZ=hry;+lBeS4mvNj!^ zp>D{D+%UJs1DO=wszmM28r<9p9qA7p=?Z@}5eRcGxSD`?G8eH@gIHMtd-MT&W5EXLAX5e4>)Li2929%I&uM zW$*dSZob6OV$ny%&ZzOq$J&1i9~Y5vzmI`wnz+#m3rs*16oHHXpcc9r78rr`p8&`H z?)XjfNuI$?#x7(3%FXrZE1sBzXICm`RsYr?YQG^D*U2^030yDYP~r!AvbTfcMao;e zjrI>b!DZmm>xjB@5p_(js2Tmf>16Cz@2Py7=!lrrWm7BGRWWhZx7%np*Pdp7%3*->5@#79m(YbMaJ3~*b?@sj)ic2Jm3K3Dqt8K~X#S;; zkwTitAi6KUFQLh|g_lGsqn<>MjERktB@RzIo^&y(Z*p=@6}dn1 zMi%rhTBVy_>|PaFom)MymW1A~;9IUZe&PcJ03$7eZp-lLipXeugUS=qSP5DIe^?G_ zSb~m2uU|u-tr0N?K%WW7ppEz9_W-9n27Q8dtcM=2?$81A8Q)&(kJfc|AMJNKBofLA zPl;p5VU%l>chnQK0Sr0gHuEd1FMBXMn0=4^owJ@ho!7)`;mz}L_Wk0!&+i$Z8AuJH z1*yYMhe^f1N$sV1(tGkb;ezmE;YTB4BM(LA#+Jt|jZaQcC4?t_NP3yPD&=L$=v1dv zuhbrCoV4n+e(7x)&Y4d#`>L{4`KkidoGe||svLrbpw(&%wa>NQMPWtDi=OH}>b#2Y z7Jn@kloXZhD*0UMQeIForE+8yt%_f@q2^Z2!P+;q|J1SS#q}@rrG}%19!dYX~tAA*El!1rH=lw1*s_5y*& zBj+80+)08{!TyleTiC)PNNXbedLKyZIi%$R4|E<98h~tp4Ww?Y0eygvp9W8K0kj=C z)jZfv57^FGknt6G8~A-x4{=@=gcEDbn}Yp@0X6K!XDX!F3%0cfs9{a3sO2jt5#H%9 zNHp*kPW0iGHW)u4(HY2fhavK%!0rda!uz*HqFQFOh47Ar zDBEs!0d|M%VjcE4{^IlzjpBtaY{D<(GHM;|EbSk9wEITS=bp`seT@B#{@#h+QA|E3 zj+4PTjc1nna^3uH@lW~d0yhS23r-Z=6HE=6A38~RUz9CvkwwT8+^T*8?7zD zq`4Q8^Z>rS18K&zl2MT(BW6%hzoE6yr2hhm`XZ*>LJS#(98ZK(lDnv4?8HgQRbAiu(gAFM)0P zK+?{LJ5oqF6M17XXf^)44b=?eYk*#$gRs@XkUAOk1SCOLy$G}(Su_jY{1i@R?2zAX z0F^@WV<7pFkn}R3gYJ;@9v~9i_NWow#e_o^TWf3@ZC2Rqvg>2t*C~v&m2Sbf!^+~v z2fYr;44xpIA}SFr3cC~bCUSGEPimCrUOul;*qEu$LB_ce+>;^GISQHs&odt64D`Pb zI$Veq9l(l)AWCk79-e`}7XlL*-?uis!4%%{nn0CBwT0Ajt)N*AM!OcOL$j|xe4M` zlGTzwB~7yG@a^G)6bwb5sP55yqHjmfk9nUElBh^Aq|8jUNhPPcr%F@1WDLuw&+y1h z&s>xFC^JL#B70NLK=l-Lh&nv?c5d&y!n{3sgESTz2hELwb=uR~K82$TiwchwE-u&Ih&$hE5iOHUkOtK()pV-o_XU4g=qO24%zBkfEdd;Bjo=apodE%!iH|=V}~- z*YSmZdO<>$PzyPV+@n9DUmJ9j03D2n_jv+Z3lHQ033`G85i_m>55+-0%R!6r=SQG3 z@JgegueQ+F&4{!c@oDVz-2q+Qg1B-ExalP-KIqX$Jt7#h6;Sm79RMAH&fW&)LuXqN zq4z^WtbquYAoiR>?70LQc3X&4ekaqJcBzriMYttdFVLdp&pCARIKC$Jj-ZE z%XnKW40ie+aU&o08H(7j1@r`V+8v(aBRD*vgS+yMe%T;0jd_EU;lD0$g`h!f5L?Mh za+iGmB7hpo)Q$BNi%%ES%Y6iZZ_0I3LmudtHieHJ$W^qgrI@`}xTD z%>2{eJ9vk5iTtnn%m&<{1IlrMCez_R%gZJD07afzo1y4sDkhiXsN&Z}Qi zZ>L|XzpVeRk2CBuh?=zUpe?ZXDe$5fVCzF++g7mYXYi)IfFAY$MYzD0Z=jQ4B;t$> zs2;>ayeWk}`=Hk716?bEg!4gtpl?C2(^t^9tB~?zAO;%jaS80s*rzoEc1K74y9%~8 z6;;-|@X9|x&d|ej&`yvsn>>S303F@kjscCbGuPIJTUpsZ zcC2=qOJowgTnnkMXdxa4Jwm<0ycT&q_qJp9WnEx}vuoLHJ}!PP0*YX!@DJfVp{*!X zbVzhWbTF)1vQqj?S|>Xs8z)~9J~oOM`RN=n|G+$-gmG-+B^+VANB>B$+2 z%!jJ!>f?FC3LX^Dv~Jo|Evc|~(VU{pqS?BA#k7)9RfDVhHxAM#H>EYDHxXL=ZxfIY z6R~mg0>N3+6a|w-nEGpuS=_g^wEyDJ!;yh2#K&kO+ydSHc60Ecd))Q- zzPdk$yl&Q@AkUcL)lEYMsb7$qP$lIO2tDs1`UHhl@O5xMO z^rFGK^Sb-G`Nf9f_r*g>>`Q`6zm>;Ve65J9OsITPIlqck#je6rh6v!l)kh;MuK-F~ z0iF#9NuZrGQIop|1at%u<{_fVd}P^7Xr}QE%N@{6EAS`>gn0_+cnE5rq_-9k;WYS_ z2lS!Meo!?Vt)7~?W__gwT z1@;aM4^xG&j}Sys6)w@dgw%w*1Wm&5l&H*ks#~gsYGQ7AURM6We46ghT37ukJrUTP zhSwq7VPUwh4v!XX^lGrSJb1RrpntJ93+$;D>mLXVegf7tuLDP$ti)6kTWovIA%;M5 zJ?ol7E@JxdW&B9KO!ijJh?|*JpIwwYId5#ymZHEq^p4!7;N?38y8c;+4Zh%B7*LgY zUq35#YiMk@2khTCJ^3j?;{?_McR^;@{qQl0S5eKecheuI$7S5i+)?0Eq%2=nzOLM> zhJ+e24La(EzH2X>-ZIeV#lU1V9$v{3;#X0ThCU7hQalQJ4nB|WwDzCfR1-Nusd+6w zD}L)7vz+FT+({Mm5nh|TmNA|&d-&Yr_x2wU@F=i4XlYP!=rB1=p^2WRJfrNI;-5M- z{X^EG>@C?DIoUaL)D~*Dyb#T8&GY>G#kA7XWrM1C4Y>_#8yodR!$ZRhLpTsT3l$%4 zRG^=OJAdOe;12BdHEcB)o^UJV@h|MNFYGiO*fS6wkOZXC3v&5@i2D!-V+CT|6WE_6 z^oj$ow*|V@AD*rXd!CN{#(*vXRk*>+ZR*r3b1&G_q?bwNU7I_#V(eWVjyWn_VqN+X zW>8mCgWb}-mwP{84q&O+MQqoAJ%W7#ZpgvVNg|@CXIN5LbJ*^%S>gzBhFB%0OPVB? zB@t1PQT{PUW4x5Nly_s-#g`|tLTibe@Sx1 ztEv?>-Ro298PH5AGSZ&#Zkxan1}twtD;@LgakCcM`VP_aHmXG_$W<=En>_?R;UF)0 z4sRv}=F5Ur8t);l0@v278o_&<-W9+)>tU(8V3mIXvup>&+!kRz z88S@J?oLjbr?C&Qo#Wu_s3tt+cyhb>O!M*bQTPlGxF5JEXrPE8=8G4JTcSorGo!_E zSK`(u>QZY`@8tC=6c?>8?q13$Rh6ns6UsM~A1)_CJE`!-RAkR?z>aR1h3t;nt_M6S z3p4OhJBQ}>16~aSZe4 zn87UB(2hQ~PxdDX$&>)M0=EL*KHhEKG`~9kWB$uUTSU)Am%@6;ljK2B(aM^H^9f;z zn#4~jb5b3$AFH|fz6EoOtZPbYa%vk5cn2KkUZq&46fs%{o<4;}x*<}`1De6PBRVa` zn20Vx*QN|O(!2)KE#o4KYnEfItgVk&Z?surH_CpdeUrlmhn~)}Tx6C~mYaAtGsM^1zhmsfW^-8G#vBGB>Jna@MQg z=MKsD${$_uTY*!7vS3fakiwY4&4nw9eku7@Dym4UEUeYm1vNG_R_F=P7y`Q92*_@U z=ut&4Fzog^;%*YMn8}E{#yaLp#NGw?6v4N$k!26UrxJ140a{#z&&9Cq93Y@^z^}!i zi=g??Xfp8N4`{#(_^)`78vaWM?JkB7_zl_3ZD_X;+UyF7hc;h^f4&IZ%S8v47;)PU znz9!$I~ZP72P`}i(ijI{QGx6w9+-Fu;?hNEdk9Dl!ply$y@T^4#PCbdtQpWSGDrYg z0@?^odjo&}3Y3A2+Z9!_9-xOnyW3hNuprb`p?N#tSDX>Myg(;G$?&ajKpv3%bj1In zPOUWcWZ9$pv$@iwmC?xE@7&xlk0fWLaM#nX$FUN(bvIGAM{_)xsYYzsfx>S z4)JYCW0O77CS>r`sse%bs`gU(c;mt##rxtj5(T>%2~td?RVebDe!a9rQjd(0nwT9cN3>)oX&Wvew%AoG($J7a$2=p zeR;h*CINdPTSg284!DFEvludc*C8?EYXHXIv9TZGFwWtP1KqKg(+a1pPQ3^lh%a2j z$S*0ew0G_`UckPzvA3}QWY6Y>`4sz<`Cap?4ljo>Mg z6~$4uOlPU)NZt4gjupSMMOQTswSq?lTKsq|*)g0i^U zjAkOTKFmghC2odAZUhq}VnRvIds^!AQH6)epfmX-ud^TEz8z@i+1cz#E{ z;3;B8Fn0L{erzYWeG(SKg>~3K43j%m1ehCX6=QdNj?EQO)SZn!_fuIlkoqfx+uS_k~7F_DUimBO`O; zo8ykfNKx+O%vsuVZ4P2BnU zI>b`j3$_CsMo`je!CqIqe`D@u9%7wjsr__(zQ5FemSCYES5Pj96knAnWjkeL#bd>9 zFDD`RThtyB0PqW5muP*Fb^0xGsvb&Xm)tp+NT7Ip6Z6Hn(PPbv^ zQkyG$3*J75?OcRS|BC!28JxO~XtWy<(+d)O1DiHxf5!UUU*OU$aLBF$_Zg*W;!K+| zpcDU?|4w6(!zyCM_$K+@^d$)?8G|(=G^gsH;%1TY^}HR(TFF2NUEn9WgS~8KB&vys4~9t<9LOeNft` ztOWetiSHi;?6&|XAHCtn#{;EAA)0<^6?fdbHTs{Qy_YkbcMx6aGa295nY_cIe??D4 zj4%i3*zn-k#MCe8|D`X=9Ge?g+@of2qebHr{X}@1zgvlj2)J_wT6N165+z|0Asuxc zH_X}cY*Ao$-=KF>VH49pv%uBvh%O7k)l}$R2r@w>C>9h6ymT7e{Q!^j5s`s|h>+fi ztWBMJ+nvqv-_%d0w52epj39=Hk;<1yMUlxdHE~li2IsKLQ>vfWzJPq6+(LYX1^0l@ z-T+I;g{2y2{b})QO`Q?L)L-Ul)7zG6uXbGREF@MCHLi88FQ_v-&U?RMjMFCV!%%(7o`Hr9hG0ZiQm% zGUgP)NAHHtt?bkfQ>T{~?oOF`V(Ri*ZB=HIV!OwlM@*ybqVI5j!0N}b@{jVT1P%zw z6SfGgMe9TxWJBafBKIh+$Bv2LpKvH)RMN!cAQd~?E9YI#XZ6_p{|ZhQ<`!Qq9$oUV zVnnsF=6ubf+O@Tp>r)yE8h`V{oG1*6i!GoHz`h61k$QAriz)FBMHBl1~jLNYKx zC1TRw9s4%v!G4Pc)}D6p_Bjse&S5UET$hnvlcFdmD06AS^g(Xb?tgfOdS3M$<+aoM zUuFuA;!g-X8N`+Kk^6-gg+GaS9q};onnD&eN?9IzI(BFJY4tdbzW7^lM9J=wZl#~g zHdTM9mp1SX@rE^qdCdzU#b=P99dV5dcGG@O~cqvOL9_YJ*pLl>QY zkgRc@#!BdUEvzmB-AGZ8FbiI!1{II7sCEp+uKxpFgQU}dkd}hJ0wp~HC!&oO3cULT z2;v<+$H5ldVGHje{fmgwlRM;XvVhZs5kwAgH{F?$#qA~dRrDyVw_Gc)lYa{D8L=T! zoF>ldn^U1~&P~!fl?a;E%@o`iqoPyO9kp|J^mltAGIJ4|xXAK+P!GeKI*`(JtT`WR zGUqKO`xsz7+GefIEL#_Qg8d&36A2csFR8ES0#BY-y;mgTwf79BH8Y8|lqF^7vtO_u za31;o=X=WUZ~mPCNuVrnQQ+gCe}j653<((%@+f3s=&{gmp_hesgi)d!VPho`5%U!L zqu0eeh$)IanDi`Ved>->%k--B30eMG_i{otJ2jOBjKb|j5?!tCdU0FvZzYpJ#90s~SOZNLLpu{;bsETs1_W$?jQWGN107Z3 z?CBruT@92(#QuN9{`EkxG1N4{Exe1#W+%oz>4*|0i}fUap+95)!=K>K6jdsE zDL=?+S{mVwmdib@9!zQL`1LU|;-r!$bnUaYDHS~DAVvK3lmdSfsA z|2q0UIwf%g+;hH@gJVS}vhS<=RL-oXqR)nolMN=&j-PQ>DBivhq1J?3t@w`K*g@Y8 z4g1+Qx6<~2?Oyv^4n2vsr1g{nDu@2B=QQSa_E|QS|1~Hr)LnK&@iA5!XOrZf6q2OK zNXb~3`A?=;m7|)G*Q0!Y&6%2Kb^Q_X`od#0v{Jw?D*A}%xIaus|GXElhF41^Xa=&B z{-D9Ip;eI0UU-lY$fgOIh_Ux;KWykbVukTOjPXs1huD1qJjPH&=Fc78+}M|C!jpbJ z^1!^Xm0@Wm9`G+7Epyt!aknoLXKN;pnb2{Is=L)Bt2Z{|?3DI&hfIedj=7FZr~jOO zaTYlL2&&iy2fpvTOMNsvzob;HG-YP{+DgT zSO`}}#o{DcKzLyIhzN@aUBs}+ z)W~O%UNH-mE0jZH$H!X6TE+UtspD3}t%|!47azYOVNBw=q`OHyl6e`48Eu(Iv$y92 z<;n8mG_{(?`A_o8v<=!l+Ed!UwcoUp3mHX+iWcbfx{P9N@$TZplBAN=C9}&0R1B;d zUzJ@YtUglT&CuPTGyG#%3cof2S?B;{p+iCIZV_<)LWE|yw!iz*5ApoSEfQ|uk>T&q z`3#>|3oZN)q=($XA-~=D{D`{4eAw3t_>;lF#nG^{P@s-=KvIKHgLnw+xecG^AyW^a zzESWuI@nwbvVmAchnKLs(U9*3Xd@H2^cc>}E+R_2fzKQUnH#IbJmAx(s2q|Y^G~op zNBB?%Xf1qH5bUrFel!_>-VXW#oj3?T`Wdy2A+XJHKyHKZIUiQC2U?zl&o9vQuZXA@ z;A8KCYEe0z0Xq!=St1M41BvC`QlM8@f&2IhV|RQzZcpf#>9w6^{@@lAMN?5K0pD5l;~FQ6BbJJc}NnJfZv&7oBh~ zwJxnWZDRi2GM}1X>T~LU)R#7J4LpON!4gRIfLwsZ_DPOreuK_CxR^wfK8@D z7O9}W!TZrbE*F8Ya>4gP#492)_u!7`ZSGzgL9OD}aI<)Shq)CPcNNibmM8TNnUz*eiy+L(X^^T)kT<2z`5my`5hjZD2{n<@YqMesa$A}vCGUf zyV3Zarn607LM8bn>otqOj%WAu+2ZT%CkaXou?dxhHcJX}dzI2ES61GsvaG&R{iAw6 z-YVJx&2ED{@4@q+Pqux1=4mpE?UU$N*#8NJg*u1+5uuAIjky+6Qb|KsJG#k%EhC`q zGvT?6wQmi4>7jPbiGWWst!1orKXwaymLDgL8~SQV_M8Ih(2+MNJwE@=0^ z#`T;0Se$hgMeXg!Y+x~b-};989S*rE-y7}{L5vuf{4sTt`u9@bQWo%jEb7+AJL8v8 z<1yyi5kMgGfw-$sp?nCmK}LPo`0~yl_zgAaHfVn5{!G6$kT9Hj!?VDzYf%5BO-a|2 z?j|z|ZdKDz#dHIT@x+}GE@DtH@Ly<46Rah=bAP6PFSl`Zv~$@)d_-yUPYc=^{7sM) z`bBOL-7lGvnxB3r{b0$9$`92vJqfo{C^+Gvq5F)DvuiH;ym_!`Uz}hfqG6@Ypi!t& z6yui|u-}icQC-Jse@=r55R$@hx2#>iB5?L<&br*_n05t^bpuglY{&om^GrZ*yM)o# zdjjWyPpz;zW>0K$+4PDvRk~^(vV0l5h)L!@tNCX=90G4PNN_90tgWV-y#IQ1V|*0a zh!@C4EAGd1&+=;NhZBhl@O%!CgK@^-Tp)_bj(=sY{T7j?lPhA^Ra~qJsomOmwy{!A z#qHEU;9}fJ1&Tm7c)QM-Yp-*iNB)ngtBz~)>cVyRuI}E|R>3_=LV^Sd5FkJxNJs(% zNq`_hf@^SXyVX};-DTC)jkZ9&tJ^B8to@!hZvx*R=a-Vg``&wxJ?GqW&!u*w&8FLU zT=Mb_7!~?D{6ob4$k7stqD*l#?vI2b<#g3G)%c`KNt2V8C*RMwojEVNI)|IPtN3e) zqO`VrS;Yw5&Prx&X>CpI5p-oZ49s4Km7hkSSYUyEkUt-c_aRVGE~2z?ko#-M2NHXD z-62CKAwMM7VA z!VNsIrlFucpm6+L0cwF~dx>au8{+=s?F{589T9EfmTrt=9S{f|@k;^p$PxN{12Ufv z>9mC|tp(izuf_m3eFsg$x(tLTA@+oDHiw+f>#6VP9;H7A zOXSWzT28lVb%apMNq+f`LDt;@^S2iU3r1ViQ&9TmTTz;~Ni3$Zas)g9l5m)q=K<*uu zZVh7LEO<_$1MN0=%@Cm1sgN5hc+2CcFKp`^I~gAwH%+(7v^Q9dXZ7+ zeM+0+aV7(qepF@xUy)t7qJT^Y*|f0ug~4(@<$BO-J6|WQ*0V(l!Jri;h6$=var<-3eqo8+oDYK&5^DZ$u=zIN*2N?}gtDO?c(m z`s?TnU5>xV=p2m^PqbP)Fud7CT+=AKD2J#6$p@3!I0e8#)a!zMAM}uhOrUmFzt&wb zAlGCIeJkSt~k3P14FSx&V~0o z1z9-KEgnSS>Ys2#yQ6d?8lJ;?g)fG;u%To74{$~T4g03d6O5U3sp0Pk1uDw+i zP|JYEGq59u`xT&xj?lW*@T3obl~;DolRR7FVU}zb#n{aF*Rc=#Bl|gbkJnGWF1|Md zW{6INFvE(%TqAjrCnW0?smg@xQ#s~ZiZ&*9ZHZ}Fzw!v3Qdd*mtM-@Ln!1_wb@dcv zMhKh)CtB=_VqwYPS~gBca8M!5g{^kM8~8Ynhzg!gNhMF)1eyvMOeU8Z%zVHZ z!d>Li;=5BrN5mo)SWhR|A79we|FC{%fnJ4> zloJMfV~pYyR=rvO`h4@r3Sx$AjfhnxB=t?6kX)X6E^kBC?y8>EKBx@#M`d~t_Qb;s z{oDwhw?tt5YQn!iy?$e$mXuCagZxRU*a zb47SPI8t;^^g`4tihZ_2c8B&%)lbzw*R<5^skv4&z4lA}RP2Fn2X-0) z|55>)bQ8FdI8XQib9RNMo&#Nlww{8`UV=ER4EFUa{Q7^LGDCJfb2N>&$nrid8XtNh z{A~KEtim!Eoc`gVlbQ$4>-eJ13He{lVJT#=zka=>hWL={{y5~dc!BD=ijMpqF(av= z-ZIy#BgYH7-d;GXncb{1+qSg54JDKkWQJK;HJ z!6p!ANXB9I#Xua1pnag*@T99Dbx$FE4nT))ooWU|d(yr|8TMI4sevC}Z_XkH9&tH))&L{RVV z77#1E5OhEIvFInUPFy7(8qq6iOjKjET?{iOIOaj@r`Y}R=1H$oXzCDkdRj_$d-l1U zg<6w*ul&&b`25s-PGMEy;-aRK?8@+}zp92;pTVxtby$_r*z?^7OBoE_hXX0H;E%!og**yfAkK~)9Tg#)866ZeThW--Cp|WOP5y!WQ~8dMR9uPwq?T2(5yx{{eIeOmh&3c(Z5qJjWPZ+lR&eB z*0DaL!^ecr4DTuV5_3Phw19?P6ZGc-mo7mA$$r36{Rwc=FTb%8(1eV?yt@TRWNWi( zvVX6l0daCr@9&Ctq2Du5%X?Ta;_Pb$EcZjhd%Lm$vkYs{Ro5pB$qQYlHm(er8+dHG z-2AlpXY-L(*Bpj8QXEUUH{7F2v*CKw8fSQ0+!Lz~>Wg^9s1ZLt}Rc7+f z>c4Z>myf9YTp3u~j!1nWyoxg-h-_F|Dsad=aOpSj{S|U?RAd(_U}=wmHp0_vg7$cJ zt`RwgJ&Rsjmf5|eL^47huW((RrLG4(ANewZmPPO+VbRYOuj4#a-7|V*@UvcPd8NxM zE>&*Dz4uj!3vH0Y(!i4afv1P!$#V=(Hs&zydOZ`Y4vv;I$#SD_#!Syxl(E0$Xo;kp ziTs~4?3)|Vf*2 z>oTM+sgC@HthTxAepG*tEb%VV$`zZ;FcsOl*oDx3p^tR3OAr}^V|>KD;8f^q2|nvVyMe&|!79H8jfL!c!k!$5-yrsx4uCcy`Z+*k6$}>F zc=O|G6SY~YZHw(-`>Xa;>PO~L))40nZqs-NJSw~?KCM1OB^M=(81KZh$}_4*s<}x~ zsUy(fhMSX?b0^1EJ1H-_AiMBtp{jCZGYy<&Ap7WuQ+AHH?*sdpplZ-*&~4y2ImSK} z(vS?x@D*d<1M83odI3Lo9MbU!`T0`#jU}*s_0XBW3|uwdSK(|@Wz*AELfu2(#Cpss z=kyRilTMS>$!^JZC8el;NzF}LqD?B#tr)JGP&=)IE&qe_{<3AD<_ta z|3`F5Bkjx~lh-B>&8ApXSa!1+Z!^i3WjB$MLW!alQy)=-XkoNIj2VnMj8%*Sj6;kV z<`vd+mJiq3*~2-~d6c_{d$N0-d#%S-uNMAs{#^mbPwDqgxFRT991y-XVqL`Uh+`3b zBqO7}Vl;|O#o+j?_*3zB69bg{k`&2rl0#D7rbyN2)eF<=)25{-rPDGMSsht-v+Z)) za;&ria?j;X%bTBPnm?zoxTvUXZTZFW=M}wm&vo9F_p2rK1@#viUNj^(u4qhZn$%2f zKHvN|@NH`c1t( z3S}W02!tjqAPD)`KY-UCL9+7k`4HCZIk2A&7R?`8kO!_$fERd#oc z=p+!!NMOvZ$eq+-S7W{(Ton%Mn^5hs}=$t%K!x0V28pPk`i{hevsiOpYtG ziVq5er<@Nw^B=Mmf$($NfHkF{c+gppBQ)WLG!^E)6T4!k zFkd<5^B6gfv(P$gc&aNzjDgPtjFCL=E;XDR3^Q3{GSpOMddqaU*+1qpET|UKEN5H3 zu^eh$Z~f3Z$!3M!dAl!mqwOj70rq9~x9y+UzjmNgE>hN0#k5pf2faI^KO=?Fk6FdM z;CRuI#u~>?WcTLu;S_RKaVBsla+|r+oNJwJT?$<I8+dPJP@;!%mE%REyf5u;me-ytw;rE352|kJ8iR%+zCiYfYsq9ogRP&PNCoN9emeihfHhF5w zqm&ADllq;yCDmMWD)VOM*euVioUHt;`t0WHk2$-w=e2jWb8?lree-7Iea&YTH+!>Q@s5Zf5n_@r@6)1OT>&5g|t$lOw} zA45UyB?Y^nxV8#E=YxKO9t~~7EsG#i&~i`$;;L-WUeI6I9Us(=`d@r*0SY}1Yy2;~ zN`F{sBJMg1T~kB1c*s}xfqwlAnhS)$gV*T>x(oa>3v$#O@-z|N_%G<$W<=vZKz}0# zSpjRV1|0_3B4$1Y{hJF~3F?V__eALAC3vX$u=wd9IpVS_@KTQWWPu(MaT;VZ5YZ14 z`Z^Q;CVJJ|0~H^GcMw5;m%?IO1EDO0{MKMs=TFcLkT>-B3^0E(Wcn&R$N*GX429<# z2~Tnma%~NLRzR2Ypv(V(CPA0c#T+*#3-x`8`9Qj7K^I`Dry*)t0h$WDs(_x~geSTI zU2j0N9EG1>K+i2Yf^pMlFwT18)FgDi2zX`>uIk(}+WU0RjEIb=40%R$#u3f7tXJ7pIR&``^6uv?%WukG zTqrK-D4kJOq+3)OQ#HI{N#jabskyLFt{^`Ab5B@u79`{Zq+=v-%rngtkyuR++fgltegfbciG^7 zi4&D%>``m=!n&W0h0SEzct77zKXImbXncPBu5=5{X^myhB<*DFgS>!zYn+Mr2a=o) zi5-fV`%gSS%z!_M)g_u zG-iJcJJuuqeQI;sv9!h63v^DpQ@Zb!0~%5J2z}mx7`Cb%w+ukXwt&7M|8fSpvl?jc zHX`f@_$?J=`(Nau;*kZ2hpdi8bP?4#8e^pj#V*nD8%x4D=X#n~@1uzr7&%!?r%I3hwa}fpbaN^tx_rC-n_aQ`-D}oJ)F!Y!p?E(436bm&~OIyR5>_5wYw*Pfu zW@w#Q7qcrlq{;>LQ*QdqBXOp61Z3U~7HKB*Xjdm6jeE&{s1!5ug50Nl>Nqy!PLv40 zZ~UIzcb#h4X8DV?&^prkhxJw)OS`4^f%d5m4ip*n5_PGghvR3*e5X;)Q+Wq?W88mr zKj8k!^Ro99@AtkB14e{IhWs098Zk)5mz|1v6(fuNRWT%PN?bymuhKhXie`G&E$z{~ z%Hpz;@1@&nCp64x_^m2pm#u(1*ka^Km!NCt3^WtmwWPue@Nd*26B)Kz{I0nb1%T5avqo z`w7SbcIzSdz7Ae!E_i(rR0YlDf`s7vRM@d%ATR&+P}F*g;c>%o<|+)?t1x}%oniQy z3-3VoEh4x_Mxbl-H}nxdlkw+y5xLgJ6Ba#81I+K*{?6RYy6Ci@W8$)gx7&m5^}uI9 zKwZEe;?%GMVKw1rWogl7F&AU~_CoW2ESm4ZD;HiiGCx z!|0{(Yi$PW`_f>07n=03QZTYyZu8oBPleBf=Yp>WH-u^=>m)7Feu)8zU$ZE94inhH z4UwxCJVT&i?~TBrq|Mcs%Bk-drOY=@uiYkj1_u=eu_Y5?hb3eutkziNe91XhL@8F4 zl$O+$tS=Fl?x><53qc3UbwstjBX-r0cLi^WnzBzAeFykffzRv67wrZ@s00eo!X7?> zJ+uZNu45Kc4Ki&!Z_#)02Gax!y5&a8O;*#apIM7-v^LA^F4*PU&!P;VQmA}t5_LL_ zK^x8RVdOBx%xdORmYS8$y2<|8=^SSXx3BXE=lRZm@us_f=BIiO@;&9t5>Wj1`lkg} zh0F{a5`HZFXv7!EAJ)Pt$d z)9TaDr!zB_W?spBoAofePflXaZ0%_+FYiSjqu_M$lM-6_fpU|I9=c%e^n#BChVKZxVLgN6cSaA6fsb;t}gu2OV&F?y+u{(A!o^6aX|)@p0L zadOhfus2M~FX;mxx;*v>^;{Q2ft0yJ$~+)_ff#czymF|agPF8j*Le^#*F`Z#t7?2t zqr5iOql5;ZV*DR+Pkn)j&_0~n##qC2aGb&!%jI*0+_4;L^)ds#~qQ zsOwSbS`}1vxc1N58?~i%ck4dXEvo0$H`PyT+|v})Tnz8{ALOPCUhyR?>oDvEe}pxy z0U{ty#g0cj8V4Eh#{SkwAcWQ6w>h+L1}Fy_sD#&<3gmYMbO;tS4S44YcwGbDZfO@` zrXh$s&@ThLqJuv~-PlpkR`BLE=+{n;Qa!?J3=*WH@SV#p4Aa^GTJ4;p`IGAm=<=Xe4$av8{CxzwF)Py^# z3+eZ&XVx68wX3sexYZQV%*H+wTYp~eF6OukvONs;>rcckNtov~&>*~pjhKPx{ZZ2C zCCMs;>xOI->7!pSdb23UEXq8@qRMix&EF2ilruC5Q^YQCI>@Q>T+3JamjxUPI38dd z_9Sdh_<)Fx$bTfCq%rb#`M~HoF{2fi;x5F~5*H}1D6LgXl9nd5CEKLDObJqRGSV{s z&KQ~%oiklKFKU$~bjL7<$FXloEiDijR zsoeyMtK%)!bEgfQG;WI9Q8$KrF9AhxRhS&CjvOh;l@Ews5j!ViL55#uQTF5Tts-duod*Er)5DO7E&h!M`16uxy zwQa{*_U&9RazuNqk|^mu0RftT9-)Du0}`&J3|2FMG92}%*QW#hJ0k{u0^}KD&>dqh zcym*M|Ip~MiB^f$i4S$uDo!<}wV@s7ppZ`>YE%ZoTM|8{JHX|EKr$leXf<^7GIZ3< zu>Qs#@CUpGcS<)oE`R>+(CLMw-6E~lREzBv8?8L8lWnfsyRh;(qqriEHGHl2EuS*s z3*iv)qp;QCgCcH8o=E&7w@}%&5%O znSHdg^FmAGN`J19RL0ik)ZVC9G^iT$8b>uRX#TgEj`PfpSYa;qmeI==Hh2y6)fD-_ zGg#eUf!dBka<9Wj^ac?f8R>{9AszZXEYiCCy=b0ky~RuGGH$3x6<_JIJ>+=kx6omd zB*_)YAn7N0Lv)Xr1l3(tNTww7d$z0AUwc?LuToqou8MBZG$u6DkQrxTr-+TNmmE}v zxBzXt;xvOhav$EPpY+ELu@I6NhFXLOq)mH_w(*|-Di2ndnfwX3eNer z3Oxh80vCw_LVHAxmt2!Qk`0pgj}}HZ#V(95i=UU!o*1cQtBO?VN!dxmlR3${l%eVc zYE!kD+E=|(U8y;pH8{sRhpOF@`zrrv5w&<_@$2FVCEg{>(#+D@(qGCn<-K%EbtbxN zy7xL}wW@k)O|N>J`bQ06O|ea1nq+_Oi=83IRSp&U{5%0kxF2?)~(2!Vq$ zvpCZM@8OD!(-dGfIj9vJE5J$(hTiT6y#*yB-g*x%{shl50okNPNcUPqLpgj1xVvUyrjB?Xy% zs{VGOQ|)w|7!Go{h zfj{gWvmJM>0-@alkvGOlyS3@Z#xjqzaJI>0404?0J=r_fx1WIPC-F=7d+dKXU_!_Y z@$)ddh!Ihb8Q^A;Ipck+;TdQ-TK*k-70(W8Ns%CDY|@ITdxlbaW78 z0(Bskhm?0StZ>)qBeh94)6=FlR+}7#&~7nju*Z2X5BV=toDiNcGr7Iue#L+)DzcF@ z$T55a*5@GBXCOxT3&;V)1>b<2_44=45J#>MWrvX880&{NnVz%lPK~2qa+&Q~?K z1HZ3#gkWsIxPZe!Cn8o$pUGaScBk%4bI@GNnw>koWL~Mfw3{xv`YEzLquSA<6Vh`P z7}mJEZtQ9M#JgHGEO|zT2X=#faps47tFi9rSNZjVz35!q4t{><)Dbeui}57iHIuUK zwR>~x@^|L%&$lisEjy=ESI(&NtqQ8MtM{p2QQy58r%efa1N+hok%~Fw%^!9_16yzs zoW2ga4Ug~_^xhsb`v-n@D)0-@A8!vL14qc-0DQ*4IxmKG*4~lg+?jEdWCz@JCcj$- zTXnZtP=7PdGsF0oy6A-iYZzj-@>-0yYJq0=mMpX36|I-_5Z3wGvFH;H&@G-wj& zF#OXPAd*M$uf3s#zMb+x_Rqa0ijKH2m3>NZYF%1eT3D8Cc1p$N>bG^;`c(}!O^hb=cHCY!O|G%7vwo8| z#7W}2tM;ohwavMqWxI60*GcQAH~!VchYvt+Hp5?$x$_j0`Q{c@d+j^ek2ytd6TBw! zBg5B6?p9FZVw5wIXh|!Q64EtQ_v$k1M>Vio)3H7i;dh*Xiq>L8S+EF8vA5ie5n(T0 zKO?e_Uard+&+}dr`0oTKa>?(>3awe@EtU$0a^^gzv)(&%>}s5lw-D*?6r<_aPKFFN zxfdPdGLJ9Ka?jaS^s$MCOe6UeV=dK_MZ=k+9OpZ2;xJrSy1#Yjd%W}Mr|GY8%zIFD zs#H@pt!8@7s^-Rf|uU!uB{1P!>IjqD_K;e@iQEEgD4WNSa@0UtdZu?Klq zxvVpjf67#3(c9X`){7DBC~}mtG(Mg}QE+VNx3KS#^P_h~Z;$21nWoK7@0GJyJF~o9 z=Ytcl_3&R$p(AbZTmJCYE_gQCc|q2BdNfqQfK~&u;GOUE+Dk~bF^b@s|7GrHVP<*8 z&Ykj&9^u@>^P%TZ!Ce2}g*OA!g1p1S!$(Tpr2(=O#Ro-u!n;J7s#{7$=KQSd+PbpW z#PG=2eU5c4#{&s4H_N$H7?i*<71bQk1U0+UbiXG zI2Gi)1YD6o>sA`(*HuA{{wLrr4Srl;kkYPv{`@#y5f8OJMtLG*-$3(P>*Y3K6eUN< zo8@y{tPQ^%)kA734^uQKZYzc9y|emciF427c9eLP&()2udR+fcePfd&`Z~EFe~wyV z&a( zR@rX3zvWfr7Zn{UvM3&3z6eNR5=-o&Ca#pi2m8yKjN z&xby4B=!h^WecD;?-6MyV7$X%U0Wb;=dkX1z^(lZy7q}G_5uWktq8939 zr#&tbQB=s9xPtiGSsX1>S6P`+l~eTudp1vjT|y8o5^{JI){@Ath~W+U8=h;tmyu>! zZ7H#Fw%r+YDfmI~`moWlZLy!K0`dFg`;7N8zHk|?-$RyRkAWOPyS~PakOZT(NHQB~ zA+YM@aFQ~ZDxlKn40;*;6eElo$$aEEk{!by!EN9Ua<+G7I*;eA;7NoX!MDO@hkHwY zmkg9v$!|vwPOwk7lekiOQh8Z9IVmEuGHXzFT{b!+Bnv8chpF^@HGr%z{5 z+0%Vz_y+o|j+lj7V{JPPl><0Cg`C|WtcMKGA?~)DgYi~itOtO>96?t=eGK-htIBMT zJ{}->PL6!N=P$}!eTGYB=umHN-e!KnVyK;hx}7?T=0l5PC>eh<2eVb|>CVl(S%KWZ z9-=#;Q^kv8rYlCpspGE2i;}h^S*IP$w$X0NQxyy;{8U~Vc z%?-#Juen1<1q2;EFBmu>#?+rw+IokD-dFB8cjSqTl_xUxp6J)@iMm3*zP`5+emw$+ zfsS}S2LFBzpY%H-E*QBtPWuI+f;$B9J8%oEQ>DSKkY`u=m`}B8wR&%3YRj=5Y3Jx* zPaR4dMk{ArVt!}!XK&Sk2d% zlN=b4xKB9S;62FNlsc0b^CIh>HYXj9(LOkhtGqEEpEdkXA~E%U$HlqkAb+QeUL@PFHKF*}EJ5 zYyRHM!2P!@>^8cfPCU#qb`oZc4Ap;%?DKkFBSfjB+U-d16wKrBPgqnmqtYj1k zJ_{~{WGnBd-pKTA)HQLM!%^`OfqhHk6O5fun=B>a-(*(uzRJr<=TqLL_DjE*lUL>d zi@`*NtrI%$aG(W#;AI4{^Q=cE#4Jd^UgujUJS4m$%!#{^JTIM%e%2nS{Xj44&iNYm z`2AhFd9L&P=qdA~VTZ){9CEkc6ZX#d%~QRfYBCX7r8(G8f2Iv!x;n{(Z-Zxq-jMt$ zm&II*`JOU7rzB@Wo>N{`KEE=)abyz%Hj{yx9R@I^6LLLHxWm~AeYf3^MRCK4aC8R% z_isTepCj|-j#V{*o;SgkKZCF94IAAA349BEo(j9G#7y5q%dDWsB^CX33f*X&CuCtKi?~m;4fv`z@`yvh@ivTU9DIQi z2tteTxENNkccLB6-SE;!(K~6M4T}i+M5L1&c^%Qfp5=)ch#V4z!<}@Hq(%$ zdIg)$f!1aLBYnVFObmQ7?w%KT8~H|h_aO6ely#IG>O-eH+*Q26o+kxE!kWUyg)fh^ zlC{Wfw8P5X{GkwlMf#avWV<`ikhOo^v9T3y=+iKE8w%x{LAuX866X z-OwEdUlrLIy@VL5w+XJ3+3^L13yO^MB(tt61BxN@M_(KwIrllW?!WQZ@wf1w3nuvI z2qQz2LO+B~lQ1MtRQJ`5n&H~Hg+CWgDWcT{)D_pAtM_b3!a1&6(6WiJRBXh4`QXJh z$m>z?fUu&(S*SbE`~%n#xsIIhWZWOgUc=6Bl{wjXTec4~)ohYs5B^qx!;&hH!s_Z4@k^A`7sUf;ZIy;FSF z`t0@nCg|`RDV!|)Ic#&-{P4ZuX;JA>ny3v@H~G})Au+ubu5mVrMTrxYwn}?tnX*nf zS+y+bK~lAvm8wl!lF>gaFKa{AVXfDy$|Q`2xBg?cM=08`{o-tzcsh4mUC)B6)yFgyEeBCsC?a+-kn>1*@<8~XC6Ke5$Wu&# zPk0Yha|G7f8d3Kgtgtm!It-*llv@qj1@eS-cmOGK1cid`z(Qm~PIC=XMdqSxgAO&5 z>rUFp4t<@CtaE3NYyFA(f_9eS#`fY?y6$yn1x=L&DlC+LD4A)OwA~5^77Zy$tB~mI znzkTXiNG4Xg;#k2-S`0APy$_MLmCD{>Nf!KlP7a!xFw6+0dS{X40piHaDolCqy$8q zA2P;c#vM8Ifq_l0Fjy7i-dZ$wo6obT?ou`?ZrQ-SJnYViP_-e#Jp|;8$la==<}CI) zmqhOqzE}OvMFlJ36wCzogn$HLf;?fK>P|-AlJE)|YzZ6MjJsQbMFX(v?#N{g#Y&rF z)jvb7%^;-_Sk=K;$qfccCG~B?qJHM*E&jC3wO{IRkeWb$?(&p($6e>+CG-_~273i> z3Y#0gINT@lK~$NvJSJRmQt>J=Ovy~PNOR9@%iNsRtd&;muY6VAqh@`LBM=7{6}>$D zS+0KYs{cYltg${1fll0kOfrD1Tri&9z;R*Va5ZS1!SayWeo|iPhPL}UYD-V z9VeO+E5p+Nn@Z%%@zZDhPXXw%O8jJqyqIsD-g;dS{SXZcIizzz_nK~y>ZQ>6p%~jI zAgFGTRBK47E!JrU)@zgDugR>V%H^5o^J?@0fh@!z6XOo+;E!GHZhFqh4HdextekA$ zQsz@jXn)gmj5Ull$5N-|z7qw>A(K)Dr*2Q%n6W)uk+(W8wJ4*gt>o9T{uRqBlWG!? zcc%mKE85UEv7L!~CLM7nAqyQ7xUB-{TmnYuj$Jb1?%*JBlL7r>f=4TZI`hP6^a z_t=opV?fInp>K!b!R|q~EP*zkGvUH6T;)1D-7htDOcL)f+n0ZkQ>V(VS~u zY_Fj8X1?O2_(g;k#CgS^ZN!`~URnR(Ww)+=mSzHh?q zYrJ5cs4}cH{7!gKqL8yXa&{oID{mQnM^OB{#g7j+Jy{k4St zZiiJH4i1P{|8I_DM5l6)xUA$) zj9Q!*Q7Edbs+-(^u7r@_R%ld3r{o&_cC+oV&_&{>VWJo@YC*}Tcjfgm&FpyW7IZWw zs%DP6!xsVS?P$CaYRiR8@mj+Pk}&;kndv1b|@m}Yw#u3&@TzB z)JSCXREY34!`5EykRm%qzSW4GT}4^c9$Y5#GBJ()J449|GNZ zj4_OZ1Q7kV&ca%b#W)=BNp#{g?_5RF%ZLTnWtTK{RiCToG`L{z#1k?QimEcyff|0( zh{U5!g_QL)CZ|kPk+4)bt6*0l8+RhPAo>uZdXAhSiFVCA-8@Bl?2EX&f~p>NIr+8(JIq@E~IB=aEk~=E1B@dRv9_a(I)Z zV{|Osii|NJ_i_yWpqpX5#vIlJ^YhkgY@Z6=2q;0gH5M`4a#(BhI?~%#W2R}b?N{1= z87x#&2jK)G`F~xf6bDFj(;;~0!`S!C1o6jH7?>3g8d4OxnV<`p=oGn;A4yucJV z&U2G_|M2z}*!X+;{~Yuq;*s=$Y(QLFQkps>BS3Rcvr%i6`y#)jsI7QR=|5$ERgSE= z->{>xyg9nX0XqdWbQ7lI1hEVD=UiHSA#cAyUu;2H81oI-#m(TB2+<-PR%SLn=YX_# zWW;@e`ni&s1RpCgV+VVQYmn<0-eg|9-*%MCya+unR)qZ-zDsgdk&^Kw^H9#Bir=dn zk7<{w~s^LR>Q*0hs}Npq~8rVC<%7p87K_4 z`U!0H})E*feZw zn2mI=e5Nu&IVkONMv7*g=0L%{(mrK0>Yd19SBF-~+sg>^p&3^W<`;XAzLF5oydXbZt#P#AFBbgWwwXe<272l$sk zz-WF3c_DKOr$qB}ym31pIiIc@krq-cDZg;8d&UdTBt1$hX?W9++qkpQvFQSk*cafa zo512b@nqs`NM8e2x-tke%?r(2taZ$kkowRap?$;!vNtlj*n_HJ>QlweB@rbhC9_L& zOKVCg;06UJhN##ZcEqYXW9Jbappj3cK(fz48g5}G#0eleIIsa;Uf%gGqvbwebCpf^ zu<&a4e(L)}_#u#sPDg=61{1cNxV@|v_S_Mce{<(w8m;+sKbpaMk|QVOJ`%cTT#YWv ztYxH^?=C-Fj(%|l-v9p@im?LYUv!yeu?Oa1H=_5SiJ2KlKvG|yYdKk!tednCW ztb+q^qH#v#d4p2ZD${DyNoI4+?9GH`m1Y*^iB?+cdA39B_B)KAJfKXZEvBWh4s-tG zeBfN?%Dq;5J@@kC*YS_=ukdZW)qbgdihzv)*8=(qZv@4J`il>Re~Nr7$&sn$ClWeR zIO@0R4{B;gV#W*2JI%SQS$VaEJxa!uj4R=ltSFhN+pc3(Dl0Q8ovNIxE>(qB=U2zo zHrIx?&~TFy9hGHtL?Nhif(#9T=iC6Af$ZFBe76mB9drZU#sYip%McX~#=g5ZybjUz z%Lbl~3P~9Y1Xm9#gEi;{Y&;q3z5w(aq-PMU!Z_fc5um#uEuxR>z$k9OC@fft>xij~ zfiZ~N#hZcfJRq~lh*2{@%i*<-Lv}B~sx5@|uL5bn!&X?40pMd62oagysu^=D6D+?{ z4>H^MYlCQp{E=K=2~A+CH+lpv@2uJ%q%r<2iLSlOx7e(u{9uSU6M5~t2G0!s3_p$E zIlpUuH~iZC{`UJ@^d|If_-;vuA|~#a1m}#TjK4Gg$Z@Tl)-bS{iMnuZD-)4Q7*>L~ zVW%Bgg&WBBKZI>oW2SF`X^04h1zUXIAR%2f+98r-N^j)H1i;T?^r<69)|H9)WbxR3 zAw%f8!PVZaL)sMG8XaJ$;gSDeRd%z%??iSZYZ%uo+GpBGS4;gA{)!Ns+zUr8D!db! zMRp@2v2Av_4p(Xa2FgU)F~=0cQV*o9${JO%sWPF)1-A&eqS^?VL{Jw9Ub?N^6DK-@u?G@@Ol&AlV}}9(i1p`^HY3aXyTR6U z)#Ca)E7Qo8>#DTv6*wToG=!JP!j6qmGrOv2lgyVo?ME^t5kccZosh5c!mTwz#NX&vX5bIW1?))}o=;Zo#rYG-xQ7{i$RnFY?_K_kM;rPMrn9(t+6g9?H0$)0g?Lv34%LGBVdPc-(o zt`3_h=f`@-&eQj&kR$FjdL86|4dd;qDa&ING6p)eB+N-vsob<7=-Nh(#aJJ9q}jM0 zq^=4~7MYH-S?6ZOn-|g$aSm931uw7xIAs~IQZ}2Lm{(6 ztwSp!7bJ%!Us69(zgB-Q_)rI$z_ACcL>$9lv}X68~;h>?&8J(l_t&6BBMt9))s=0v$g{SkE{>Nn~5 z=q<6Y;|C?Y%UM?VN8wT3kfs|=vw$`#kq--ig+J6r#||4L6gFxf)`hsgU;*N66>N=# zexAmP@d`~siw`VqB%)U0t;UQ{wTX#+qT5(cFVCO&vok~*M$WYy3MyJ@t&4&BiH_zj z$f5Osy*mNvy#%YiAGS^hSzoVzjxlG{gVrlZ63oR&oFRj*$m_TPm!L)!n4O~^iBTtJ zGTw0{Ugf?yiL){zv;Qb|L2la>z5(|u!@{z$vg5FteXx?pz}buN6XYIZjG;?6V`5e@kW+%Ed_(nGj3M(eKsZV`DyS|m(hzCH009uccTVJt zx@>qZShSP+`4Dd*>yHAs|G3r$R)k!N;3|Go^p0DsUaFp7>I@X-4ZH7+9a&Vb8ve#u zE%jMQj>4Ex@Uu>~-NN|G(@r)*PLr2pXXzXe!_jc^6?s^A+G?y6al^`hWajj%XNuzFO4Kg}Fgkiv!<53y45t-A$;Pxj- zkPRph8ny@8)dU`NfbPII6F0tObgnb`#z5?%80SoWvzs^5{kF#~QKR&g^pLzbhOO{S z_?Ae?SeciS?^N)jBBgS4t+U?1F-QnXtfp=;3%Tt6F~J0*zviLZhH`_y7aQpRr@5hJZ>eUjANB~ zRC}BkGz)(ZJR-Ku%*yRmcB!$XrL2XHTLsyuRdGjUSO7*8j0hShxBhRgBn~d7-}IW7 zu|eO-mXIxDq!?*h7PB_vdIld+gDZpM|KM#m5oa+#x$vTdu8f8>+(zc;CbYY`lV9YMwwS3r2L=5bz9!>V z1}!hA+#P3K;PbF1RE)0?RyxEmV`CSicJm|FH(6(#K6}53dY|_p?{1N2@%*a!)spIS zbuOq{aKR~W9xC-wO$2Xu0oH#7S8;9G!KIa@&gK1TcGaO%05T2T;Dg;DlRx1-iFn6G z!-$O;hdrjdyyE#@Q8WWCh|yQ85Z1&){yhFfqFXj@8-RU0&^b0zFM>S(O*f8={ARNk z4K*d?cg9S`5wk@W|5{3E9Cj7EzsExU>>x$ZT2Wra;^>m-&oPTtJXMG4bx8v<#1rqZ zP|40gJv0Y(inyO0tK0;wCHkDZAhw%Apl$d&2g5kJYHFM;6K%#)qF6n-X3k^W2KvPL zSOm%f^MlPp28Q2?7#;a0a+YLetXefG`CIaXll;0n3ifb3K(q+>lI@4mp2h2T~X#Hz&JU?k$!HK6T?*S0`vWyY`Msd8gAFU(m61tt4-YvnD@|meJBAaU<${R5YwbvVnrwd{WM1SJ)%+4?RHE^a z#e`4B8-0L=$=dc9eXnWqw?FB9ZH&Isi2P={RiMpXr?;F@E+bv-T=U%3{AlmYpdG~B5 zdB4iC=1Sd*`m}~(WXqS_p(0B|!)*r)WVsztsm}(kVx#thgT7jv*3Z~q-3rMrM7CuS zK5dZgS%`Sc8TOaBbK)Z6tFZ)Jhe z_JH=Fc1iB8++Xt4MU_R*%NAG1SIZkp8^fE%wNMcoA}a;t)q>cus2$RV_IYmf2{s=WJxU%9bJZJnur+D8eZ)l=5ZG2NCT-{i2TSYkTS^O zID`C=nJZhXXEqVGH|<+#4s<$wEGv*Tmp#t;t6Kqoo8XFo;(sROuFNHRfAq+Nyacgw zezLT%rS!k@A58;bFE@2ifyk+dqB+P;xFRNSMK2mRXaNsVIj?mlR%ty}V>>Q)bF1J)(VJpQ$^E*1^?CJ&>S=fr8yP@9 z^l?KM8^r68(AUj)k_sd0i`-H-P^m%Qx^h|N`5gt5igpyy4IR~EfK`l9z)ZW#G)Kjl z`f>F&^(yrCer@0)nHwVJk?QUdd`rAaF)RID`i|UVwa05)Yu&Nm{S~sdwT%gx@yA)G zK;$n(s8JKc`irqYh`yAa<1l9SZS12NKRaI++>hU#(_ZC_6FkT?+zA7!A*}^5V$w6k z+NRk>2Np+dNNiDlO|eW{RUTB!#W`!l@K|q}K?1sJS4LW&q#bv==RSzPHLyo?M3O7& ztwK@r9|kKHf!ZPC^NpD#ZD?-j{;*NfRZ0r{GZoeBs2K!~EdxEm_`d-M+jowN%r$wj z?Oh&b_SQ#d#0rvGrGEtO=-^;{KACF|v#6uB`hF9QNeW9|Uni``&8gVUH-(fDR&OUP z-WbEPjr|!0+7#RU&Yvx~DwyZDF>X}+Y2~(@ad~Ts<`-Mn#?+SAuEuE>t2PGCtNGyc zVE|C55cM8H)V%=jVa*c^D`KoEIpUcSNkz{X?5P{xWUTVwO9K=>8CB{!uevNqYz zu{+~F#&=KHp3+ZkmwqMVbEZeu;Ow{A1GU?<_qARH#|wXy%qe|amertbM6auMIl;T?29)X4VO8`g=8EBjhSTaDv01t%rHB~H)jSGc6y5!j1^J#_5x zWAypZYXT#?8pcOPpdUQC`CFvysyqYn8iujN!P09%L9kuhVY8xv-uUq3|3NBtK=x}5 zyeA{)Rx=Aq4z0!U8S52mu~W5EozqRuPJajS^sw2oj+n!7CMq*km3n>l^U|8~o8@$9 zco9aF59F?b*BcM7u^-ZV2ME?5*+dGE>1=3=11JI10@;v3HWaW%`rGVP1qGh#5XA~np}TU>j!c8?vn(5h?9hd6E`uPl@=c?|Kn7O>O@W< z1tFT0%XxiuZ0sfYp(+CP9ayQ2hV?Z@$|+Kd$t*JcvD8^gHLv|nMYi@%*W_thX^D5det~q|K(ltfc^tl;de+1s)Q6(^T}(uD#g+9Ut96kg{8-aVY~fr#W!VPy&L^9a&Jg|%#e*1d&Q zy9de6Gsp*-pK`bB={?+A9@ZFU5^f*^qy;@UTp= znrR(o^OSL$<-xw-)YD~x+ikbwyzcycz7~Q5LF(Yt;PjBC;wj;m!$(JiMyMm+MI4HJ z8EF+&D!nZ06Fo2WaO%M92ijiwCklQPIF+0(eO7i$H?W4=kk{mZHE@6>!@Xf`6rAM3 zt|9!+5n!^#z&FnjnR|dfA|L(*-g`N`_8{PhW6(_EKJ{CO4BQYOD-nHffF+v+D^UOm z9SPif8Z)c{wqZls=0QqV!j3jTQ@6o)Ed*{$gVoT2&*l2r#~OAKpD%i`Xr<{D^IPWk z%~P!&TaU4sPEk-&sMF~2^grp(>Gh7c9678HY!9bIj+)b#%i{jdz0a+1Zg$qWG`ZYy zP2~BwTYG==cJwXt*ZB_#@DH#Oz7AX%d^fl}Bwt)0J}SN;J`-^^Vyon^Bs}V*tUbDa zTxQ(t_<8Y}@nH#T5;UqR6(z|riItR`v?}Rx@)EVHdbfI2>gv?Bsaa`#GInGP`yW$R z9oOd7h3oF#uCA+58Lm;15F!u)frLOv@B|GI+zIZktE}$s?z%ebpmbej_0`*NYx_Mf zZvy+{{MabT``&xcdCqgrJ@?%7%jv-x8!~!kjm?V6K9$`kr!1#3r#|O>&J_Jr{aXEq z+#Y!+ibfW<7r!c-Q8Bq{SZ!MEu=?TkR`sRzW%VN(92#ylENP#9D{gO4ZENL^$H+U5J_#oTK)-H0Dt=p5`%S}50B6Q8Hcq!4LJk3 z47myk?6l=b>{Afvlx=#$dKh&f^)+oJ{X6|2qd(J)9m-X6<@}z4C2lOY31X4hP3$A) zc_qj)WHABqz`ufOqmRXINj{MLDy1yrMLxSQuBfu~H=M$~4vfABkzl4OpozpusSbGZ zLC{2G%ZUANWa7}f4OXs(Wv&DJm}}5FlI2!d)LXo;oJe6)I209i2>mqu68%2ChGEZS zIOaJPIi6yrv2Qw=I)}Oa?6z1ebPsZ$;pyVp+vlc_Ua?-`u38l^Cg@bq!q745@# zH+8c5PqkwhD=a-?K+K2O4{<|u4Z1zLHr*55Q=L<4b4Ehecm25hjRmJlCS&C*5m{Kl z?}Z@4Ufsrm#j$Woh=rajES#Fay+&Ad#|{pn9S(A0xUCQWT@Ed%2J0bufA2CS z*AONCKOdUXMr436e{#q=;FSas$}P<0SZIt0eozRl*#@mq!NRklEsoHROOOdb&jp?6 z8EN3_ll+z>-AcAiC9o~hkj)!tRjQO_;anH+M~cxCcbXOgYo;NN>M*Pj!QKgtdFaO^ z-o)@}GP8MKcD=~AthC1XTk`zqJ<~r;ADTK@@+jq$5l$DlO}ry6<{mTU5xx@?#i4c@ zw(bOaeJEjTv+-O>2OWJ>u$PMbpB6D_AN2hAh#8E>%>p1J5tw&K#Py=X3Ssi?T!Fi$7g)Um=vD_oh zQ|85#hD(cNn|=E!q7?yt&-^NtrmA$+2>+4(qx~6ydqS>;%ng;O1JyB6$x%@#z7mgfDMKe1qLp=IImlDN|UmGvu^mKRr^uAEVQvieL7vvy&9 zbN%FoDGgyw!e-nr2ZXn7ry)L~;XWER_TkvzRcvJF*sYP!srk^UM~GynK%XuGO*UaR zb|4GrKx9IpPmiEOrtsJa&?BPu2EBBM&ICl)7Vts%G9bwo=tUZIgor%`Lnr1#-a>eY zUb28H6M!UVFmptQ=9NHt|qJvh`D!LiM5>A7mWa8~!;LUyo zd*#BLN+DZeb435sjli>LMD45KNpULNU>(Nj)6#UR#XlDJZA@vqXt4|?C)dfHC*|D~ z%okP)C%O!F9Vv;IT$U`8I(t|6Iw{TtO%Hw&JUx^XS{r*cu_JLqvT4eSjLDhnvVO{* zT{5|mjT{9V`_lZ*Ouau=eIxAQF!ETvx@^^$t9DPysd!sqd>^9bfw19kwyPb6aHMW$ z#P7wq-edj7`_1!P=f5FvNbu$0O<|0v5z(yZ?a@)%7m0XssAmWmXk}6Trie^=*LengJ==fmIJ-ogHBI_mE3aK>vs=+a%0S4lI?3Hof7o zPGOaF@J`LBNFh%N5IEGG7hhxIZoPOX@GF z)VwcX*YknS=b?K<52rE%Qj&QC@>5ivskkYkCh}k^YH*>8kGuY+ySC58a;Vj2$~~vQ zxKX@x*CxqfNr-o#Jj*xApA~X4^h~6O?yJrvWqInRqEAIbixZ0fDV8X4eg#6y3Ej zyANR#BVpxx!0YswWkhEN?K9>h!Yu|;YUs{RRA)E-I>9yJCb6~qN3TkSf6$#^vk-1b za}*Wh+AFS{fppPF`cPJtrB{I>G zozXQp%VcbG*n9)!i1QQg9*Re0ZS^d4vU2L|-x>?uH~@8p}C$?UaMm zOVq1^{|R5p=F2y!4yz7^7A2fcXifc+TA%M(@TwrU*rU3(W_``|n!Csl-GbhYfVWtI z8OgzZl{b9uHdw(W%*IgYmD7JLfqb(&=4Ub}@a0TYhKO%j?9RBG<|M%*?hTGfR)OAwnLgjqr-132Tp(2d7^UB5zi&Q zCB83wCo2Xh`vxx29M^~wG7~N&%t&0Dcrj6tbUgWb_OqNh#ivUBD@Il>uWG}2Szq8G z4ah@u!~GfPGaJIg`tQLgiH=j&K!02C$!|cR-QbgV!5)gBk4s^3xQQ7tHSWm43=piK z74ii8WP`9yAwZ~Y(2Ms#CJ%^n*VxD`&K1*D4i6|6tR4K_0=?IJsh4-9w_RvL1JB4}VZe9cLN1{gCuT(i06b(XHy>DDzi7R)sq zTjz(a&%~bY$32dD<;vBHlZsP{0OfVnPXFSN?O{j5|A;o#T50WK563@_w@O=|u|MN+ z=DWf{33$>G6+yuev>?=MUqoLsm7ZHo* z5*c8~lrHW@zICg~6eoM(5n-xmkjEpBbJCgWh3e0mzF{`{u_cKmFG{(UE;X(-n;WU% zP&D+1;$s|c1c$>pTVLGip+Mcf5;3HIXNBv(@cO6!vw|ezy|XD|RXY2+UUr@0dD{1i z>Z(c`P#*9tXh6u%A!VUU)zf3VvmQ0`QRe`SL&R|vq5!6oc@J`i$!`j_es1>z^9lEm z{EGZYNRRN=jEni73VPSZAtRgD~nt zz@Rli`b>;|EaHj-$d#AC()F;f7m$z8aAF619-_!Su(gpGpE*2KBsjJ8z{SRH^?5a$4a$fj^xe?GF5Kj#RyBiENTLru&c3wUqj`@tdxi|8j z=Jm<%n}4g2RWz)0WT|T@x2&@4M%mr6f6DfhXEdB@uxqqyLCzd2R1dB-1uN7CauRq@ z3uwQQYimrU=S zt2pA9;Quy&qLIc^6E`K9C*Myylk;oNhTLs=2lKAwN%D8*UnwXkT358S_*ijLl~whb zx^s2R`pEiE^+^qujoikq&AXcSH$P}*;j|44Cm_%p99nIH{MAz6buQ*<46Jky81!BO zr;!i2g^2eJvf1X)jFIqReKBVyxbET7xd+GbD=Q=ib3tktXwtXQ6(V3X?!A2YuV{v!ehhYnT0)JzX!M^tOq zYr|vT>H?Ek$=6aZq}@wDnaRy^&z_gFN8hfu$hFNC=KAHXDt=U)P&uV(a`W=$`OxR6 z4hp(H(U2K(MCCIJ@fQnv%trStHoOcXW^j=W(2UQptij+U(;+h;Hn8DgK;fInNIr+A z{Da8G4w38+h}{<9rzdRrIwGBgh;l~3J{o|ld~jJe*vW3p#&*oc9x%LF(4ac}BzCM9 zLhRt(eg)p8!q#_UW?G>^RuCp67##Q!T0QT! z$lR+n;YC7%UX&lzQqaQ0H@I~66!;x)6$l-EiElY&n0HeDj$1vjo@*OG8Nr_FdO&ng zl=2e8PMid|w0&tbAIBj@b7Yi1~5DG9oYHcJKR$0g1jl?+rRn+)7LO$8Dz1Ef!G( zjO(nW>;yrOOSJfb$2U)j7e{*4`-bm3KU)<&FeP|?$e_^k>e-suu(+t)C^zke7@E#G z(IS_(@QNbsfm{;MjWOih&W7(td@*6>2nn6X!c;x3gB1C_3ZeDOoG&>%GzUM}hr`h+iDvTy(MOR@K<*W9Z9TgUIO(R)GU_ChkW10M^qVcDNrIq|;!{ zU%{F$V%DERK7c6>gB`}>&3}WK0hRo~n%4t)Hp9NwV+I<5ID>#ZqaYqYodK|!b6APL zfI4Yi8b`9{s3xao=BPnp4&8#@R(xVU!SrWMs0*Uz%p zYCFO{$KfYt5;Kc=*6F*mzuQ80^T?Bt{FH5JYjO_cB zF|iB80R{<>k9BEH!n}oH-nh`AyF@M$`qK&qeHXH&b9JM-DsQt)*PDNE$fU1gd}hz! zWVz(IT=HDybt5n& zkqUl>{J!q^pUc?meo69BGQodhR8wPT$#O+KCEj9(N{1r-JBJG=Cf z??C=uYTwUmfK(C04v}U`vPF5Wb+L6`1ZH=>eb>&uX@uW5)k@DYsH$OUX|f_w2v;a!{o~{*H_^Uq)z9}fj{K;8haxBYf0x`_L&|uE9iC5 zm-sOW4atJcn9SYi%~*m@<-srY0U8lE<__r8yC_rxkeay1WUq;-$_WhLkC&K;Fs zl)t)Qd%?}(&=O5eWX+|TCpFJ%d)9^EHsVvrcX05|&hUVXusU@34ly_m*{dn4vx17q zW4U#nv55LlXC|u6cKdnMEsmG@cJcd4QmSc)2GC^`Ui%Z|3o?1Xf`1g?d)bH&M;KPE zyTI-7ozhlX$DV_j#Z3 z9_BYdHB$8?pifX$@Rs1+!B0Z>giVh49#I+DJL<0}KP@#OD0yPa^^}#VjcF4zm6_+W zQuIaoV*SY6S$UNe;;Kh=ACXzF0_!4nqpm`J1@2`aLXL*@{e(J)1z=)};C+bu>i+_Q zuL8%=-t)x{q7r-DDpWkS!;6q67ABBo}V^l{$2AG`x?s$ftK>nt?bGg66 zXvQZ_Kj;0TOt16Gn}HL;l#y)hS?#{~+@#YAEn?irqoqzTg5xICN{v>@z{@XwL_M61l&EZ^+C*$VyG+{3v6dG)3H%T|?t zs#MqhQmbwp*<{y5#o1g2I?*sOZeHtt@Xu1rF;OSMh7eWj0f@cop{0Xh%Mpl9zJX^F zF<1+{%Pt`BU?A^Sh|v;AE*Q;!s`6IXq-`%5UdBYlhGXkjtYtlX<79lsA3E_0>yToY z1(FFKu#(u@Q~h0TiT8TB`%wdb(i{$(mhwaDuUT{Q{%+);QiFp%QrwIIRvOe6h<$2u zT}Uo?)SLW2a(-+(&%Z@sw#fY@mg79hZApQOi)Z2v1t9$lZT~s6fZ6bFEIfw%*Ff617nB*KRbJ2K!f{p|GN$X_jJ(N(I)dxs6%#Z& z=2EgMn~$6i_CdS;irjxyh4`j8WplH8<@82I`#M(fE@Gp0aKg!k`H3;yKlsJ;pyfvE zeB14m<uVC8Hq6O24!GW%-CICsat|)?u)h-@ww z){3m&naXe$UKhoBFZ1C9_YPYa**|Ji;_r!%G7e_-D4W>0q;X%95dE!Pu^Zq84lhGA z`G?G5Dm9b?PDI-J3LXCuz<3luw#pZ7Y)8f`f5LBk1aa%7557UyZb z!m*F@9QQ?IVUl~w^@?v5OKY6!D(aZ1 z1mM7Li(#!&M7>hnm!ZOqe=6+#`NPJH?@a2Ey;Y@kz4d9QTLM%0USFkuX_Yg2_wnI@ zygGB+7cq~$4XbLju$PjU5aY~|-(uqE666~6N3bK#C*w3RkdElqMtBbku$V%4jYWpJ z@7`|;VE^WHLp(!uUbiT(rNXmz1#Zt3088tDGfRM<3*jSA0kxXDbjs*&=J7X(opF-S z8P&bydvxy!MOZNv2bE(~&0)-xg{c?P*XT#pTh!OrPjB>Vyx2%V4weJ0bw=H^E9!t< zv6tu3*#qZy%>F9q(0Xv$pOFK}M;yq8L?E`R?^*?tKfW?&GEaDg`eiDms7IFqvy5{} z{`*?niw<8s2C65zy2Gd#ptWFSy`hrLu^)R6dL&ouzLjGbV^ z_ZT_phAQ%V$%roBG}ek``_kTzX3PA+Ni9ArzM{CKnj91s8WB2LvtBb8*CD2dpAEkn zJ}P3o)`phyT$P^Uy?FbmvEHkSWe@w)P5^~G8W_V!Wf2zd&-+X?5myuPStBQeg)dUB$t6o`dNs;0Y%h?2F{ruYyd1 zUj@_hc;JpQR8|=0fz&pCR3MPQG4kRP#uMShhVH*2V+Qo6G0bQ;ue7$Tx3#uk#EIiu zx$<4-iYbBWpr+t?AqPTVh1RL%kv*cH#Prfd=yHl#_eAfgHhE9nkIDnype46Ip(-0??v*<|?13djn`YUBj2A=aTH3!#Kn5P2sK_y7m~ zC-h{C;D=BqHvJm6x%XeTU(XgK$;V4 z5Z6w)Mr12?5&Mf*iml}50~ zlUP6E2Gb>2v!!^mROoU&=KDE#dLa<#cgP2z`(Er{4D5P7S>NHDVtgMGJsH-c?WBoM z6MH88kd#t(vds9eM!ZZ&VWSSq_*)}lPPdWpTmxPN?5*-fjgB8qmBbm6t($&rtv zE<_)XnULs^vMY5@>h$!3=`%B0GM;CI=H4y3Ra{+KTA5#Uy1^OuF7Xg`VNS4OX<#^M z(Bo$0Wr$v$&w-(+{v`5ms3F4%H`uHrn}9c73T8$(=qa&sq^8P|1u~AA zh=_^ksoeYr>tbt5yK*~wc4WYw2)D?>NY}WPd6`wus>Ida)hAo%sJdo$=9TiWOLGo> zcn|dG6gvMM0!x|zwloR3lMl#GF9tdj5tS44Xf>>gWOva$2rVI>cFFQj%XQY%sXH7) z*ep&4C!51^<~W=1DullZ6|Pz0pCv0K57(=JuE9JpHs=Jv#f8a7d5&ywqx&WKQbF%fUk+L z4nJ_bo3M)O(6vBdZ6i>915kY#aAGF#Vix9D2h6pC&K1C4{DL?+8G82-e)=LjUnwjB zcWxMT-spKEcuBn3g1tgVak(U1p$}ah`Yvon`0mKz*&Fot^4{kyD6mFl@gm?+=Nxdaa6*xwNLDFF7RDdv>HKj{$@u*4(|vvT zgZL9=lVkzDH<;azWL ztTxEC{lWf!uD1h^Mi*t=%J_&b{)h2izF>R5cKxj}OS00so-v&{QpUw?TOQcOkOB$h zos4h-tUbO)5emFm2fWw?9rFhAmv*fV>G?cRF22BGyN!-|f@>*A7x=g&x{Z+> z_WYmcbgvZICz+3*tN*ot-vhq}O;^9sT!=g!JtJmb%ug|+;w*GY39(7Kq@R*cr+B8; zX8LCRku@Q^BKumdMSe_vTfxTSXLUCkJ~UW2?r-#KqF~+V@G4B~G_b+9*f?#5Q?KAu zgqIi(nE>lu4lln8c(V$ba~>oWtMvxfy9jG-1%EaO^WO^=yacirn6w|rSPLB*3LO{& z84Dq5;dWruNysDY{?7`N_%z-57(YLFQj9!)X`>4|bQ&$rm@8{GUuWLSw#wmzTdbF* zbcJ-U^r>{J&&7aoVS^(!#yyOC5_cqTdj6gK?1El}0}FpComCr(Q+NHqU>0G2s6WQF z1M(OMO7Og)lzB5ig$KfSlUkN!S(nAf(UMgp@~4NU6+OiPA8os3*7c{dQDb;c8& z3fn`@vw19$!0m5It$+W3e*#tn4h_lj^KNq z=>H-`*Ap4?>x#~CRsfa!yPnqFF+7hI>>A-+4P_2=jp#PQyfS0+g*%uHb(gt zapeS9elPfJEAYbLE{i5JD>5^+eVqNzly!_CeyTv?@>X=wbG?)=OAme!XPzi7q?P|( z7mF!v_I(Q9Ph9ebCz-FP7Lli{&;>qzkq*>Z!0Jgw748~ zec;L!-4F%4wTad4&m|hqX0Nf*)zaT&w%)zu!+l2jjPm)#=avt}m+our_tNi%a!J6_ zfFprl0>1~^1PxcO3%?!_8`&#vSlo;_k2vdioA|KA#YrPFMrUl)hvrr1oymKU7m#0( z-;w`E{-lCi1#=2Hh1&{$D*9HORMM+-N@;LuO6j?>3uPC}mX_1YlgoFNpR4>Nxsz0=F64oRJnyAB?Ji|Pl!#tI>v9WiFoCwxr1kh|7Jg)%R+yMBV zgNVy!A;)tF_H+tA+kkX#KyNva+aK~COkyd}+Zl(61Tv0OkQJK<>5G}ziW%vR*_eoml7BIBSNMsc zV2|Wka>7Q9Iptat=g!>_;&BeKdy*h#6)F{BPwB>fSY_+tqgm6O6+YS6N>dY*tI@nmixQC zm=VINX31r0SxG=yz;6MG;hwQClA=<7$=;g%DZ7W>G*^)qoEOp<(RjIeddrL!c%60@ zqAoT%UOS_%11GS6MBeb>7l9N+mjQJ7AkLz~I+S2s#-YW7u7D*Mfom-QuRjN0vJhx@2brL|i0ee~;m=^X7O;dotkNE=63*vfZyg(nUo_@-e};_hSKGR&B63kPftg+e+a&rPoBZc<#+ZJ7O!p^^5&asrRMb~K zM}ACCfrsOuDu#n>3Hr)FM~NJ*2qXHAkxfT@wd_A{YmD*V`;89DsCtTQx-a1ZRUC`J#3PcgR7G!WIJm^KIQx;{xU@<};^c zi9#_j#5&wAYD~)O3M%S^naBdUgMoQ~$4G!0xC0DW+V?;6*BwnBvZ6$Iblwk@@SlJ0 z&Su)BZ_DplD1)VT&ot?0SDKirt<{dm5VKIL#Ri@Wkz+&8YVb49|I91tDTA!y9PGG3 z-22Wy%4;F{8*CeR!gf`nXMTlQWdr{c00x2Q{GMLf5Q* zF=R%*xoybbl>feS@1I<2@;vh%n>mz3O1kHC)tJBw!RDdIBZfvPqC4Wmy7jsviMz7u zDts$XRnn20LBB&-))b&R3)b}rk>U@~yH>Fw9qGaQanO_XAy-tMct z+T~Mx-F>T6Tm4;w_Xi(S7lvPsJgKXR|2h76ye8>OQdIKeV`iSza<+sawR+?AstG!t}xBgL+d9yi~{%G*x3ZMmX?lBEHl}F%XRzMD-*HJab zmj&b?PN;vtn20LX9`ItZ_~{E&Tn7F73*&qX-TQ#No&xK70Fjyn{Jj`9I0@)N^i$Xj zKOO-c-whpa0M||jy3`<79}USf=p)HR6GQpP-jX^*F6J z%t@S_mXVf|mXuwSmsR+-%)H#D{9*0CwNZ5)b#bVb`2*~f4R(43v!KB)T@ta+iWN;n zel-pm9vw!#148r@cY+_74~|V_Et!ztpv6gGj~*D^G>opupq-=^w_CpBe&Q|>o^|Qr zHP1WP`+)qJ&tXMMU|Qh%z&nAz1g#CZr@0&+uWQYmsE@7a*T6xho`Zc`CqzFy^z;!R zk{2OsB?E7lb)Jrzjps=rsfg~0iapG7CoAf%NockRKtIJ0MA_uObnoo{YBkq7+S;GC zh_zi9=iSS<-gk*2RG|ufoM4$2o%X4Yg=#9?rUN{!K@_3_w)_uI8g5vl?w$C3Hjf>D zW*11O<*&&Z_f-F=9)uLdxg~AMewK~fMDI~x zHrr03 z=Qv+-e;qP6W>$i8!m5O;8U1rc=lGYMz&_qNL`w^ypTtdwJ@9?wfckrhoQGkKNe*>K zKn2IgK8aymBqtIW?naC@+#|vNJ( zwlB;p+&?@&x+A(ldsH_hsUfK)X?pVPl+3j3w4C(SnM1PgWIxXvS1_ZnzDQO)tyEE} zEkDy6F?6v6zP${%R1Q4y#=2g?=>G-o)&h6W!5{Sk zvuOwRP6GDQAsLWb$Ozz;8$=5WG66Ro2&@_eOM*7yJid49D2OR!E@trnShyotIIhb9 zpYVazBjb(S*+K}hpSct|V+9F<_`}+-!}5|LBY|ZMNINWl4DekF)?|W6dr!N%wXRLm z6-$!*$u$4G!RwHf5Hi+3QTJnXWg=wNrHD5C5WTCAbqU5vs$fJ4q-Jz;5mONjy{3%6 zHRj$W@%B;gE${lQF{gcrQ|vTd_}OicXR_vY*!l2Pk&EN};!2XM zGH~QRGa@TF=XP~9c5#SKQbWKYMVRR<$ZJG+w=r{kpt=TcIUG1N57F5Qp!!L??R@-f zg%{6;740%;TZ|#M5Mb9~KZdoDeOdb`g;Gi@EvPQ3URUh_8}aEp1H%i~{j7d|S? zEbUi0zjAH$gBrxd&^>t@3)x5(Zoy_@2abh0Pt?#tA0I(%;U~8PrJo`ung^^=K=(qR zZ$u5`DMSprfC4&jq$2o7Tf|6n;UBNV7DwV|4CENbH52+KfESqueVYh2S%STT2N>%~ zteqETlsMZ&)H%Mz%o2MQ&Rugr`V~)UsC1a>MDW`vo9K|tV_7lT&Dl?C-_*)*Hl5TD zV->2cS&5YwWfsFnIaIYVcyJ;waa-b#N$V;ORUdAm;a)f%GOk|eeMx@G$f$0ce`5@0 zzUDRy`-v}$M|$y8p+TF2=y4;H#w3}f%uijLT9SD!tGeiW{Xv{=TXv6*YyxV*z@_&i zS9J+iIU9^23ep5zJd2Fm8;rOIqJx=TBOzHA?j|)n+t@|*u=N_7{S+;AJgtG5!#d2m z$)@lU_%p>%#SeTbehmR-VI#C7wMuQac4qRAdASuu71b37D~?z6tfJsN7Zo*>RMae^ zAKE=ftPKlQaUATeagkTReWHjpOo5ymu||urHnvz7Cunsj)?_2F0Ud?ViQ5Meln?fB zlt5c0vTZnd1nGzM7=ZPd0u0c=cjQ7EfCbU8eK**?4^; zh2t&00WG>$ldOh$Z14dwhR#uUZ3fV9^E2I@CGnn_(z@V-VZKqc_-T1Zi!M|?sbaw9 zIH;VE;6^boJXMOARgOCyh!xZt;<5N*bSvzfSFNGS>YZ7=y_=+3QXi&?PKf@o@k-;B z7Eg5bLB~Ffb0Egzf+%_jeqMk#`3g2uWB5igeycEjWd6J52h0CiCE47txo?|b|Ha`b zWiah08jJ2tub|5q$&CAqNv!wIY97i!c?aAFdf)Jys{B!PP<1dkIpkaD5zUeCOW{wV zR>mL9k1ZHp%q?D7>|N?tI;P@!)uXC^s~T%|*3?0ph;x$5+v(_O!A5=o-Fu)_AK}-z zKqDILEe>)Q8a4;fEYX4XPuSlG*xxj)?N?++Z@|V}5#jbn{*VQUg2W=){T+IK57Gg7 z1bG7)h8e5_vXwyx4rBeX_#0{*MKQ_cY9(A=(u*cJ|@bVxNwPhyQg~NUx;b%)tG<$dL$u zp3^&Zhgd-})~PX#F~4lt+osj7hy5g)h%wsbZ&8@X66q$tKU8o1w+C(w*&eYYA~%tf z^uP3%nftTP6m2WrUfWt%+EChvI!$Q(YRuI4wm@XPgAtXG`eE!F+t1vEh>$yV#u!z{ znQE+FvNyXd@cha1txr#1t|CJHx4JIuVdUYoxf$}Zx#bO&4D1eg;$)1h)dlZ;2;V%% z@Xf~9x+IDGR)ryETV_7o`l)R%JEq-sswaczVdd+j`l6cc|1?YzaV=(HY-H@nj17eg zifEm+4Ta#`e(>zXKFTC``EaZx3#)V$tMwjYiPh=}8P+vhbm4U_jyG z!urD3rMYF>%BEE;s-oA<2A6$yj{)z_Kn9bI+o##^=E#ad>&5`tT@efX2yg3)pVN@( zG{JlR0Tj{07LP-|fO$@UBtdg@K#gixmmRn;1L6%i0Mv*vjKR2P-)6np_BZ+pRwd`V zIKbmqpPh<>iUR?!L$_%E%`DIL%d05Ulpn4XA|5~oH6Ryp+wpgxRSP_b7MjX~7vX{F z-U4HZfUGpEjFBmPG`D74V2)!o2`>u2i2Av|@>r?lhx&$Xj@YRioAIR387R)fjST{1 z!sN*3qK`h_bSe-luuGT8*?wfYht-2!;yS}!r4A3(dHLhYlmVN`xcC31X#3FNs95 zKy^Q8Pw<2g_mGmXY2k^H8to}vOZ@G`lS#Leeox9yZ%DtARiodj4==JU9#Xcdtg7Po zs`~1m>a6M*b%Awzny5exRQn-XcLVNz2a5QBr*8yWEP-DlI`yPs?qV=+c^K(@Si2Td z0Opqqk2@JiNCgVUf{Dc&?4xWP43p&5N4P zwPI8|UWLzTM}&U{KO5m0o8c8_B9pTb^I!?#gB8cYe{6&P{0Q_~3Hb&jBF>m;4R2%I z`M057a(v-9l{;9p*G(*@2OSF95@Moh)x^hdP5zS7Cu@QJS?=qS-lbV(-^v$P#8#)( z{;V5RKfZ+lJmw(&65yP>3$ztCbRmcA1OGc2+Ug2Tb%0L|gnWfn*mhY3S?9LZ z(Tg`Me_bbY)*_oo{V5g)Zm->P3#_@?|T zx_?-Lw+)6CEW^knz|;0Y<{O?x?u!2sxix)S3kS9-MC2&Kxfrj`o8Qe1>)*Y@nav1d zny`zUS2{0o5z23c{SbaA=3EpVk^~(BrjU4bFCwMOb z7=ox(g(q{Ne@&2M;M0?Vq;AlUJFvDyc;6}T9!Cwf+kJXrNoNNh?SDGVTAI}{x3MSi z++4q_wg$~C9$9s+={)p43;Tw|PR#@8HN8#I`UCX&1isr2-@C>z7Bb^fZsuY6z|xm$ z&RpgA#&M+6LaseG(wQf$5haO_i>Xx$`hs%ffgdf3En#;qW* zg`x1|*^qshi&0p;D6B>+Fm)w<5+@SBA>MGt{)+^-`VRQo0B=4MI!esbbah3?_l#zoU+-ee)&wZy&Bz0kMR_m=N% zUmL$Q%16rY0V4yo!LFezL#Jt~G#9l_Np;!(=Jw6oS~RZIqV(_j9_X-8g_zB4sD-)noF%Xr&<>j!{ zM(~X&_~2l}s*=$GM<$b5C6ePMxx{jtag-OdJ&sW>^F7_Y{?Yi9xz%{roNdNUH+Y-N zSQnzIARqd89X^)G-%Q0fbAbFu3>MPe-}Qu*7vl-bl`Ubrb53#;l28dtruMZ^9Z++^ zc4~i!nH;k;h8yD&;~VoScDL@5ZdbyIF}jg=#>Dood~8k6hbv5yN5 zJq*0Z^R8zak+{{OoN<8pk`>_ejqB#TR<>WJ2y6-Bo$Zxjan9w#5~>ykD(>rkO-ktaNd@!!d6ExD8N|DSg9=upm| z!gD!Q<$smWs5GlQUg=&xzln=lKjUAKl~|^{R9>jtKeZ-xF34Bo+)zP%$Et{yg1&Q<)7p}!8?Peg+(W-(i$>j zvqtL$`e*s&rCX}{)tI!PS`_$w4|Wj?FF6uA<$x$g4kUPwjMX|k>j1D_jh*w$$id_Q z-%Y{u$$W~ovkMAYW5c7CauRs^1v5Ryds!_}(WmM)buPs2Y4kxgK z!C<Xk-8Qp4CoVszD6GuAJf=Lmysff- z-I|8#M)*+JNF(_EKyd$CK>iVvWXy}dvUp+tz;O%fv&&%dcuBrA&3mS=PFbMw4{M7#8hwD3dQf=9ia(+ci-M@9tO)X6q zn?5wr(Di_h(?$%;Eejb#4r;iZv3t$~Ge-9jV2c!d=ou`j0J`=ktf?%3|v_Pd@+NS3AA}Y#G?6FS;xm|DEK*xt3*?cN}_CLa1i4Nj^ad19C!&S65rrTG!gu zR@8FA;M&@;KL|V^?t^>}uKFHP%s}YTN^po$jD`#TPyrsl4(oFd(i>~z1OD;?qat>I z)m3gAO)R-CW#wVy^pjO z8n}Yr{0da?#L9nwjh`_*+n76cv-Y(gc*bBL!Y;@j!?TPh6f4c_ z)X6a%cw{H&u>jczoEX9P{ATz&V`lo3)mMKJYKweiIykH!C;pCQO} zllUq8Zu#Bzo3Hd%x&^wZx2gAN7N##tFU8*9$T;?dEm{FHY_Pr# z*n5pbzTijX30{MXZpJ#+VH|~6$G@SKyP=i8VjR7?)``qxFSTE0KiwhIA(Sp;mpP?y z9h^M`K_2FkEwbCe!jSFi9qOx5vvjj{D|L3sdAV1L-jpcHDAm;J?RBT>?$!NR?^+*L zpVlz8$*g%`%g~m2Eslsoa923AtqtDC7i*n}XlV_B42Y2CL-Q2ak^T-T$1J&E{Yw!m z`~)owKzfd*^Ao)ABO%Dx-L?7tOZ|s2iB>FsAL*q8Xf-ivi6a8n2 zn*mg?jQ@46betix-rI|hN*Wh*aR@M+x`{Jn*za0Ra8L;<+#YKu>h{934a1t4VLa4ckoU`j^sSN z)I{*rXPt8yXE;}S*6pp9n1MJ$KDpWKs@Y^-u{b33Ljumt!E4K*r6lGP?@q>nrrunf zv-3q9>WlRzKX1(bIL__8@%1v3FY)2~q=bcrDqJo4AKE%hp0&?V}ebF-# zT?{ch-q6H=PXAB5DVbr^TAbrr@<+QCN=sxVe(p-1`cuUE=+W9#fsxr%P+dIhkO8($R(UJGVcdClZR*dj93(uT%wY z3||#DHeH;)D61&@q`r62u%Zzqr^@XrHdfGZ4v&Fs3mY}p=yeDiqeHizA|Bg=H)9}+ zTnQbGK{kCWDjemoIS(+gL&yRy!W(6Etuy)b5|dJsS+e=E#XT0vLe$u2YiD9V9)0Yg ztHOgar?-3X463s3S4HgpK9Ky*BLis#P4a~-e}Z9w)^c)$DbOzREr(4Cnb z$;t9;_4%Lw4}miS-^E@m;ot@`K4K+wv%vTLjCs2VEj|T|C2wFQ?9v$L(JpaMuR5_S`y<9KVugcTro0saVbE|td_GvuPNC*0J5xet&3=;Hu_QVMXFL(?Y zcCc{|HBc0Fny8eJBeSGHg`pC0Nnoo#WC(OiV^}HUt!TfQytVYDIWer6K8}4^LRK*6 zF=vT*h4_y9d-tIp^F7kN?#S-R)ZWA87IM10!xX7nP-z2`bK2y{WRUxmfeK=4W_a2gIG?do*yXR4z*@E8~|st};vTY)W~ zFiUfxjT4clPK7UeiyHh7SSu=3N;{G+h&2F&6R%v=`u%wNz6 z3gXf`z@l6*11@r>#QlKZ!E;)H^z-nu1J;>=nTvzYkbEZ&C)-F*BC}d$b>1$Y_LVu& zG1YN0D}i0$G?E+5-Oo*Tj^UJyEn|PRf3rZJuMR->#SD%5&}VdKKgploX6EtSN3NzEbQ|a<$^e znt63*b?$Y727SX_Xus+n6SZC}^p;}7gWxt?@FWptrxjMQ3mLRwn4u7GCN1`gEig;H zfK#WDd3T3@_zgCE7=BF(WVV6Tcq8*!4jg=d>~bh(X*1Az4!D#YexwOA_6$N)TG_!{ zox<$Z0=e^`cNv(a7~n@6qAyEGU(8e%W{d^|&jLRc8m!EClOH8=QM6BI#w!l@!jUsM zz-EktMq&|=9lRsBC3Jq+#xQ^FwAhI3$U@r^N=bRik&10Kw7MS}O&X6ky5aUZMQ3!x z2HNTj9-P>hAoi5^(+|`8J5F-$DN_3A{c|GTMURRdoV-6pp7wJ_UQT|_3jJ~YfvTfb zr>h=U{Zloh`gQf8y0di=4gWR{ZJLe!x}&Ilw8kvC!kRW?G=<>0TyS;r{?<60b|jy3 z(k#%TKcj^+%+UB?uCN69y&kOdFrhKzA_#>XF@XPl>GjF#XO;%ln4tke#0y6*cfhVe70i?16>!qV227+6_CE6`3$42;zW(Ov*Nv$x?p$jD>6)qAT0lpfAPuaSNcN*Xfh zOw6wnPE-OZu%Gc9{JIIFRub_7d^{05`QUwtngiq8kku+bSO(gTq&QKAvG;M`^F_iy zQJxn=o}&Ci`BJsQKO>MHoT=WWnG^PB_?*b&+RV5RT}zrY{d)SN^w#RQmO^mrjt&O) zkDXC-_?!{RqW`D10sEae1H!f1>xeoreHpofosl% zP2B+cyoQ#G+ky;LO>qYH?~YypA1$8A~@y=<;lJ^IH*bfa7!x#0#yT-vnh#k8~g9ecqq<`$9?JwKA(ER8Z z7>%48P9@x*+)Ul<-8gOwyzcw24Z0XQP7|(~5&1c~OdAki7T=gLD>FSaBzu7Vjb2=E zxAdRNlMTYAKbk1bOIoPtqQyeKn%#P=joo?n{Vigy>xf%i@Lq|SS6}1+N?{{Z%V99|Kb64ey_DLOzqDyC95 zHKVXt(Zp${A@@teX>Z&|3C*1fM(hKAZi2|3$jGrFpMlG@z=$;1(F$;OTQHbK(9QmM z?_J2qap9SEfguwyWM|)dynCc!&B^@LPo{2`DGs+O`{-20Q^%34B2G`IH_rV8-(8bL zat}XAfMozb?>^j;$jmZdjSa>0)!+$62eT_VT8RBRv00y z;NH7#>(;uebx#!csH3hrtG>^dfd1Y;&Ih5C+m}P(h4%R=5{Syru|2EsbWm!@v4aigW;3mt6@~#v^r(o zu!hEl)y=^smliT)k>5%~O%v~^fR44{?I6fy@J$YGb#jouao}%wh{kyBv;2v-HHnv9 zi{X{eLsr?S6xG5bn{cYR0*KHD_RtObGzU@J9{8P+@H4%UAuI*TOA+5(0S_j?JFi1L zGZ$X@A?)G{k%x64fVocBkH6UKnwMj>*(S`jy2F-Vt!UPA>nGOFtu1V_Z7$e6wRvvS z-*&F;N{7*os~s;nx{#QpaMDiF5T|KQB~DA7ces3Ui6du|pU`^Jhtak4D#i{*67wYU z0n^L%otw`68o$cpvPZ1vEl;U;wzr+n0AD9xM?b#bP(h&Jr=UJTe!*hl7U41B&mo1P zjiT!!JF&O8L|iLAC~g(kOH`q$p+jULGNmj*_E1(SPmS2Cm>x-vw2hh)?GY`GIT|xK zc1^4>?jL1WRd3Ze)ohioDqmHss#on&&FQj7^;k6|J}o{weo_3&_;>Mr6UQXiC-YKP zqKc%RksHo^v zk#%u)$;Xl}CErSzI+s#%X+&vUX>F;rtf}%!Wq&Is=rkfJOfYt&zh*-a>;W!AdB|*2cj~oDt`_1Hm;oCD{Pq z{4X>s2WJqupfXT7NDo?wnz0pVIIQV!pzdr`i7vu(UI&5=21!8KAY78hbWThp0u_RY z8A!W<&JRGvu)Q`XZMrgGGmK_1heh0dV2!MDA>mi~jDlGg4h=-Vin1k&H z?cNJ5KZ&oe;8`W`0ui9!fwKR>6O3+0fz*x;<3ZLv?Dp9EJH)vhb9q6_p|54$8S$OK)J04-n_&U^Os)#B@)xDZP#QUMpqk8BL(Q(`W-B=CX*aA8Kjhgc#$ZbC4_zPC%4G;7Lt6GIP z<`=BY*cOVJkm2YxQe0hrGa54i2}DTkm@$`ZrLk$WX|uDlUtuqCoI>j7{4;qbbrF?B zKSuA$I?Y+go#a~Xy2efAeu!`9?dBcrv)pI1Us(VxI41akXttOxCQAl{&JSG>`m17Y z)X7*;Tzy=wswVz(@|To%sao~4w9gsyGD|a~G=FIBYr5z5$c-&f6uK5KD^ZjcmEEs= zqi?J2Yp6H07)W)bdPV(=#>*xu^p=W9k&3LEj_8|#eKAm}#4A*=895M^ct>F)A{pXN z%oh*^c2EO!tp-1cDMJ&HDL#bG_s0!oTks|t-g*r5m53VikpHYew7(ACaS9~*06P2} z=z9}7+zefPjq|#C=xR?$xF3iD+6ENPgYJ%l?&g3#f|lU>-pD>JK*vERq0{l;dopyH zc#UE-^w$M+6*<&?=r9v9SPrlI5wThkJnjwXZhVJ^m}~M!EaSvk?QgoLc4PtLt*4Xb zk@~UoJ(#LhN#!Z=g_=THkwa;1?Kh<}?u$@@<5m*7}wk?fj$k@C9oO#JiskMWNa z@Wgm(c;)2UJF$n-9nVVdJvV{;vHQww6t=oN+v4?Om#s}43~8Gfys*pS}1qxm-E zSJ;X>3D8wbVA)8}Waz6m^tBJZmVy|-uq*KPD%8VRsHqo%${>@kkckbjgSaIe2dV&W zEJsw;4Wt4V=;84+;3YBB;{tfu1(-nGuJ{Uz8_}Kt5S%klkZfwdCrEs6?p0>ngxfff zdh+`6!g+&ziu`Q-2M7iWu1I!AG$pB07+JqpKf`(GRcKcaAn^{Y@(46bjTPR+s@_5i zdVs6DK<9x_nXvcQpg62#IO0*Pu-&SNt_~vWa<;Z7)sVh9jdfn;ywBxNmjd!aN;xHg zx|vGlK6m}->gIl(C*hy;cM1g849 zIwOOtDc2Y@%QP=?x97DKkV+CtK94k`}u}bj6mR-8nNO?fGk=cl!M78|J%RU=?T|s0#cu@KfODz^S4&lBr=8;pH)D zv4*%lNl%kl$-Lx^DO1!|X|&9%*|xct3-%Y@Ec7W3DBh`ktG!z~sBCiC{EBjYQ!9JBl64oQ}GDW&Ff!U`}N1V@GmMaent47d$?=hj4>X88R-s zm(*GIF7k1dOnF-QQFSxEdqPw~Y(h>#m70;hCH+FdsKRxHVY>9Pdu946w`zqU&9KIB zw9eNUhdO;%Am(2{$nMzf2JF-yk%Jqm?B^hF9*C&!7043uNR z(&`~w31s^OyP5!>w(R>ZI(vpSc6$42`yz+oj-}2V7b^J``2#tQ`jOUyu4a-rMot^& z1!n};mK*NIa&K{;#DC)P)?>f7$>$%R9sYj>JQr95P7hoYWDI^AyhWl750be>X2%Ry zS|+3?Y)bf=@N;VjyQ??s+!ir&{<1 zq92k5ItmV)hvqYZLBwkn3nBYs&;dUD!f|+fVqW|pX#aW0d==spFVF+{RtrSro58J- z!24f;2GPJM;s&7w^k5f==#eOCi$V`=ryg{kI$z_-YC3-=>8MdyS`BrT@RoSH`5p>6 zAj(p7i3*6locJMmO4{c1E1BK1cI4FM3i3+}=q2wf`{*t7L-p}B$+h+M;SDPrf}4yc zE>Oz@)h%z_EAhiCARe82b2odnQWY;g34}5!>Mm8&(W|QOL-M$B9yPV&=uH z1nooJ^D-9ddt6jTJ(0=6e?m)oqNgby{73{9WB((NeVMBpX3XuZZ+x-VQ^(OaFxK)m z@=p7_5qrx1lI0b4EzYm{R`=N0r{2F_RG(7c+<2uixyb|{W(m10Mm3I%Y-k^N{s{J# zc2kNOq*D0HP9FWJ!MEA&W&g(M=Khz*W3Pce8~msNw*`9Pd!Z!qVS-E6to#c_e#IUo zlG3`WpKE#=)ke1_yj2I8U&elHQGsX%DG?Vh1hVf%%oK^3z!|dt7d&f&eJ@1}wF;5l ze)!RO*eBu3w?oEB_}U8OKL;5f0h#Yf5PSbo<4?0*WaH|v)WJZCcdl~oPRpmw;f`<} z?Y@tn=5xX4h0ia3)_!~Z4*9tTZVcKMv?_!pS|WKBwqCwX-V*UKk{fk0syK!fH%_Ti z#w&ZNdL@J=Tu*9C5~hZw2Bg)etxX@1F)Jf4^N!|5)`pyE`L_8n1&0gRh2DjSivB8k zSv0-4dwIXg9aUXwd(^o%INQK({I%J-`E;|TiH!3boV>Nt(BaL%`*KX2J~3hA zES$BnaI1oYdKwqKTU?yeqDvn>f(0)1hjk=?8lVNkkS+LtZX+|u1J`PhufB)091uC( z0xC{MG=CaaqC(B40M=j+E)^j9ISow=1jWKKF2E`d;p-dVN+L9<3Q>GDi0A_}zs_XV zQ1kiiQX6Z>9LHw*LDpp9-l*v@f5dRpCu_H9pH$M2-!NgzOw_;8hXs4SjTq1tIZh~Y zmHV*aWr*c!;I*lUf6Z^sn)THDmrE_nENkgWoB_e!vK-k7S!42&WL0`r`t9@qI%MzI zVFEB=AWpJa&0)@k#aV z>o?tRuAeZ7EmcShq=nK65<SF?&@5(+$}X+7>Mt-j;?bZA{$LU|#(VD4hTgt$`m} z2M>J=NIe0utT(ccd$7e@kiwr>+har|6d?9$_@zeVS$|`%!QedcCafzkXU8oCdZRmS zr?aavMcnz5&aTSG)?*!fNDVHHyfT;Pc8M?djmh zBYf66*v27z)+1CR9zdF}zkiOo7ju}^erutP%x0UN$bO`Q%puYt!f^z7AR~#vV`ef{ zED77d3FrEHtnhm2#rO8{KIOaIpDTD8%oW>6K8B79a}IL|-w}Q({C)TsX_NGCX^!f( zikGO(e3MzMnVoeZ>tJ@zoL)J7bINl;eiNMW(wJC~+83fCK0dbRVzc5$^@UqX_YD5l}*mELME=4I+d<*g+)d z0c_za{OTj<|9C_R3!(pq@O3R>D06Qrp`qpuRu5};TNOvcsrOv%`84Q80p`48wL_6- zh`;Nexr=p?)kUlR)_QBDO_gn}ZLr-xb}#ML*bgC1AUz~~Bh7ZQbaHa);p?$BIy8-rdvgqUGzO{!48*GpU=|`dU{_z@mLEKO7hqQ*P~aqJI{w{+ zYRO#4c^=3Gvi3q|_zo821q+G(6%s)Zi=&?k#2DJcuZw-oqlv1GskDvpOK_lTctRR2l z-tuhZ3u}N=}=jkd{PuM%BcL5yfJr8!9;Ci#j;9^s-sm=H9yy`s$YxVb|tuZ0oE`E zoH+oFjD;1*Vc&J|gH50#;D{fzJ`Az0JN%y=wDvcwWG_(J{MI8;S23TWY_yqbTO;=@ z8B*hg8?flX?}!XLUs&wTm!Jd9y!y_U5$9P=w!UFQcdU0Y&^I$5Gl#Qg@bB>3{6c~( zRWoz?<}!+BY0s7))Q>m#8F$vxahIIk9*f6AYAoRSL|Ef%V30F#{Q^jVbrQ9v!SFoG zAf1iCz;TekM|htjz@>?Z9Zq-H$g_^f%3xV%c|_F7Rr6i~ZSFb!MHVssWNi2UBpxR_ zD|1!NNMI(eO5T=!C|#QKZ{go1uS>e?x;2zFR5X5Uq(bg=+&$K~14Bi> z#GHxcrAqVMikDQLsO(;qTvb(dtIAmOR}IGyU?9VTu~4VyI=P1Yp8lLU z(QTMVqUQxcNT7XCYREM49x-3OF6MaV<(%HRti0MhPWvR3X6WyPj=w{2+5A~oeU7wG zo+WUs^JlZH_Sw)qS)T7ayLtEaKI-#cBoeEmZDQVMf5@Jp)oAzV{wWopOC|_CT|z{I zBD^yzLI){sEdnpcLkoZ8);~JGKXJ6GBL*RQcrc;rdu02gXWB{CDeWHN=77)h zLSA(8drtJ@w8@{;N=kQfb=J8&rOl(?V8pNo^6&Cr@b~yE59t+oO8KYKlr=JEM$X5a zg3{)y?CPV{r;Y6T%KG~a9~-td(weBv4kiXp!azW|TR^$9K({Ky$1)()O!!}-W92?{ zUI&T)4CI&t8@vl|!fTb`Y+r^K)zP7YNNQ%Q0!Z4)0rT0@v)s<_&0W9(l9T*tEG_P0 zMo}gY?=c0Sr&iI?aYe|_e4^57ebjet@PXj1u{RQWB~~XMP`hg+ntK{OT2A_x3@F)E z^`QDob?;h63kTgwp74=E%mj?U$z}oYuZwt?qfxq|_EA@b`_&_)MBH|d|AsMrLr&|SC7g+ymJYjbq@fHK-Bv7w8*^IL8pd z|Bjh4W-GU4S{-;5!;THEVGW*hmIZ~o4F zR`+sRphrFIr&s@)Z=+?`#r_V}XRzO|g(x3&R?vlQegOW30{bczvT?AJ} zPfSlald?>`A-$L8QP$V2`S}a-&*x_q{8#Wxp^BPvp@D-j=j7B-VkRok=V$b=3THreI2gxbvc3E-cjJW)S!h~H3T@#BE_a`1s>RLp>3n5fQ zLR56r&=K*mkng)AVh%=zDnxgpkeC>V6H_7b9Vu!so!sfHrCD2_vM+U+#NO@0khLnq zlB1LRRHjz4jd(o*R__O@hPTro7u*4>9s(H#VlSbv$U)!#R%b=)q5T2JYor0>+hl)Q zIxUuUh9lrAx%0#mWKxAp@iclt>{?}y#2G18DZ5fbGf5i0=DKENfmiXW;#}RxGEUX8 z>Jv4h+WNY!MjCtw8<~?Uq7e^tSmFIU#Fb-#DHowNg{UY{fE&L+qvee7y^L z3ht^=sWH#|OGRIEXSL|7^&Mxf*Y>2s{KkUi6>BOI>-J&FI+2wPLbi9b!=jV$DjHFH z-f2CERN(Z=AUFFad%aTX@m1>i{F>@EWdB~(rjhI z`$3449bgT_oX$9CeJIvyeixEhhdC#)VA2T|5BJ~44|Qsq(AW!1fe+C*AX_e^r$o1#$d zUEK`**7~>xep5hGOOqQsKW<H9s$kU;Ps8DPKBW|b{bX5#n2@(wAmA}W>0YF z9wOdm#3YMAtD##~K%*hx&?e}`c<7Q-hi-JOmGR5(ny zF{VeHAbwQB;slGtfW*L*pVRl|HWdnr{aQTRX9OdP!s&Sk@-_+LZ@j*X$m%2fxOtYA zy5p?ro69z?*87~#Fy9d0(vZtZ-IApR-su1E29kx~<}_aFZkL0)<1A_+i9->wn%QeO z3)~ubO*|9tBfrUOi2r#1o`EreW5VjfZimf?o*lh6eqO@B)B$O0(>$^@C1bVQb*IYZ z6&ETr$e1mGolR{tM9Xw!$1L<0uy7NE1x#hZa#@I|ae@VELlmS1hZI1Io6x4A(597$ zc0|Y?+Qq)g(Z*R$ zsi(Tr&oCNUVIDHCdx4fgQ-ubhT6{_JSYjEuBkE+#$C%hy`?xk`AJssWKy^JKGxc5i z^XzLmAMz&Z^YpuF`xu^@D3}3E!F?|-Iw*L!dE^1j@r3Ssp^w)eS!)1dtN>KpQD?-8 zBcbcju+jqL)t{m7o@A!-+$p@@yj8wi{S*N=0v-jF2|fsB1zHBW2dxhF5_${&6kZly z5xxsK8a7Pkrl^d35;-(#e{{L>TYR^~v&lnJ`KhKFptI2S)sSNbqStZoZ!Vzy;L<2?=pJnHK4O+v1d2np zM)v9XLwFD_=mC;2Is2h={$ogL|FcHOzXYO|IQxhcrh4xi4iVO+#Bj z`@}fSw&hg2ZE#QGJ?7IqNS=P4{+>?WOTD*xhxl0w=mMJXs_?q7muReHPAE4tCvY-}d9k*!L*nKo4o@Pb%+*9>4ayHFaxeZ=JiKIYIj!<*rMJGypfIu; z0~-4_Eo#1Fx^H@JdS|j~v2O`!No>(W>$lt_L6xM>gTm<lQgpf#YEI3XfB zt3M)AoC9554j=y>$aopKRx_|<5$GE5pOJ-{pSu0%`+V1g`}aK`udCgQOyv zNGj#amdh^5?#Ub#<*{wCJf)9Pu2d*LD~G7&sphK;sw1jPs=@J*@q-dZrN*Tu-@>cxC8=yTMfAz;H+ELqG_Cp;#$-5ZCUE}yWyjuLNg?7Rc zQFQ3_uo&qF=@^+&79r;<#zgmx$yT0JMypyA7AN&fc1)>OYqKh{t`>gO&Z`Klwx}`G zOf@VtWEyPib{qdP4s5b-?qg!M>$xxZcn!Mk3myg{Qdt7NZGf)s1PYi4Jw*=N3LPch z^j0H-Ny3SM6?E|nke#?M_Y6E52fdq4%2 zm?n85=_)-fmn)`4&yU`!Jf9SrJW=hK$t-$NZc%?7Z}t-X^f&RDukd;25v9LIEaCnqlOmntx+-h4SU3wwYGdMDk%`JV zX5M1AELiPFSl}4!FbSHG2)Y67xCE+!M=t&Dr#g4CCX0yJ2rt$7lWNNVo31nl^APii z+fP2#zH7wroI_M9w`yOYQ&x2B}G*p4T z9_DEFQuavK9v)2|hkP6S=LTFCYz~|jJSX^G@DkxN;d+s!3&-mw=q8nZDo?8rR7xw$D;ugRtHX_ZjF*i+ z)sL#5(R3EM^Y}J0dXp$P7h>S`I|h)GiTeTQoq{&~1gZxeLyW+Nzj*^xTn{w-1R4VE z8U{_;iS7?#dh zFNd=ZbDX@L`Q!j{9mPbs?mFImrTYh-*khfKIVrfsed60w(AHcr+#wy93%T<*HG%F0#WRHB5VDVnsJGDZvCV_EKw|52B;gvMtnhoKt zfgo#WpH!6U5`7@ z?pUsl9y~uoSea~|LKSC|ZCMS!V9y(1b3encICOB|oCUhtxsguL(>UH?@4_C3 zf7Rcs%Bj9u$CWq{f>hm+q`H>h-X zWz zDZW6aVaRTzh$WhEQnC`UL?Uo*H9SK%oXFOKdr`<(M`Qmi#HcF74u3h>ffLWzs5_RH#{LL zQIW(`*Q%$c(KW4wVa4Ia3f+#1|0>t&msh>2x!f!@wVB?SXt=#h!%a~dyf6(|O-GH5 zfh>uQekh!qMPpy|WPwS{F(Vf>VE8Sb_Sa!SYkBa*hpDX+;(<(1k_c2a3PBC(gmBzQm#QN^g zxcN89@Qh^C7RWdqB;y2=f|Db> zKnxZzoP}GfEJUn06M%ob14;q%6o5*QIb}doDd6{DkTr+`-x&nnugA&f2q4owR2ANW zM#A>j0HG}KH5~}`0ov<`%-IDr4v{Yf^M*>WE4*C`=n*`86lyV75bd%+ZJ=kM zmGB1#;q{3-O#dL#a6*(jur(AtoT2#dVd#R!3kRU7sMqWQ?E{?y6+!D?0G$UB5ec+@ zI&@$#w0sC?_N{2tX3e@_?wn>@53`$VchX@j$&nfg_PJzq)Q3Yi|gKNyO@HoX(}Y>8d` zfgN-MW{1IM7r{;^VfEb+*PEv#syjNY?X9?0!B$eM_f}Tcxz=56dfP=~pGQatH*(m7IBr$J6aCxz1@rx<6pOIOMaiVI~w z8(1_%8fFzJ`B_-@`M@v$t2Z*9NcaUQfJwd3*cB z_^5q)`yTfj?N9gr-T$5c2mk#6zJg1E1B1o|y$VtX9|>M592YV^gc))zq?@R>sIN#Z z`a{%P>>{obFBcDxY?u5g`6kha+J`lTm4{2DInu#0wd{cGj7%UelkbsFi*Sf|9#NtA zpeT!+5;Z4E7*!LsCTdsI(WpP7sWH-+gcw2Wl2}FD?l@azv2uZGk!qRhchz;(9n~up zJ7H^rGHGqnv!vn4zb4O5_DMdO9GPNB2}(Vt_D*|}W}!*es5NIa6SEq#R%h+cI+^un z)|;&VvaGW6v$feJIe+B%=ceTr#hyc{;rMFDRqsy4Z3r>dpe6!L1|EFN~xjrV`-PNV`cx9Cs){2>MMWK z@6f;1kFVNP?NZ}atE!DL>^ID=)6{v?AFU5+$ZFWou&VK1V{UU^b6NAj=9A5jn!h#+ zO`)a>rc}fgh44!WL~H?M*Z>6ZL1kPBk^vE%@qH8!p#g}n8?@sl4X>EcVYzfzIUUmi z=*W}k=<8&{@>z)3*yt-@cd|iwpc2p(=>7qq%32`G zR?u$H8ITj~fd)ihh_A7zsu#c)8i6caM2#~M7ng#LfX3lx*Wer1;+*;k=mh+u8rjri z&o6}GqYXlty*`d~X2=p`T?KTj}8)%dWyW58RW)Ki*Jg7Uqp8~oH zUmFQ~bVEFq2qNz8-h^$^P%E;)SK?*SkMP4YK+T{Jh;lw7w;Y42@)XcQAX)^fBz<7Z zD#T&E@NX%i++6tTHh3yOd|d%@L=|NzXc-9ajG>cKh%^5X+_VY7eLoTQk9Q_9qpgD-3{{;ErXT+N*JK!0o z0UdKe#2xipz?bLnk}bfRr9jGKz?v~YO-s;e&{dET@xl@y=+IWYH2^9G7L90CV78#M#_yWnZND1-kpZ6t zVSz&=EQw77BWiMVub6GI!;*FCf7P_~$jlF!)_GBRa|#X=zt*m(YO6U>JH=pSP#V$= zxrRY?AzdH2JnCEY)0i8vXO#QmKgHioC{3(NJ(QcAH>2Qb(Gcw@?F8*U z?XUW=RoPYVYG&5mYxZx+g-2+>Du=W(Fo~0ast^mW`LOYNDhHF4IH)YUW3q@lvJ5_M zFni-%(GOW6Zn8qtt|G?SiHM$HXA}X^(6tD~V z$yM0YHmrIKct0Lz-Fu+B({728G2-SBR=xuIOPrSF!`Ibf#o-+*?(FPou#(z6vdgev z;n3TO#@NpcVz;;{z4!Xt23!h>kr*U(lIxP+BZtNW#{QhZO}?K!Do>xEpkIoqszj}G z0b-Ulh*=Kfr0g`%gFp=rpu`H$2k{nQa zHMD&mwA`s9W9sbrDb48AakB>b+If&4)6cTkaz1i4a{IZHJtBN3`)&723^W8D51bdo z4AKPEgtUsLNKQ!d!-q-7%Y!54M}Cg9iSoj}f@3?SY>pjUSw)qZ3V2Y^C! z@S_nZR0!T2fYd@Dv1`aEf}mqFfe47T+q1_XT}MM5qMeGJ0-dkA2+8lsHB=5=#+b+X z(__1@Yk*ZyKdD;rEixxo7kf9B8Fwx2dfeN%p32e6@yfYME2W1rSXrfNQz;S;CLd20 zX2fOm)(pv$=k3ayoIj__)O_ds2l)pIP8VhsEh*Yi(oZ*_EVS%Q#Zug+ISRX346nh5 zY@3iV-Gf|%fxg6)g+SC4T(KW_?8O`F9{?1a0)%`2KXzfR8kO0#kdmCO$c4;)+}W;N zSAW+4*OS5*Au3UH___#r3?(qKW0|qmXuzBR5&UBVtn@yr>ekTt zOyuT-e>sC_HVxQc2>rH$7L`H22jY`Y13S&H1QW4aXZQrOmh_!Y&iP`sBFj+-ZDiTvo5Vioml z@0C*jPp?#)kFD>P_IDrDn8rw)Sk1NSWBb*1hSOK)D3=e6JDf27dXMA2O23kTqXD-9 zcZR$QNs>GWJsAE_@g;VB97oBBKc3{9tV}+fQ(O6|a)ka?bx`eT!%c%vJ)`Mb(~V{_ zyfqt{Di`-6aO#W7_&1>MIjlAd9`zN@5Qup(BOn)|gRuuZ+i>WVH@wmT(0h29J~tz- z-nbbFZ)e`okDjam+xv_h994Q5>y5LTPz#4|+==}!27iaZhmFSnDeAD&ADvq9HaqNl zIQ`|chjotM=yA;JxL1YGF@IiwN*F705NC-CH4}kH2kh(UPZiV%N;1;4!)d$8>Ie|~g*9kAw-PLhT@C2&UY zXL`zfjDDFRk3^Q@MdDnEo%GMhbJ3q-yC`*iW9WOlB2!@>>It34nAFX)pWrp@_7j|0%j5RBW3!RYXkqHhT^5Mkx4jMT=tW zVt2*cB-kd*Pg;bgnv3bD%z@QP-H& zRMJF6)rtzv(s4RRM@~scw-sstphu|CT|*@K4c?{&(c@9<=ob9tSwxFhfN^6`UnC;G z-iX?6AyOL(EJ%gUg`p1h2=(^&pd|eJ8)zh=Ej6@g9_T4NQWWSVa?P%grZtEPx&+CL zM6`4r5*-ZA1b{PKSo5p7URyt|{H{e%hgYVOcI}PymPoPclh;ohKTNqH# z7Wi9^=yD+VH?qS@JLj&R@~&v_O;Ueq^P-!1%3+WRWj~Py^YPJ`5h^wPpirZ4RbY3~HlGmLt z;758+3YZUC*f(ij=*vl4T@=5)>dDVLEu zFV8aHF5kUibYV!LchSxwdGXMa6(wg%ZfGazx|Gf*3$WzbNQhP*(7_;NOM& zLas@sh51Npq$Vj@K~DT7Ib6L<{af1JtX{cu@_#NgX`kyVOMB|CRXsLLHSt$=8Q+Ed=75tcV6S7r$-}UTNcg{fu+b;r+yr0|2b|jiNOX zP7R?IF-9=wGaZ?im=jpdECYKryDw)D_cOQ1wcfR>yVU(Z{uIvw-%8)rzI%MRezW}B z{QCr~5o8Bm3A_;WcW}9IZ-`v9SoBO(C_XFhEzwA3h0d4Vh-i&?8u2=^f7IBh1yL8G z5@YVh{1fwcEI)2VT%^)U6|7pN`b%|NH6#92JUyW#VPs;TWUu5~DHBrTQ+uh0smG{S zsIRCerrD%P)4rsKWW;Bj$qdlMWMyS%XK%@7=jw7xbI0Xv$iJ8WF+Zgsr(j%>Wzo9g zOT{JH=h{r&(9)>V6XpFXgcS=bS(WO_gOw}w4pk*pC#$AZ&#Bo|v#++dVSe2&#(d*b zBdb2DetkW=A*Nwo08s3=4s6{o4uMpG!HT{P0^<1klJX}Ln>~O;S(wC zHIRFdViIDyPw+U?VK>iiF)){b(QZ3dH<|67j4tp#7C^pV;aeYo{s96y!j?9{8%=>X znhml7Ee1V?Ch!miy};ScR-ohwP!K#74YuY94dFmT&VbSo(~X7QnGn5RLf$k8C&ML( z4LtF+5~$vTh@L?1u)$mC#F&g4#7vM6w8;*17i0wTw<4R-L%U)?tKr?q@N`tzWf<%c zvp}Jt=rw{@IEgyKBE&4SV59G0pL3D<5HlEW!t+(bPNNZ1m4j;9!qLkgj%q6A*@5nZ zcHw7jptrEy$?%E`L5`q&(BB~9t!;n&w{t-InLv9tkP5U9T1*C&fVP27zG}m~y z4Q}V%?zz!C3q4!B7kh8>4)D3-^W5(z|Nj1i{0I9l^^Xo{4BQ%cB=BumwA`dvr^txB z6{LR$2g#t98VjrlvLHGUvwtt3i{26+Y0hA%`koiLo zeudnh197fH-u}Sg5y0eokZT+$9Wt|qY`S8vJwcdQ)}H14n1OwSd5o#xzDsVcaHtel zeyYL?Kj7yp=)*wBd<49F_wWBtXQ#@R zj!D>R^bML%9Gfkt+0L__>NuLjb*`l>p`4}Or{*!vv2L^GvRUjL_7?V34vq7h`!KI2 z!NQ>Y;NODx3RU6)@d|OD(Bja9u-aFT4>C6mihB9MW#3Bqi3lPh5K-)pD+h~|hLBm-B z9W_Kcat20w2i_)RTEpSTHv?b#0#oK8Qmg z{Nq}~amImnwPEX#pm@-2*p4S`XL)N($1GxkujUiRJew$iudG^++SwgT!lww^bZ|JkdH_Y*&(V5X#t z%qucKdP&T0v6XQpDppeWl(XuL^o!|ZGRJ7vYer-{Wbe$~k?&pbsB)P8kE+)ODzXL! z?nbzydWLg#VC)R!L|stz$N&$11wLwliFZ1*q_fAB?XZq=nX;DkE60ZW8<*l)=j$XW z53PzaMIDSkpPH8UYsst9;Z<`C5r$gBq`E!zQ7s8AG~9AV&p(itc(rdotn4DVa~(Qp zo-C-weHe2cX}3+O?L%7~Gl{#&P3z$slqr5K9xrj1w8#ro?=%0)9IA=TNi4`Ncw1mm zc(%f|@=~sO}<6HDuCBA0`1m-7|;$aDhP4#GAj|2 z%z_4FA)@Pp97qD`9mTr-00I#CH!(?4*pc6K_S7y7m1{aJ&b-nR+qL#%y>orKguDwi zMNi4J%xulMn{%?lrz!zAX0EiMQypH;7Fy_lSZ6f6(K?_|cX${VAcc7rds;{5teR2J za^ae|X&zO+r~J?Na|sbuT$*Xf-@Aysg7zB3N-5aE&;L3`VcrFl0i%z;_M- z&UHZ^`vfwZ0h#4sC!c^{MeTA+>*%4?`CxW!J7%PHbjhCZaf)z?T@{}2os*JM z&gH!+W#KfE-98b%0yP&xH!P7s<^V$N_W1XV7fuRL_|imKlF$46PYg!))(eo!IePojs|W+q-CqJ)33pl;rC=&C}kK z>31;bW>{HxPw61(MCn*rV8rIKEoGRT10MDuY#VysqvLONBKJ?$4z@RJkJ?Rk&6TZ{ zeTnl@o=7~Ocs+5uI<+KE*Py#mYEc$a=2K46v-Hl@kE;%s{e`aSR3J4JN5e>+>kkghEoxi)v zvwb3M1Y({Z|FafzB~WDd)$xUs1#5#xTZX(mrgF8O0W`&359qNMqA@~;6*uwz1yD`$ zo%80dpD@lh&#d;D8wB^wKU>PU%gA$kB3&x~DdI}R;TRwIR!Cj#Mup_d0BomH^MbNGzC9U9%)1+>@t zn(ZsQ&!lSS2NVt?l5x@1-fe~ZNH3O`jj!BynBSv7$B=*!Q|Ob>W8wWGlcJVHpNakw zy*_qXTuX9I%I%cCYRmK$>0L6ca%~EJF7_`uqqWqnEB#tJsVuncMMY0jV2cty?K9%$ zsW>P2fb+cGSlLua_bgUc4Lfc@{F@COQh~~#L&S}#-mt$`*!2$Rk{G0gKQI8Xobh!g ze9l53*0>H?nmdaQl8*4E3+4-RLp;N}%ZAJ7(bV>7mi{+c$SPUjH5c_IF0xZDdL=M5 z6n5(ZzFY+U;q)C*Pg;kcn$0(VXYPU-8```0WGSiaOJlbtNmE@D7aR^EUW)>vi!uMm z{JWiVoUs_z(^PKU;Z&E zHk3KmZD3OGGI801s_wN4@E#MoJ2dXcq}XTHI{W1gTU`dx1@6n;Oddj%e*SWUk)s4FwwN1@U9`NtD35v+854yHWaLy8keY+r{+6ImB zzKO14{Owua|E_tKSgPF_az9EVa9@pj-oFYTD=*cl==Nr%rnHYt;RBX3j)Ie z!gbPe=}tv%hAXUdJ7gwC<>)*x#2ffaO!S(Ly6OhR4G*#INW|b-_=^e9mh+I=1yCH~Fw>Y%?G(i;^df|l%lrK5} zMCeVzv=?}d|K*MOw?z)~=?)&-JRS#GCr?eKAiAgHe4UFu^Ps;zs6qMTW>+Apz!J=K zRUp6X{Jc(I`p#~fV>O4xO>kS~F7aC-JRv?TZI!N*TSeT7>K$zny)SxCiZP?P;AkOP ztJX&8tV@f_3Mw0F2i83_2Gk201dU-$_nLZ{;!I?mAyN=A(9xyIKxYIKxe6C`XdX@{ zc$jVN3Eud&N8Gi*-0L9X#QzmCv1aJO8tjt^Duc9&k%9TcQ%-`UNZ`^b#E8L&!%nnC zq6;7fweZeebo%<{_B&2#T?js!(Za&o!gjIk9J@$zA~~N@MLWeJ6XQ6z8Ezi}eS_x+ z^Mv`rpTk#6*GVfC{K#R6e@^M9L|2?_y$3h%qT=ui zs1*p~2;032d)WlU!~INDDKL!~>)(Jn^Fh#c&;e+jAENgC*bDdjnmc2PTee2$f1S@z z4>KH?rChO_4`1RT_BIMfgiZ~e7uq{Q6!9n`DE3;~p3Ev?vC(n49`<`TJXR0Y3+ zkEkF4@%lq#bVSd{C|ENwW2_L`Nz6x{fOsPZH4b1H>MJ4WEXJGa(AX!)ReEDZ#EsdF zux1vhAFQrBH25L3cjkAk?TkvEGWUA4296h5iQJzguDFo07{cmsJ zcMKc#&_MKvi_lf`W0&R#D9b9-?y}QIr_dHEuPNweCA!}e^&aZtWo|k;!xx= zrCjw!buWHjibc92D?ckIyC}Oj+eiDCE~%`(Y;hw6HD(I39cp`r=>tRq!33XStz*Dr zALPd2STW%dh<685p~YQ5ivQt~c_rkm&b4(;I~wWy+4ossucFvW+@1p>tjGUv{e1`K zuIUO}mR-5seg}bLoZ~gemyW+Wf1#MDTWAC63+R8)e`3*CzN}5IMc%J{#J+{TCckt3 zTCp)SEj&~fCd-WalrlK=Vroi8Sw>>v%fcf?tBXb2Svm(@j!vhWSvsgg2q+Mq?tsq5aL6%GPjW+^@>VL<(YV#6-p&ExJ}QvhqT++=QE2Knfk! zEJ1cJz}m)PZR0`aIWB~ro2wG!6#x9;1@w-)=fuy=ai7t8o=rAs1^G|%Tk| zlR+~>?7~~5LnA^XVj?0GjS5m^a}+y99=9!ylW;oWOoBYIN7An;<5H%ju1Sqkm#Z7q zThrMYSF%6nB<36P59aSJFqQsVMyudd3iLPil&bmF8P&x#zI91WcvBFSXuDf<@RN?1 zg^qZEg*k!lIDzJ)O6iF^&3@>R3&Nd>AoM|Fb{No&0T0`XNcauN_d5?eV^13HJa=-f z^F@XER*epsq?Ke3x)pmXcOUl|_o=`uc$R2G=p%Tp_^)DLQW36C)!H7R>UU4!8@j>G>tB9_lYWc4TN*8w1+r_Km3F%}vy z8adZ}#Ov9}{)-{;Verif-|eIGRfZ#02kd@xyz4mKsgKK0@^EBkZuijA2s#*a*pCjXK`NeNC7rdOo5rn9nl=HJ)NDVJ4^s@_ubqNZ2lWmqf&(JN6?-F*vL zZz~7=d0di zfovqmm_yN%6^1@PDSi*rBJkA-v=)9a|Nm)=*#r2p?IdNP|Ae-LHH9ZiQ)M>MUoyz} ztKO(a;XZQ<0V)h@Ih1gDR$0w0p_K+u0-8eCvM$UFlSirOpa)^sGEb3Si zNqbt$(H+#CtDK{^XvRwe!2GGupqJPwaq96qVx~rT&wOCTQp6L_At9ogh-vj5UhhYK zlHqW~v5Yj=X`FMq%PD#*{SG~awTN|x^@aVGqjq=Yb@hn#p6?^~|5rFZbVT@EX|udb zL`}pL#U=$MS{mINy(8&CioZHqU8BCBzO4RRJuJ4Y-?X5)XA9oDxJko3Og4HUy-_dq#^eAWbP)JprM{@S`Xc`DMdzMBID~f+ z5jow5C-i~5f*1iR57 z8Z1Cm$V8;AMMQYxyWGro8d7XXwq*O>^y4h5dp>`%2g&2P?_2-({-pss1b+*<1*s+S z(3tRk3ady%)Ww+pWA8n{qB{P*?`137`?3oNNbmNBjgAGyf(jOFsE7@_BBEkLL{#k9 zOKdT=sIkQsTZ}PAvDesJM2(^`0`K?CDZ8LaOz!`EJiMYiEXzj~zd9{I&^Kre2&;C9hlF?7X9SH)luYe~UL}HN75*Zv#YP zUV*o0;OcScR@CKvm`T^e+>=_JxsH+ISD1qwL@!JAP#rP;d4;+-hX0M{qpZ&{E^7?V zf_EtMJCrvIWzE89u^Pr^ddvV%qAz%avDj#?O!U3^k+p`_9Z~n^kUjMmH|QI7E$mXX zThn8)Pg<{Q^Q7&U@u3~UI`9+aNsYQS?UvqST@OjmN4>u8)1zPS{ssLF14;($8!jK! zbhKsc?#yqp=;h|%$m?;m7vP#G!*!4Px`-L2T!axQzR*S9 z)YTLt(V8f+2uIk6(P%D?sv~+I>iyl}7>S0U(?r)m2d0XZRWL^+jc^SDG8N3UhY)CizUf9scX`zq%}#WlM=el z?7Fn;rLNDrPU?QY`_t}YdI)+t_WY)2wd6s`uabYm3q+drPVarUk2Ixa%C{-)`~H}E zEp=c2Is<+jcynOUz}P{;v_)xO4lW&H9(sIO^6**13y0qw?l-#i=*Od9jea}YF+C)` zX?lKozcGGe{}?-P+}UxfC;T?y^@RCZzfRdcb$RxR?2_!|(=JUbnpQk5H>Y)Oo7_>k zU*$f@70&RT(QwAg8G(6o@=Ee#Gc#x2oq255jQk7v?dD#c>od=De%JZi=YK!{-lCv_ zkb;R@{;>?j8HelX^)S3iIt)+rN21k6VvZS!w-HBT z{XGgjeiY7Ttd*hHtp}E24it^P$Q^xBH4p|Spq2N*IEjxQISK7!DmVzzZ#KnMqZ!WN zW_ZH78NR#M9OInkn0ewW<+xt|fq5YHE?7Cn#QB(|T)+r(8RSchtFmw%&qc3339DY4 z!F9AHC*TU)!4>o<7jOj~0J#So1*gCZ@D{zx99+rlK|}BybVqNa!wjJ>dYtFzaW3OZ z@eo%DIW-1HuTvj$&z3iWcpdR=kdEk^@MaC1i($A{1mN2ID<}n(ajmWjyI;^+tE07! zL@!?i*5R5t4SiAyRwbu_J?NuOp(VG%Is67IqJt}^5Q(&%t~yNG^*?E zuBZBp?0>R#6`8LmoP7JcE{sG8jXw{-C<0_iHoO1XOGCfpY!8vjN8yA$Dyr7 zV`S9_?Pn&A?+yHSLmgKsj+Q6pNzZYFdZ31<-|B-}WoyuS51}w*YD7llt;q9Dm&B#S z=VExcyz7@es}J~bz`?Y$X_tpS9`R)47a6WuqUocipPv3?`jy-^Gwf%YW{#g(ZPxQy zS^0_uuNH|5B9=B-7KS4mj0|J=pc*Wg--iwD17@0q2;rO=`Z!T_zvj9(|;`oN3 zOfeE7bII#puB6rM)~WIN@tfm& zwqMk#LGLcT1;e+E*gGOLqfJJ;j71szv6{@)ncrs~9Y1hl@}%ZDBXU~KKC`H6!J2|l zj9l<640?=PsF_RX5vcdb%*8eGC3=Hbs3{B1+ACB|VP&vA$Ofa(_TJ(AYk~8Ky07;I zh=tw<*Z(J|p+~5hn_T|c`{x{!*b)uGKdjW+^3Hm9>rH9+I`mnXLu7K3w@qfoZD~`j zkAKSTzP(Z(ran!z3>Y@ZJI#OS?V%B)K8$WXw%WvNQ~FKy%RZ1jIp`FG|PEn2ns{o=Yyg&6l7!gXH+PNV1Z$2l|_=g>fmd5+-dUP0cIan7tpp5LG~ z@{re`aL)e>%D5v%-lmt*$OwTp9YUdAQ&bd$dbz?Uwah z7PP6>{^#~{J00z@yO-m@vx8a>9yoZz$g3kekL!|?F+Y1*1nzT=!8hHS;Qh@la2E}p z&PKmI8zY}6d? zZSsH1kDU8%u3^E>MQ0a{DVVY>9A{<(o}k1P5XW^eN~A#FbsNWbAFgZ>xT;0s{K-J+ zUZCBs!&NH@r7XheXA;JDJuwq~hq|V|8QcO_n_(!iBhKhaxLyQc?h%jCdlc$C3vFQ! z#;tp}8ldm=nbTu&YW~bmK=%ME$*4(Mo82**D3qQGps(@ z|5%&b^cvLL&FE{$jR<|qLv1q>?sw#Ow(p!VOf}pz>e8sIqn1s$H?=6ob#~i@ix);N ziN^iTF^0*w(v#1~*CR^fLWUUelTV(HFfy%{gIANWIyy3dVrc zcV6Pq+NkdcUFTYt^-J-?aWlu6Rs-4{YVVq`HF;!O>tV;o{6402M$&|dlbTG6pZ-3# zri^fXEJIp6$V3cV> zYm=b|{RwUR23ObCH@!_sT$MwnvpOuXX3H!8`=0~AFeXj za2#ji+P$sZv0(pEZHhOD+txg5|2&~6;Z1_1$Fk&_gXDvE4LLL<6tjh9aN@i;2c+J~0UsN!s zV9e5%Xjwfm7wnDiETrK564tQvJZNeE-psxC)C$gU<~iBSkZ&6+!n$=>l2E7P>uw2f z7&$z1l>KPs7 z+j?#9wX;{h-rH03eSb-9-oM#^qydKq6%7hc%Sd~Z_Vtju!_r3;j9!`ka7>4c!5RI> z*-doFKAiJ&PVMO*rpL~{o?m5d^|^!Q^;>#tX*mATjKG`IV{oqq#@-mMEdVFc!=J!a zbS36x9Z`mpI2(S(Qw+}mK97qYC?3yv;ftL(LNd(74r5(%F0QU$;0%6@vR+2-^c?4A zRm?`I@2vcSIa)p_#L9^l^R!u*qwU9-qy~Ddu^8QM#)x(lMhct2L+A%_K2xLG-53oX z#?cN(e;$u3+(evZzjH^B{eJy#^;&cHicsy3{(AhnbZcGHE69!OdNkGa_eX%$Pl6?F{FcAv5!4YG()KTjq?L zvvN+gc@gs(Eo{8-*Mh>u-b?l^nY>iDyv6dV%R}+z@hH?W-rs_r-xYNnjh<#aTK)v| z{HJhbO~D-IJM;{Xacwi9e#6j)reSRNBk)80*2h?MFILUBq4%fWtJxMKfuAsnxraJ! zhqEOXBd?pcy5XNcj8kzno{xGSiZf^k>eLadQ8M%c!*BG(iWlCh1o=Jq0i0#(mOiil zAkPS-^XQdp0e;Pk(O5>bIvqRB3!f}Kn@sC?Ho{?#RJ0jxn#+r8cCmK(U;F?wg zrJ9EpvK8wSp*Z47=1igI=a=i%X)vrobeJ@AT@cKx=#tSvvjZtgxpb_j{9=Bt4pJ|DeqDyjyX2=_{5)bexJT) z){9xX+4W}kpI^Hmz2NEMtxFCq8@xOnXUA-u4P$U7sL}eVcQj;UY;zgC1ocj4yrZ8f zJ3a1Bn=yFC*~K^u(8|X#ZHAp?C~7sXHN0U!leokmdk*f~4RTU`O+} zMn_HBFbQkpOixdbnD^GH)gZLt(&)10J!5yZif;QfUf0FH%TK-5jQM(oXI|sH@8%@U z!&iH820z1yG!^5vH)wk&arSNnwQ&YJQBOu;y>c*)>lU>0<7kUKoVm@>2Df7^z#eCA zA~=JycPp+A`8eLc;`kWR1HJ$?&_2^}E>uSEHx9?Y8+yPkxB~x(ah(s7S9%mJh?*C5 zCeF8AgCQq|wjUii_Go6OoMY4X&Z$3t%mVzojQilPU^MUsW5`&vFRD)c(FVpd^+1n} zJK<|bozW{{{EqPq{eGHs9zALt+hj@J*tz@WMv}N{qkI#P*Y@a5=x+vs^7rgeN)x2adJj?8^r)^Sr>eO>h2=1bbX zZ)fgPJ9RI9Kt(xt}wa@9Yv&+6=5x9pI zVD54mSGZ2Mnp|Ft@mnCEzTV9NErQ&V$O z$BwR?-fV2@xTMJ|X2#DRGke_W7^Jd9flP+v!x zbBG_5Z2DVCaXnMW3|=(tk$3otBC_xtuLp!1+#W$Zz?ZQB;`0_CK9tJ zmy2)OQa%O{+mXbaK+NgHoJY*%oNqOkzdc;biwb8`s}{;??u}SYQk&HVg|XT|&h7%I zjpSlZVCtpJ?%q2pZ(nn%M;&5g7?Q+lv)w2^8#q7rwp05*lYC#{&awL!S^poJQ0~`= z`+Z_A;9A1QwXCnUQ&{cbepaiJ!D<`wSS@A}tJNLPYJusj)+meBYGkrnkCjyVMO=Qj zTWFUuyZaX@7o~_Y9f(<(m;uDBC1PW!+>!FpnAkQYW?N!*A!Z+9{!U6JAo};D-HPQ@ zC{H;XOMW1$ZLPv;m+P|Hkm{^_=c(U5>oR-P?8|%utUg5M_Tzt(dv##H} zP&o=`+F+U8v|QSy%VN;sK z^?>WS-g8TR)^#A)w-$1ml56KNoWIpvFMFEnTOV;TkMgEcZcUEHDXt!GF}+Ed9X%fC zM%*)r`7LwSm)TkSuaH($EUqN~e#ERn%!b5_A!ci?T(_H3zB>`yUc?+k%+bW0$oX?< zz?OA7*As8!`su}?tgDFYlV5ZGWLz(Bm2(};*^T33j^+A|>s(8??9Ikph3f_0as5Uj z*PiNfc4Bun#8|E`N#^X1aGJX-Rq`36oC}D#l9*o-b0=5wI_)Wc2Z`{W5D;X7|`a#oeB?)f1$Lok5Q45@LQy%q_&#IzFuJz{a@D zz-px$DxTT)l(~$UN*<-V60;#O-t?k%4Qg9=|F)^&&E^)b#uL4m_@7GjJYvox<`QDACZ>UuX(Q3&NNJ7}{YPSUAU4&BpU1@J1y@5u zxw0g2Wx36jpzkm?@0p}5yScLDbK$me+Rz-Td=E)}H<8-g$JJgJZdT&mgpKo3H03{? z6moGab8?sAlRy#oQb&J&332qEl#Dx|_vOe9p&{uA(Nl&tX*xV=P7-CaG^m#-VkXoog%>7*K zm#(ro7&(th=PlQ2e@dYC#oTx|hs$*mm+Q$~t}{ulL%4X~x1d7PBiA}47w1S$V~J@U zMQ`9@UB<<_mW%ZOi8Y3c_0BRX)_89J=`1$)g-uzl>Ks;EUzzefkDOi0h`ElKHMlZ) z{6zT(Cugll!G_blU^UkQRy)b%^Cp+i6I?z^Nj|%idKPhKRDu^3`&RC}e#ph)qG#iM z#KqA_Px&6ml})T+{p@>6xzOVz3wL(=axH5wr;X>@-BZr)@oF|6FD}L;E`6zqbABLpG*P}ixLSA?%jW0Luf2On3p_&1ABahhedv`XdS!-QA)(hC=-Dhi_oHVl z^cbHW>C&S)dQM2M=g{ja^hyOi2d3wW^gM^28PMZndJJeghoslF=rtL7m4lu?({oFD zjzrHY=&?0De*AdONw192D@#4eD36|j({oXJmPOA?=+QYn0#%c>psCD?5LL6a$c&Vp zyN)AsmAk}jO-7$PiAm3C>9ORuBrSS=OV8hJXSwu>1wG59SLx_gE_$_zUcaGd!t{)f zo+HsS1$s0*fV6#jeUe_8q}TcA^}Mbm=k%Hxy#hwBebK94^lBEpKD2@4^J`*;k*g%V z+Cs0U6cKxR<$+$Kpy!_SY>l4h&@&f$bk2^&sT!kK9O)H1dgY8>i=tOKw50av`5ry% zp-1-g3MIY5N3XQeYghED2)zP8&wS}w5-R*Lkh4!sOb24R64Qs6Rft)Kn2m`UL(J|Zw${Y_lItgm&(UXonH{UW zwL8T1GA`Vhat7CnG%`@7_@3*N8jqm%3%P5BGnpy%Ay>{iB-eU!b&+zT*Ci*|-sTpU zQWBTaW-g^nlF~&krDvV_JnBb>-ng;Mj@PY2Z+yR$o`jJKMrw(45x7IL=~MZg zohl&dcSHKN_M^vAifbOl9OC zMh+v=MKGD!U(U!ikZk^_e9Uh^*K=Nl{GHiO=Wi~_pNrrq6aE?_Z!_{fBcCv`h>@=u z`8y*^87X*1*Q-4vl|;G-T$ue@j0|C9V@5_YvMD25GO{fr6ByZrkv$mMhmrjmIgCgb z!Dwbb6VkRmqz~xhc&3Wr^`0>)NyC+Z<2b-Qm1=8iN zN%EP?%dv@%D#zx!RQq%hG_VOr*|YsXI1_FSlb;PX;i>$v=WA?*@a%cnh6%r!3IDZC zcq$$Cyy;vaJbT{sV8ZWa!hg%iBaA%3$kUAc8Pc|1*yA*eiRU8Y?;0a-Gx9zopD?lr z(l(x9rSy3`g^A}i@#i9tKc|nkJ0pD<8OX?LjI7Pb`iu-^WE3NtF*1&k@r>-u$nHeC z2!=EJ(-@h@$T^H$$jGIPT*b(BjNHV?ZH(N-$bF1F&d48#bP-%(_HQ!#Zr+f+r&@hn~le}LOk_6>3D*fcv4@`$7c{DhcR+8q;0-1 z`Xkrd228kFjK6t|EMVkvMy_Gx21agUF;d1zH6tAu=?rO`kHGPCK9VYw zOWBCFPiFF0xk9)&Kia)N<6eb{za}H=Rq)?%Kka`M<3EP+7t6@jjBL-yPK@l$$bO7W zW8`o~rZX~&ky9C&%gEV`oX^O`j9kIUFCcB}!&^h=a}|@%jTPKq+0pJB;cgqQ+7`N< zZLMIhcclIAV&Z$tq+7;F;Vb&MDHy3`qy^G8{;hNAcuq3$xG?@a80pK%AVyYaWF1B} zU}P90qZ!!}(l(uuGw5{gR4B*f{EjVCq`-+X=0=kBi$fv)7w`>r&pUvFM#n^gOPO^*^rUpjBLipI7r+0LRZuA zHLFlB&hfN;D<++eO!%&hOlD+XMh;};P)3eo#F*1jdGa+sBF}VhvUjGXDXrZLf zgCP~{PfVfxkE&pQOiPbfGnss^VAA`7ksBGgg^@cLxu20o8TmaU&oJ^lq-}nUMmqh4 zOgh&Xf43QVpOH@(S;WYz88tCo=_MmjOl zgOR?B3}R$;NZWKhUFmpFAzoX1LXd#ZeH#dJBn80pW*DvYej$a;(nV`NiCc4TB%MkX_|FCzysas*^I zfsg(iuLExIeVV8inP0Qw)6{W zq0~-RUDj2WD=W75l6H_zm7bEmmHNus$+BcyWhZ54Wu>wpc~|*N`D*z&d6~SbqKhI& z@ml5~ZzrEDKPi7B_g1u3j8|+{99MWq&L~VuZ)Hzqxbm4|p7SZ^Jmmo8cgjktbk$pB z2h}!JfV!c&mAbb&U7e?1sot(Wp}wqsto}n?-B3x>LbcB5qlwpKX};Fn(P*`v+E&`} z+D+QaS|8OUqm!yvXXy9n^@gp& zhK6LxOUW$z{)R<{y~1C7{f?yJ@=Vwc9S!ca>A^+UvLI zuj|hXdl;rlwDyPXXBze!9vb#2*QqKS(~T{R7mOWDZj~mOHkpi-FPLtb92}w@MmTJ6 zxauG`yO~>=GtHaKSIw@L1`holmOGqvuro)ShnZKI&zj534wm*757Sep8J69adltQ8 zsN(>~OvjCmg^qluK&Q=?s}`waZO5LDD;!TbzH@YUYT?w&X@Jv8r;AQ%JDzhb=TzsK z$~Vr1&i<9!Rhm#~Yo!~NWG+rFF)o8$mb-lK(!A2hN^2{fuf%g{=+eh!p36a(CoX)~ zK-WaqX|CV6-gotMi*w6#+u&B{_RLM@THCd!>m1j^u0^hPZozJeZrN^MyM^0KKHy$JtH1++je;fz8>=jLpKQ0tZj*a}$4ZZ_ zo?@@@UX#3^c+c{w?wjq~!|$oz82`!vuLF_-PY1RPx*s$r*rUn=_Y!x5$7{RG?nUlm z4|{$fKa}51I85l}QNyE&N0P??k9r=HJcfGgb#Ldf#p8gd!E3%(zPG*4GM`Z2`Mzm> zzxyrnuM!{(>>qeFFeyk7yfV02mBk(#Ja&7W@wn@8(Bq{?nTNr%s%J~jhMqMnF_r-P zex6yLi#!|KckvwNIo)%k=Wfpvo;N&Sd7kl9c=NneUX{FRcs23z^lI;w>@~tG*K4)c zUazxW54_5}yuDj^_x1kT>4eiM_g)^?Jf3)ldTsVvtC9Bu9|!+1{}urw1Lg$03v>^P(b@T0eAh^JOZw{q zeM5Yk`X=}$`3~?Mue+dotb6NG+4Hr}N?n%kEZ^n6n|*iqe&@SWch>io?|WaZpReCD zUxA;a-)ob-L#m~kU#2C>ud`pO-)O&VzdXOCejEJ?{f_(H_xsI{@2~au@^|&G>EFsf z(<$HSlK%kz>HZu2zxOZpcM9+es2dOy&?%r@Kx)900G;#V0B>i7@8N)=;0*y60)7oB z2~Y*P26_iJ2wWSO5ZF6#c;KYKoWMnaUk4r!EDXFG_$p8w#0xS8RSSx7?&SQi@*kCB zf;t4H1dR?FA2d5?bI`G%>p?4mz6m-L*>2I3#hF=}x9G_MC+4a0(m-7VYFO>CEb5u&BRMp#9NAQDa zmvo1`p0T<)*U`^K<0jDu*bUP66ui;r3*U>PCFdpG?e9u|k;f@7D~c8A%HAreW{$DC zwwrmE<1fx_UFy39R&G~$jvz>Ekm(dXw1x*ZgB7Kh0iEAq4vrabePF7wO?iO4BNFRg$V~+*lXuVj*B3)@>U= zHUg30B=&y*XTZ-O8g^G8uY)Ggn}Jx+60`zsKs;y<5;fJ`tRWPwRw3K)$r8DJd90@<+3ft&$m zfjMA4SOk`U9JuF#4bV4%Enqv?3G!jT5bTD&4;%o8K>_T(hdd2_0_VU5a2YIt+cK~M ztO9GmTCg5$1e?HSuodXAc4!1<-~_hA&I8gL_<=xB1ylz+;I<3w27AGNZ~zTZ12QR^Epn?4d$TGmkI+_UB136FuEieEFpo3onFaa}g z1kS((xB++I3A{mT_z#4PhwK14f-ays?7Bhr1ie9D&>su}L%?t_3XB1D;Wra<0+K>=6-mVp&u6<7lj z;eRdUde9qsU(g>60z<$?*r!8|1>?a)Fa>Oa{bsNgYzI5QF0dQy1^dAPaEJo_zXM00 z9|dQjp9dGgaqOQ2ccDK3kHIrg1YUttaC;9~0&t6XD*+IL)384S&VqBG5L^V8!Bub_ z+yuA59dHjk0FS^E@C-Z$FTgAC8We+(h&vsO1>?a)@DBFVA@jg&Fc&NUrLZr6Tnc#9 zx&#mc8BhQf*aNry;2<~xj)9ZF0Jk3?9U zU66agesB;R0mr~e@B=sleg=i$61WO(fZO0McmN)QXP^kY0&l=O&!4A2O6VIUG@Vt+iy0+YZL&<*xIK{oUpkPGs_ zEHDoC`H*wLe6SD{fF)oVSOM08^TEg4bX_;{O170P+x!Vm;~zww8egVkO(@1uAm3#1yVpiFc1s|!@x+84qhSbYfucPV*efFOvv|; zA3!PKVLf0i?D&xOU^8?TJA@GMD2!cUXP#x3+UT_P6^o48ySrxJoWGDy+kstmfISt-ucJMcW~zkh>xGg8kqCI0W2ae+2R< zI1WyNIh0-A%Cpf!jG9Y9CW1#|;FL2u9(^aq2$5HK8!0%JfXm;fe$sUQc;0JFdx zFdr-eOTcol3VZ?9gD=5munp`0-+;Z~TW|<`2abd9!D;XlI0r6(%itQg34Q_hz(eo^ z{0d%x-#{_=9TcKHT?Mzn1Mm!dfPER@V;xTf?13DpfEE~l18@YDz$=7#4T`}#@E&{s zrJxbqdDC(Ig5*QCglrAsK?fj&ofy~y8BlSgth@Ttps*i!W)2B_Zq2bhBKXyW5K@1g-=O%%s1R4fAND8>| znhqQ~tb70dy^>=G_3Yli*H9kfpq6MPmqQ#=s zqAx{Xi}s0*h)#(lLW%I4=&I-r{5=u9g85#=6Wfb5Vzbyq>@5x!*A_PrM~Y*`@#2o+ z9^zE-5UjptiKmHYix*&hb{*tb;+^7e#mB^_#OK6U#J`9iiC>7{iEE2^5_^e6sF9c@ zZjio`Dp;*;EQyiCNjhM^SkP5cEGQQAhCWa-L~>DAEJ&AR!S1^59&~EU#@;N+T*(s1 zRbahjt7IkeSS;9$z0cbY5ub-8-%Ea$@P${f_lxAAq)76X*xMl=WzbfM(j`KBg}v6k zSYWYth3Ny*B~|Q;Bz5emT54<`X&-Cf2DTkRcaUN~2(gV`t(lgSF(wo?O0G-xLtsGLoO2Ckw1~YkRx?@iJY$}7Et4#Vu4Jd zgYKwsQEWwQ-ilxaHNGg4)`o4dprIm45vzz-bXIgzq$tu9qhLE;@l5yM?Y}kf|6&bf zD`qNq!q>V#bP}OJPmS$Aca#4k-=7=nfBpU6Py-7T%N6SsTNK|Y4k}J4eo|ag+)_ML z6e->+$`leMX6Z@?rK{3MSw&e#*;pB)j8k?{c2)LK4pNR(j#Exm&QvZ?E?2HoZc%=t zJcxUPeo&rQUQ^yxK2`pv{6i^F$yIullgdLCpsJy&uZmFpPs@B=eO>LW>8x3zxvp{6 zcGfP@Ue_vgO?271lRA5S6MeS+q~6}p#4yRQ+wj^@)0k#lZ@jF2WOO!lHuc9HKfg#T z%eu>!$gaz-iJj%w#Ek&GWy)9Bt*|>FFXe0+DUuYF+cL#Xg^MytxlDOeN%{Gl%|*4s zuDxnL%#|uOg=^wpY;>#bf3^SC!2c^XU{N<$wNZ7%c}$PwT8nz9dZ{SApK7RTifjyb zhErpziK^*vt0kYKTA*4EZ5>><31jcO`9mB&iZywufYf$Hk&5H;2NP%h!nnyFjD ztv#{(xK~QY`rM~CDts4p4|S?~hZ4Ht)g|*x@-Nl)wPwhA=+?l`SkyMubH-u_V4QA-?(?w_V{0k_jB`N zTjEsYWQaChJK;Z=qiNdN+C|!x+6~%mh;{czF;oB1P>7HdnjV$AN?%{IUPR39K!G5<#K$raOtc&XG~V0%pEO;YjKRo8_;qgvQd?)uH9 z{-2lsv<&|f|3&D1{wLx8U04%S=XB^5|A+rk_;i06u4|@iqwA>ap-a^b(WUFMbUC_w zU4d?uZli9yZm;f$O$+?bw*iUpl+JcL^S_*$M0im^ZTMIF|HzNe6Y|6)WgoepJOKX_ zR*_ee*O1qe*OAwg*T?^bjpbqT2>fe!t0YF=RNfr_9>&RA%iH2V#18mB-ukoW`SOB! zb$OAz-uM>H2;LOlD&AV&R^EQz5ndthH9WrK+1r`yyzOG`TG=Jp^{~UsO#ZL=CCdM2 zTc>h$!Q*woK6SqW4{yZc@wyW&S>9WoBJW4^0rE7|DvvirK0=-jd8@>_WumVCdgJlN zm-9p25An6IonV)+o1m8<%Pv*0N4Q@&NN^DMH5?P36sDtn{UAIe{8>0okRzCby(xBu z!b`Z{VWHp#?xeUaJXCTQtQH(9c>wtsJOf4G6?g-9yhA0M;r5R=zq*(_x zA%ODH5Hb`*fc z8-gA3UBsU9v72bDJ0;oQw{mJbOtzzPYCBXi0C`LUL%|4;4#t5=U>d2(JZN*k0zjo% z0J#)AL7rAZej!>fIw7aFLnU8|PRXa1;8?P!6k4N z+yJ-1T|lMxKy(_VrFBXcA>G&D3EYdo@65o`C_CB(e(l(eb4SeB zUdms~AC$h8zsI`g113(|g-W3t?5K@R?Lirxiw9+o%bs9kP1@I|Otziy6m&bGdT~B< z>L*f26l|}aB9|)emnaqYN~kSSUIt1_N=rV7)QVfAx79-Gfsxs#Y#pFm5C^3@G4_>+ zHpkUbHL4%8^!V5IcxZl&maSi?+w> zvVojSbUD~^{hgeK{LMnRi6vU52BzWMrZV8FsI2f%cq{xBL5ix18j4zqI*JfQLj^t! zr-)EQE1D@Dmvk5-CHGHiQTP|?u@)u(v#78F|rS2U!vb8rMd_6 zf!#B^7k01g9L4XMl73($ZrEcqG5u089$w|h!z)Dbt0Z>A@WX=)K@@y%dME;WKXIVA z3ikf4{H%LFg^GWuq`H{hx0T2nX=Rj2rD^N-zpW>tH>>r@Tu~`gd8rH6`izf8;sFW` z$`OYBND#x=H-l^eT8RfKbZ~DAy*)?-ok3U715okxV&wmBITPhYCI5V*&PJ-#)?dYa ztII#p2ICy1{9EHslwaqLIjh}7KVxkP)?SC|eJFd{yjgY+x~xoIrYKXEsmj!4nlf#f zu1t^3P-ZMMp$$0zbD0Gu6^h5xm9hN{EB{IEt$x|iwzXoltEgGSSvA}8QMyZ+YndBz zNQGs6rHK292Z{%ahl%kbz<>C2LtydPb6 zo}caiQ?atGi%pwubF4|{lXA0#DueZ?eJa-ftX;+SWxM~MO^J<-JwDd*vo5r>=AgX& zU+=N8T8}?<)M;B*QhR@2yZ@&4>9GtQ_df~$v0rQH|6XIu{3*%yg>2iS{m}WO&t%qy zl60G7zrzIN?8;X^*Z`PICqx4V5!TK%lO8H(%u8(VMu96bcKe9eQ6~C06A5>`8 zm6q!i8x>!noQd+Sh|hLoWBW5{>({E&zCTqa){d2*j<=#Ky>DwvrA3Z!g$P(bw4}>h zv9#8F(i$5Dwa4leW%)1_W2Ak59GZ=hl@()U_bY~^_ib&d7(U&egZVSXlxx0t9@;ad z*=}h6Tzmdnv5RRfY<_K1VDs{^w2hC|DPQG7(=K%AM0rh|Wed@NSZyiabO>8JN@v4Z zb=t<(q{F~3cRtfLwfQ0Bd|oVGCSJ*upG}qaVJ$x!2PJLe{%hSDiuLz#Xx4_6tj~(_ z@7&p(e;f{<4&trBai(1=9_RS7PB_Z6+o$r&x|NUD>XX*WyHb097S8IE3Q3=bjri-R z>jgPJiSkhXMm+75DAx$L!M0+4ZCfRqwlyuv#+rgvqit#bpEhZ~ABSdbSZR&(^ED<{ zT>GO!Cd#Av%}D#(Dc&vKN3JLAG33%J7lIDOxqW`}BsDtR=Y^(g=yMbJRGgF@Q)-)N z=y;`EuVOtT>Gnc}isc``Q8x;Yh>wfQpMN$HajG>9I_`=l=kYI8i7?%fYNltQhKXBR^PWzeD zDyCk@xUjW8p)9NHvSL!%b=-k^NAW=MSdj%AYNJACl|5HbV_s^MN6Ct@(fcpC)U5e? z&Dp)>wD+7=!f7AHNIg=EpEV|WpROHN|CGC}8(TW7T^s)QRNrd*`>0o;dSNLktF5>4 z`sW>2Hho$Ol-7L_(aXpA`FqR%q`iH943tkQH@vdX-aZ+*_4tt3%K4$({>q)s0~_Sy z@T`li{HyprC%sR{Wouhr|Eu)M`~34gs$}$x@z4GIoeLF*H7|eXn{uc8e^X-J{&@_x zsnDTW)7GWDUOtc3YX=+hpXGv{1(y#??Uhf{c8_(V<;NlaS^9sSmTkIJk5PV~-uv@) z6x+OgD&(KJvn8bdJEyik%j2Jgr_;KJ+**BnDt%i!)~BrtnOqN(_}4047eAdGvBedVyJ~jh z-xT-Y{~}K2_vYWjn{!k6PnglWH3GJ-tu}w9v1?w|Qhn^3j`3srzrS)<3`5VkD%#TV zu=!@?$G-l`hFV3Uwom){E4PXvBuc5WyF#v{erlywska$PuzC9{Suwtfe(9RVdrQdr zCf$B0J8Mg#+-x^C#`0~G9vRYCJKHo^-xZ~gJQMd-@p#mIRRtg2SH|*luk-Navv6T*GVO14TP?byRcl95%Rh62_+LsqKNN_CF^k~R(45crH9fB zPf+mVNL?kvj2qM&Rl=Ek}o@E2}YUw@_rDFftHl+~1#l(<(+Sqsl@t(C8l*Hg|Z zsjqCPEGTKL3{yrZH_D^%MAs&HQ)P4IR(T8MMfncA?Q|FJ@aQ0Kt!%5@EpMl!kAd|( zu?F8{2}pnpsDK_g07u{g z+<_PH1py!!R0B0Z9Z(-M2H_wIIO5)@rjRW_E6^6S2Z^9F=n8s(UZ5`+2!?`DAOnm8 zS-=(XOo7Y+Gk_=dXG6{hi@|cR3VZ?9gD=5munp`4d%*#47#syBz$x$}I1A2$i{J{l z4sL-vlKYZJlBbgAk`BtrWE9>JZRJpjAJTpa_c!1@C<8+KLnTt60(xKum4G{_3jf}a zejo@`2X#OL5C)<^6Hp8OnnT8cc#sH^Ku?eY27n=8B**~c!9*|>?yp7x6VAW z|JDAL{o9Yi_ZJQqez3Qbit#=gjnpW$4NvKr!pTBMsjJje>L>kF{JFw;!eG3?rmnQ1 zG+Y`3Ki}XE6)Vex>x8k=*3$OUPSS4DULVEZSDK{kFYTcmB<-ynB285emkv~pk`7Uh zk&YleX*!;!oTAKA&c{=RYn7Xo758^2_b3l3Pb$wUFDq~3ozoTfpW}JU_e#D>rqZb# zRqm>a`3m81+*HB=cD4OO9dHnWK;R@DmbQ>E?jgjWw` zlB%~dR@EKPclA}}NN3>v@`K=-D4!=?M9Mczm5RKNRE<%MQ!SOQkgkzVR;`zQiTC(y zC+<0_A z99yYZTb27!`J%3Kv}8^8uFtPkyAWcp>RT?{VQ5FWJvOQns#B^TKeA)K!=5Wh~ zb^Fibrd(dAUaJD+?~v<1RAs7VID!H-b$2tpiPd#*pL0WOc*~gFUQMMLC6}vXa3zf) zZ9}Qns12~E?scw&wH!*;mz&kpz0y2h6>_(9BCgI6awl~qwX3=^V#NJSY9F-+uEIWQ zKN2SuZxFerQ+HKUd+aYjT}53(U02;e9jcC0H&Mspdk69A1a)V1H+8Z)1+n#055$vz zaq{8nQR)o!1a({aB=uBvLvpWnW90s?-RX2}M`+VYj@VjD#fo%)Fc7f6J<|QQuV`bf zIeG9eU0H8Oq{pNurD=$F2pDD)KkLIPNAQ1O;vB_411+8Z^Jk^O#*o1;lxFfT*@T&? z&PO@ts~2(g&-$h1crHIz5h{y+LpljIx203~cv~L%Wph5thb+JMK$^pUj1al}ybAuG zNsI6%u{Y9p(pmg`{vXm(>0JJNzMV`cTgWfqFX1mE{v|S*Yz2Q6Un$eb*6`Qz^)i#J zd$rjCNQjJQZ*O)b*n{p*hWsR4{PZOl6rm3Z= zr)j7O(?n^SYFcPoYuafNHC;5_HN7-_H3Kw*HN!QdHDfgsG=KLb1=YVat?(qpzX@~U zAN0kOsh2nYgI|s&Pc!=;hOv!)-oFS-9TVF)K3AuYCGGpqjw>72pSiR4|NNfDPlfpV za!_N_g_;7qXM)O^?MT&vxs!u3h>W>eH#YY?UOmk3mT6XK*br71)-UBkUri~EE!U@V zMA_N8Q+oOMKHjtXr?hS5QYi06?NwYAsu=&@@3Z5Ae=Dse_&9f;V`B~f`I@ySEIXq{3 z5nnsHig%aX)ZE5bk?v_8XdY>vXr5`FYhGwxX>~;9OicY1|=yW=R&ZINz9Cgk* z7oD5VUFWIu*7@rEb%DBIT~$1dT2ohBR~OHuHqbTFh3dj}k-BKS8>X2qR@YM3O82Su zM9mP|=sv&ge9Grl+>!jK>}J_*Y_{%;arPBz;&tt9;>R(7tdO6CEB{4)ciClrvg|6qkIgvX zIzLr5Kz5s-CL1cd#~&dZEqlbzkd2c)<7dex+xWB1<)`&*;+v{5`%?ST1bnUQ1%J9M z$)+Sc-YYKuulaehV*YH|JN{hRd;S912Y!L9l)qHQ6ReQ&1*>I3!CIMEut8=o*d&t) zwjgeWV7p8u*eTNpcH87jC)g)DATtRL%Z|z%1t;*vR2RXI_-2{A;JoajjlWOlnaA@M z_zL_5fp~uI3h{kic1w0gcAx0Mf=9CMHf`X~;`n=ex*a9!dh1f~3~YbhKwTQ1gdL_E zp&NzgVKa1@y771_c9L!i-b$3C%hl!SX5k6hxw`qfg?LVOiEf#01)i2&qg$(6k7s5# z={D=O;>p<^x?Q^6cz$-j?ttzPo}xXfJC1i6CCX3fPV3I-&g#zT3UwECmvvWl*L62_ zw{>^$zTgMCN4h6?Bi(b|3*9T-YhAJKo$kHvgRWG^)ARL0y;yIrm+2LHm0qLQ=?!|5 z-mG`jJL~CIxE4K@i{4G|uJ_b?>wWc`HU9cQeXzc&eizp-e(Ic|?EbEns_Sd(L-dXG z;reKOGkr^a8-06yM}3mMhrYLdpnjx&yndQKU%yztM*o$5m;NB$+Vr#js{XG2nZ8&r zFeJ)l29-f)Fc};TE(Ujlx53{KY^ZLiZ3rx=VGq6$ zchGReaLjPh@PpxuAsI(D4abx^in-+YS&!a1!$reY!%f2-!vn(;!*jzcL$Tq#p%mYw z6B`vqqtVI8Uv+Hu@U0{H(7;9{4Y-Ma?j5oG7CKx*!I~$XX-Hpk{KE_nz z0KDaDsBwgGv@ydt&X{GKY|J)JH|7~<8|NAq7z>O`jVp|+jcbh?jhl_zjXRBdjQfp; zj7N+|jmM2Aji-#Kjc1H!jpvMo#*4>MNxatDor$-&9N)xq7t%fZhf*rB#V1BVEQ<_@hL+Bv=YljjCfmvbJnvG_Q*~RQ- zu41lbZe)%!H#NtaOUyirz#_ItEeeaqVz8Jk&K6gTyT!}mYYDIfTdG-VTIyIrER8JTmMBY8 zOAAYDOS~n)(%Ev++}+a4($_M;GT1WGl4+S>nPi!2$+66^%(Bd}%m<4sODxMRt1MrD z^_DL!iSo^sZI&IDZ=mhB9JCy<9J8FX{DAn+Sbnw?S}s|xSss~hTJBgLz{g|Dua*~< z-z>$J-z_B;J4d0T#8Kv`bksQN9ZilFM`uU3|Btsffs4B8{>Sgkz=(khZrN`!Ge7p~_O_ zstQ!&R1;N`Ri&zORh6n%)u8fPYDfm|BEIE;IrsTF7^m~IyGF2cCzS=O_g7>c+Ravx zO}G8lxWA5n5C6=EKPz|p>iyPJ^2J>;SLIH5^A??f{0Wk~>{{)ez^7RK+s#uA#@pQa zss*Z>+AZ|h_V3rV^Fk;)+~qg+t^HksW z{i;Q(hg6GIOH_}lma3MiR;X60R^j((*QnO2)~VLxw`w=2HmWwMHmhD%y`p+m^_psj z>P^)y)o#@u)jrh${BG?b)nU~U)lvMW?MEu7>V)c~>Xhn?>YVDls#*1w>VoPU)px2N zR6nUMtA56B-2SGzqWWDW)N*x*TB#0GU#E^xw^w&mcT#szcT;y)tJE5`POVoP)n>I- z-QvA}N*WD+DdoNUS)hh)x*_E>J)XFIzyeQ&Qj;7bJcn30(GH!oO--^qI!~gvbtDZs-B`QS5H${ zsjJns>N<6UdZv1|dain&dcJyrdZGF*b(4BkL1iUsV}R4R{x^@P2C)MMg6-P zUmn$jXq1{T&2^dxO?yp8O(#tkO*c(<%?}+_8jVJ$(QAwvv&O2iYYukoq3NaRqlwYP zYT`8mG=nrZY7#UjgYlK#=4bdvKVcP4o5!&|Jj@nMzJ&|3s2P3;_yK7ZinlljoYVFz{+Fsf|+8FK1NFicT7SH7aw1b!naicatJ5)Pdo1{(ArfD;@nc6IEjy6}D zr!CMHYR75EYbR=d?>I?2SzD|v)lSitYo}?ewAI>LZJoA3J5xJbJ6GGI>pbmz?E>vW zZEV-Ov`yN3wfAcmX@_eb(k|96(LSnOs$GU_g?6QOm3Fmujdm@5UwXZEfc81<2JJ@t z{`6+;RxPcDZQAYH*R^kGcWU3#zOCI0ANFhC(Y~wIXy4Pmul)eONqt=VvGx<~r})L{ z)7rDz&*9S-@ajwL*V>EPZ?)fRb=o@hkJ?Mx;gP?oS8M*Q{SUnS6@LC#dsX`fVj|Ni zbfLO7y0$vAHeA#XalTco{ScY|&?Hi<{IT3wXRpfl+#x>Z`6E?yh0Tdh5& z?x|a&?X6p82q)XLh=rVO#x*XkTU4d?_ zu1M!z<-{lGCg~iyQeC;O3YT|@ce+Mbr)$*B*4^r*F<+7LbX(7mYJtlO%46}4a2y{UUkw@0@h>4U&~x+9<; z>OKPfM0ZkmT6a$Oh3+feMcsG0A9a^?|H1XE>-w)wx~}S^3t!~sOBN+viYVy{jgqc5 zQPPD!U*Ib|O1khLH}i#$J^8|a>KD}+S65tkq>93WN0b_u)^$a>{^2LY`7%XGmnF&) zWpiEl;pnK|uB&g9boGns7Zs1IwY}3V_l|V%^uQ?T8XPq^>Ly%6aLtVv7Bws?5mz#< zRM(Xrl^&IeYZR^mTt&Dh;VQvZ&e!xPx@NephNwAF^O3(Z>Yk|kqaKV}j9*S)8nrxX zWzeBTB9h)raZB_3ibM`Y!tG^(wtquh*OOR(-U-m%gt) zR^MMgNPm-ls6J7jqEFXn>a+E^`h0yMezSd|{uX_)zD!@PuhduTXXqRBv-ETIx9Jz? z@6VTel z@~-}{eq+=Jdg={%C3)obMe^bpJos3D0&RcBtv{?kqyHSOHgmfatqW-9d%Zham-Oyf z{S4bJG4hVkuX^to1xARX(-IeVOs;q$;*Q2291FR@9f?o_d9pa_5_(9jhZ&AXg&W!% zA`R51q3FXO@I2Je#n9cLG3X5@gVhji=w;|@h&A*#3^Lqg7-~o~q!`i-nTBjbt|8x0 zXecsFG~8k+hLtiyxuMcf{kQA6?S#XhZ(Z|6lF=-gVVGf{`5%0~w@4cdvvJKcEHK<< zxYw}Auo%~)hGmA8hSi3(hV{5M7&hU08P}_Z9k_NG_TV~z>yY6Hu4A~IhLeUfhV!_- zGJIqB!Eo8|3$7~$VGJ>b86%7xap85Eu{$n}QExOG?Z#fl7-PJVJQ-w6Fb+4S7&DAn zxN?mJ#&O1pxF#D*jpfEFW392lINLbSxWIUq@m}L1<6`5Z#%0Ep#?{8P#`VSx#!beT zjaLjI##fCyjJu3`j0cQ|fL+ET#$!gO@ucw#@@L@vdE-~yUQ6%)JoSz72jgYqug2ev z3R4*Vbfc5$dXw7J$28C+#a8-D^ww#DX{ZU`WHg0FB$-l7X{HS1yf5EpKKEa*NSw-w z!ZS@-rW{=KcRRVJJX3+G&@|38-ZarP$wZ&APc{{sN=;MXj}YaiX{J5xrHkt1n56cL z!b2m5qx~dPrjMN}Q?;qq^m+R_Q-f)y=}Y`Q)NIpS(>&9BkCzKfcbb}D`#wk(nI1MR zF+FBlW_rT3%Jj5pt?6H;=S(l)dI{H7T-$NI;ktI2cA0j&u05tbrhTsKfJwRznxyNH zNxBZ3r0a<3i0LS1Xh%_iyk$|PMEOw#p@ zNxHr>N!Jf1>H5heU6)PL^|R?`6YciDn565f>8dHj9AXZ~)d3fcB7FxT$<)bQ#Zjv^ zburT@QA86=b*8*d-OR!M&WdJ31EM_>BQoFgcRt}SH_gUKcQ@yl9%=t~>gSqN<~)#Z)oeHSF!wU|F~^u=&GF^|=KsIm*bXw^WFCqr{%=0dxO(-< z)&E}g{#4`g)k{~sKiT-^>cy+xpKhGL`uSDq6OPkYPhI`&>Tq+CImPSe|6v0y;t{Kef#R}t8elDrS<03H?GpE z3-)hQt0lp-ANz~icd(xS)4jh%nwkDG?|e(SdnfWP{cCBd=AY@d?ng_@?$qDof965! zRA z{b4> zOU_*`@fLaTl&?1Bg6p*={p0HY#nqbimfi;X=`HcC?_EM^|Jmf$_SXxRck2e{{+5GT z@R!9XE?yU>_#xo0X$Ii0X59b&9Z>2nq25UUcUWt&@%6N&UQ5bbL%LVCl>N<==ewX( z|F`S@fd7LP2@3i@6k78$SWE8D(Y!sB(!nC_tsTsox9qQb5!g0Kylu6X{%cz9+89UA z?&+41g%&F`+B2fj6e<=S}t|1QBT2DeAjVVJYTL&EX3F4sBINBj4doNwDC zZ#kz)Px!vFmYUuvvf`c#f${Tg!=0mENeJFQw;pq!nM{&Yh4{UFcxU`?S>0W;zwCq*uFD6^_?=Mz|nmh7T!@E~4>0q{6N`uEo zs^hKIdODc>)?_qJ{+5F2`s-XPAFMvb#a$X;x6F zWaF<<_grdS`yTTm^CRYE=BLc-%&lwv)e@;a@44jPzt;1A=Pj;pouYtW=ArMC(Xa9N z>IMFSPw?-Z74bJo$>TVnh=28mxb&+(;T?)v{jOROekrKP@0Ws#@Jm6#+qw3y3;kc# zDf0Y^k-I-bJilTT*dO{1bhKAYi|}1us^{NtNw2kENc#Knm*V37MWq+aFY+f29U`Rv z*CR6GC3EM9G3~lWY%y;&SB7shZ#Q2bVe4=MWUrgwFsu3h`PgaJM!aSI^E$7aee1k! zj)a{pW*hx~Aszm_{{Q} z_ueLP|7Qx{Qn!x3mivFJY0Rx!d|Xyrs|0KBwhi zw%p!R8GWXC5T8&Mh5wAtCJ*7W$6xSy;&=EA@h5yvc^;oNp2X*j$M9L@K77u37@uRF z!sn9Bru}A1)H~*PF+Zt(QTS#4g!K?;u=+*e?)pXHr=Zi!+HOCnzH~|Ti^9KyL~0-Z zXBOJ0`lN9f)Lq{aRTLiBzT`jtKLj8DecPA(FA9GL-n;vM8J~{2`%mrr)(`Bz+heK! zzVZ8?)o-!nouaYv&ikjSy!C&i-FhjN{CW9%<|F10%^#URF`qP_HlH(pVg8EG6p|-@ z=lkLp%{}qIO}u==_lW!7xrhH`{>KgfHji)ji}}i5I^FzXmRsC$yLL428%maIYq;(F zd1Qmz3A2P-j&=36;+r-{wzqV&bhd2n*v-=2(xk8xzlpDufwj;&&N|*Y(K^XG*;;HZvre^ESSziy>gm=_k+s%Z zYrVA**DUKC>pbi2);p|sTJN^rW4+J%fb~J^!`4TvleGV^F10SRuCSifuCT7O7Hd~o zS6kOu*IG-pH>%fJ*IS>nZm@2&ZnAE+ZnbW+ZnwT}eZ#uby4$+Py3cyRdeC~vdf0lz zdek~ad(8Tg^%Lu-*3Yb`t<$t;t)E-JuzqR%+IrFYt@V2={f+OB)=SoZTmNJI&3eW9 zyH(h#v~pXht&Od%EkhS>!+)w{i?nsNb+dK1scahj;i$o8vRQ1uscp7sTQ6H*TdXbK zHqbWMc9U(0ZJ4cEyIPZIOSYxj(ruZxEL)B(*Y+Q6o~^(()>dSjV4Gxf*h*}_YRha> zZ56gk+jLuvZHBGEHq$o8Ruq1#?W*=R+wHc6w!3Uiw)k?e z?TGED?YQkxb!XkjwohyewI^+-ZN0STZ0BwFYMX6e*)G_=#fAH|?I+v6ZU3?TYWuJ4 zcN>0a#U5f;+QaPO_ICCT_DFkYdsqAQc9mUgkFp!>X1mQEZGTkT)85D4&mLzVU>{_^ z$v(tB%${gZwx`<`)>wm)Kj)V|cd-2R09N&9O1GxmSl?^plJ z{;d6Z`wR9L?JwC4x-Ist_HFi}@a^{3?Qht3+V@4iW#41pXFp&+Xg_2>Z2!Q1%>I$x zY454)tveQZ!v2~4wEe98bNd(euk07?-`c;o|7gE#@2mUS{;U0p{dc>FmPdz1w~1~W z9Uk2-xcA=I`>xXy2=~xOmGOc_h3g z{^=Ht#%Sr;kR*-K@0zcD_x86FJWn%0`d^5Hm;W`X6xToSueRxAN^R3F;8coG?vlxs zyJaEDy)vb8pDau%mq#eu$lEJNg>+QDBkQD08`4GjuB^Lqr9!8ahZvR0kThlTkW8gK zA-Cx|=qVG@l-DH`H?>cYE8ELMl${{!Chx9P$#a_Cmm!_d9lxQLrc@>5D2)l@l~(BL z5`^*y+C7SPkE7kWL&B6cwA%x9`^Y;gKSH}RhjdpCkn5D!q0RPavwld9GCw3&87m*J zj7^x_G$5gU(@?Z|K@p<7Q68pDN{CPnMg1hSeOQsxlm=fikxxtLsLX*6Lt!HmKIA1# zR2IUAUPFY^2_H_thm-Ij4>k(n!+5lR8tpGZ`>WCCPH4Xy>Mk9UtDGdC+%!HRL^(~~ zz3GfXt}KS#qlz@;6xgkn7dK6VKMiPq9{O7Y*=+ba7j4aie11ZE<-&xtrY7|LC)B-H zu2h~weC~&h#n68U`ir2y6#7e`a~{4m!?&;D+eM7a6Yy;n`g04$4ojKa*Bk(U)y#Ya{%96Xn|wr`Mpf z8#-^pkNpW*%Gi*crZ*w`2(jyfI2?rh1mpuka+Lev<2m?viuwT`FT=;5;p2yh-^cLr z1mgEA{5y+WiiyKVj}n32Cp?LHBpG`yKRS zp??87m(e#P>iq&AuAmRrA;nESsIDTcX`e#g^t+;a(eFMEUZ96utYb$SB7bcXe!y=R$kzWIT7x-(yn{9>iwXiVdzP1s{y0DH-2ci2a z_~Eu;%2SZ-257m*UN9>3E1+@j2g^@}oq zEa0wo>ldv97POnaB(Kx#CB;B_r+J;1cHa1pWu51BTZ;efU~#vNOP6)q__+Q0dDlOB z{l>?aT|e*frPps*wz&Iq%NO7~{g2)7+zk)iuwnV)8|L8~oEujxQ_WkkRP`vn>9~Wod?mz~R1uO*a1s(#H04IPwz!~5i@D*?Y_yPC{5UI6Ia$py*8wdlg13ChofIYxI zU>q{+`b_Uy9Bv1eBTtAVw^dSC;v33wTJ71#mn0`>q0fy2Pj z$+3L?;>Vi(mNuQY+HOmsuZ(m-m_-{XqP}J~N{qcsZ%>JkZ^h4Lym@?1|sg zY<37a)@BaYYvvH8vT#VJro15}4a4evQ$eZgu!etD7!Q^R8&aJTjLl_SXCdm$N1gjo zrwMf`P)FW03FS3hz7FMUP`(l6&!N0VD6nI$NC;Do59!#niuI_K!VqI~BkBs}t0>>3 z2vcsrj`1?Lt%S4~b|%5jG}xH}J7ppS(jE!&rao+ga%+%Vhg`joDcUz3J zu*2IE>{lD4b|WTbh)G1#jj&xKNLGx#Y*$cU)((>^^=;-f#El6R)X_C#!@B7U~j=C+j%%8dCL0wQo9#lmn>{<@g~HP1Qq; zC(9_;^bk@toZ5`Iyrk%ic0;h6g<%(q7)p{Zkl==`ybhA~kZffg^H6z{opV%fMXm>O z+qf(R+8NN!VhNR}L6Qkc4kX)IrxcQMNUB&uI#VE-21zv}J6Y#0SiP5XRNjQ#{mAX* zvbE4&5A6*sq4IT*JO{}}NZw(cJ&+uLcuT8&uWv_`^F z+Q^>IV&CR4oy)zR%l)0pwH!<qP8 z^5$laz*M$Y33^eMjPbE^*%EmKM}&GlmA$FPn0>)^u2Ud3s7>@2E^~+u&~u1L&@xV! zak_%j6`Zc&bPcELI9nRPOuuHD%`}-ylU-@dhURomj|4R~ z+m!iAq6JEMa|Y3qHsu(kGg)$+>03;X5^ZB|o6uI?CWdJoQL(@6n@m3jO%E>&Cpwhr zSkNWmAA{}-e-m^+(|shFkQPxGAs0I%j)U%V(T^eyMkMnNO477;L)*a?)3kPD+sWI0 z((YiplkJkh-$zQ09riS+rDLCtauKTTua=88OxrRIXWEWwB-0z2CNLe!bQselP}+wr zh(|H4<&(wOdx`c_d?}K#AJ{OCv?E}5I9ZA^qW!S0N@>+0-CNOFRwCWMJSo(`Zr+<| zj3Qc|jB=ZTX2KM*gE>$0tDJ3?lTD;C$_LBYX1VBtniV2O@jd1x-GRx2N?HpiE7^le zcrZ{`(oA<3Si)VVA5*m0Je}9fbneS^wq4EbRCCR0)~tqa?l~{>q{0;0=t&KH6P^^! z)mmPQwd{Ev=mfM(cQb0aj_lzM4JqovbB|NE?QibAa^o{P{a=1z< zC2F`+q)iLknSpN(P|kKFQ7d-d&xX0;Yqdiq!fznXpc?^bU&+rpEN@#8Z}5? zh7CHO$vi3HNwt(J6z{xl@TA&$Qt(+;g42jvLG!+m+iOI7n|NfX zwmT&}sg_a&$xw@HBf{7NPtIW*bI5;46bccQES+%_GEU)4;E~BZGMPt~zO{w^m(T9nBKB~&F5)B&}vphx~md$h&)6q=xnT}yPmT3{w2~2Nh zdJ9tr(^95Wn3glGanTj9U&raX7)m#Cx{=efIX#=xw{rScPN#ADNv6*;eSztVOkZNU zh3QtN+n8==`a07$nC@iy7SlaU_c1-d^nDj4ua0v1D7Su`)5kgOzt2LPw$DP4iuI(@Plq^%o+cTk z#v&E!+gbr;~VyLMCES630^Puwn2G0s; zaT;2zW=b-dcntPe0cE{pVg>jV@CD%a!NwwBikx~+Coesp3-t8n1O2tLM8Py1em{ms zj;EW2f~bsXXV5jxboTl|JS}k27u)4VM3YiCq2)^o1;>?QxJ?+uOA3S73Ty+m13Q7Y zfV}{o1;nkuJm5A(Zb%Y85sYR|QOm<`7$xzO0iqWo6JtUQqA+AEWb~XM6XPH&0>%Rq zLMB2^PYySO)3d`Q@MJt6$iywE7X!or{ec0%KwuDXBQO+52GW6%KsL|_d;)wOA{S+$ z3q$3?rfg8kMF!LTOf!kL>B=YnZcMLds$ptiYGm4zXGe!COnWjlgeQc{+Zc(8?Dnzk<>I~en?av%zntmQph+FJb&!iJrlXk_GM&J5 zc!#YW#2srE&cLs)fZsKvLqiAo!p$8PbWniK0GBV^!nrM+lXM{!OSt|@rcX0n$Mkuo zi(ywLY`tZoHxP@lhzAmZBp?$g0Y{MaZ(_dI zVlL!3c!BF z@1>Aec=B}ez&XH^?+gpu6``Jd7tSj^`Odh*Z&$SOW^W>#AC!-}gLv6>|h*H#Mu}eofTWwdAc=A%4rJlUh zW|=21wK>I;m)e}_$xCh4q9rl39Dd`2Bl=LFWwdW)$ z8lXidHmbi3bR+81m~L0>;}WW0hx&B3YXB!*+OP07(Zyvho}^feS?GStF%!CU1|(hT zsl+8+@_ZBPO7A=7LYK~n(mp6qGFi++>vUoyzuo~o48LeDZCCuvCFIv^)T0yTJaFlB zNo~nb>O~ypRxJKkECth8ySZDZ>nI-R z4-5bX0)v3TKu@5P(IAF^+kt4@QR=WtOu`}h;%+SQdPp~Mt^`s%Ga=m<_gRuoK`on% z?n8LrC}u!bkGr!8cj7YKp^V_u#TTNunclL?#F0>$_y9Nxd>Cp%Z3phrGO-I~kw)o` zJ5We`FnU3E;C|?VB#8r$g@ibj^mpZn)4iE^yo*!$0Ob3-IOPYq^oWz3_(0}zwnz7J zJV!FEfbSJJM;HN;5v>qr7ne$BqjWZx62-etcuL;MMNeZ-^oD3pqg?bc_CbzlAEQi! z#mGe47-}&Fn*DGQjb%!8`=Jj+`!gNDbRg3~Ob3I;a!l;dibkt;G;_)ut-^B;G z_&^sQxrG`7)sb1_6n{ zM4$p#2)qIu06qskE|iI=u`+RS9PZ3TGI1Ty6|e#IK<)&bAAw(h4ija<2n+(Mff>N3 zH_OBqz>mQ1K;0ynm4P{i0b79QACifKz!MM4#3o=X z@W^7B81V>BW56Nc17Ox;m;-=jDdrBa9ry|u{kTj_0*ZkO;9cNb;1VEPCKKy{Pl40G z(&aL-9M}M?Um+7t;51-)0%H%v0tvu);ER=b23m!f0RIGD2i^wW13mzL1+D_^pTfKX z^uSF(CXfd_2&@EF1AT-{q+p(>=F7wMg5DbF1)iM6y)pO47{!*D12G06A`Log(1_(nQ|FxlL3tR_;0}((wpgqt5=mO8ih#R- zyMcRwM}Q^3qrfWQX`n6kvrh}L-+=c9!hu+=A$M_wi-)?n z(#6}jcv}|_cku`pZ|~wAT)d-;N4j_?aJ068T1(+}9V}V4$t{sbN|N)N-4caMGH;t( z66%s1*zT4nU6L+4+>$mf$%b8SNn4jBWv^Qj?vgCt@0LWkB=$pYNqd*1;jmlM!6n&s z#4YLQl07%8*!j-Rd^t&!su)3im|UbBF}Fw z#-8SgoVTqQdzvHi!1iM7U5>~uJMc*#_=a7@*t;B&DSL}C+K$M@`-`!EIU?o5L3-E#1 zA1W3@7xikfr+-x?6QQ`bM2^C}1+o&{|C@0JxrDNtfX63bKLtLYi9H26`(dvDa!nCM ziJ}_EQH|rM#&J~RIjZp-)p(9-JV!O2qZ-d663=zxxo$kyjpw@kxo$t4Q)rBc#xad& z+MnqFrURJ{VmcUrfNV;WnxVX&Pg!_ zu?~Da@Ep?511|tC0xtnufUUqbU_0;n#<{z2ef;1KX0a2WFUfuq22 zzzKW``6=Kua0WOFoCD4S&A?Z{*T4nfBJd6HE$V#_`~dt2{1me$=7X3kxc7#jM{8o< z$Gd4MwI<&D5q|GtNg9`4 zjG?#uS5Wf>SR`yhi)YAJmQarK<`^vdk=ko37q=A1?2~0wjlQzaw%byqR$ILFmu+jtx%*WwiKgn=#M-4 zQd)}s>#SkI47&thcg2)qj!_S{$Lx5~#^Zqc|(bAo1?G|I~{;>Tm2fz<;sAHgPlmhv|I{TJ#ekoy|GhGPD|h*6^%cmlR* zPQHOuDW~3zIf{NbQMSh;qnULA`me%9Y8dHXfz9PHpKu-O!%jrJ3~Ooy`b|+gi4yv} z<|5K^q%NWS61=7Qq(wT*k^7XrkoYBx(rtwVsGabNmAk#ri2ZKsGu*9jpv;#|=Y*3!85GOmt$r5q0 zMVzb=m+aBI4$8+uB60GF@{&Ee$8WDSVTZ598!#hwbfONtQ!|NT@H*sbu-_X|Uc%+m zajq)GyEOV7ig+BP70{Q9`biy&<)ZhLMFse@qNt=&F4|9dy($EE)eg6)Mh%@qHpqH4 z(;W&*Pv>-{ix#tl=v1^$Z}%Ly&zSLPo0K98Q`iF09SVukJ!v}MnJSr<<1;7|>PURL zi%)g&2If?o-U?3VcY~!&E16D#jC>@zLqT*pr%RYtf+|=-{U;fnd8BAi8A(Z>-V9PH zorR7uK#9%ojG$Fips7b=nXR2Q#(-?g8?j2V{6={ukaibjFz#SOYu*tOfoFtONc9tOuS2 zo&%l-HUKXG8-W*rO~6aQW?&2OGO!hR1=t3>3Ty{n16~Jq0B-;B8<112?*IpZcY#B|d%$7fec%Z20dN%f5I6=L2R;Hm2AserzzN_};3V)Fa0)mL zoB_@P=YY?F^S~ECGw>zw74S810k{Z!1AGg72Ye4?;Cy}=@A(dZe^8D00eCL>A|LOW z@GjsUJU3;4|Lnjs0M7Gw-;Vcrc>nd4dQS&-ofC#**nGP=N)+82Ac=*oOV5) zNv6T(71TM5Hk$Apv28T$P#y3&^Bid+0`GN;9uISJ2XlpR~|0SM0a3X9ewG6n7r^9 z;*0lyk7Fzj1N)}neIwc^ei-kxpt~63Ezs5q#M*>9BWB<|Dc;i_MBU5qu?GFOLiaoP zXTtboBDU9~t!IEY(B1*eh20p-cVO$^=;N*McO&c%g@28R!+H4qYa#k|GvbHXY=*1? z_E%tjrNMUm63jWoG6Un;eHr3C3iZ+U%jnaqke@}JCfGQU3m*{QVHmIF=-*-ZnKTpg z27b+hU-zP4eV~6I{JIr$>JpHMF3NI{|w5;uEggN7>CDU=Uue<71o0OR=mGMymr;0Z;0nO%&T4K^8n1V z8_|9nU>)N7A$hpeh|Lwiz8vb!q6vpfv@Cf|68}XY3|5b>Qu?Fv45u=`U zNFz><%*Gsqe;Gh7`3XD-JOm8K`nvH95{rCy@aUTiqV{a z**z2y$-~U~9+-0vqJ&5^0Xs3u?*iWf_aiEU5RE#F?(#?Q>B|zVqNT8n$b=&@ot}`3 zOlRgvqA8$R&f}*s);A$i!x7Wra#7$MaY`=6I**|A7UzeEVe(TLrKgNI#nRbz3eG=7 z=?p{?`h1r-orUW0enl=CLTBP{e;Pu|m{x+$cS)v)%G-Yu`f{i|@~6;kp@=we4EPi{ z348{81zZS~cmF!{tx)+5Ux)4vRUo|sIR$b%ke5duL2Y@bBcZQ`%DWzcOy2barbn56 z$n+S~<4iwd>SX!}(-TZTWqOk7DW+$bo@M$u)ALN5nSROiE2iX&yz2#`osWlZ50zj4 zLFi7Ta4)b7cm#MB zcoEnFyac=kysq4(OlqcYS>VkS@^6A4RelH=ecJ+a7T6E$0}cT10(*gXfFr;NrBzuX z=(`#=PwKcQm4Q?;m+tqZ_IXkVJgFm|)Ckx-Ebqm&da=AW>-6SyA5Qn- z(mpJSV@VuK;<%MKmiK2#e@+izodGNvz&Zn1K9D5?IX#H!VAdSW=^HtHBc~HNoyhu$ zY$4Glr@kbz&q-XG#PTHWOA_Qpk&H2tgHptjStpq-Br8)`LNQ5Z{baV2!kQ_pnZlYW zY%_&*QdlRIby8U;m32~CCzW+lStpHk(pV>rb<$WTjdk#?ezcp;I_WG=XL&lyGg+R= zbu+ncChKIfPA2J?VwAO@{g{pbRT%UlOF5c(wu|Su_$U|8C2rD-(a?9#(SDv(tS6NQ z-|WhMOkB*9wkQhZOM>~z>X)I4;%}kbLvLq7{ck6vTsdR3K zXb&aP{;t?lI*lZzbm}YC6-jzBjbj?mv57}oVHmEI`aE1I^?A6G`Yaa%IdTIzx`R1A znA10M`bJL2aXOCE@tlt5bZ<`g=5#Mk_u_OPPWRz-e@^%3^Z-r|;B-8XWIT^#JohM` zBN4~6Khpt3)i&iwd^wj^Z7OqGca*1Ci28bfYZt( zeOjlaPh66dKIJ8Q#K}IbTawetr963_3cJ(~vP-e1_J~tCt!lDI>zeYknyEf=CCttxM7;PWr@2pH?mPlUA&xC)FcLa^h5v zIMt(GlU?GZPrZ`#r1~VMe$v_`IdRgX_3Y-r_tOl0C{3r@fZSX}riTjT3Pi58@OLiBo+O{E+0dvq*VK zPToWWzDQ?93 zV;4ROp2R#v*uYb;k|~v}q&*1lfKfM9*%v9&CeQGfddfIu267?rl=ft*kpUU))iir) zx9;TP_zQdF$*SI?t@mh$!S@uD5G6gb)K7Vc)A*YNfwOZAo;|<~z%Za2^49}h^mq;e zZh`Dp;5MKO9D9UZL;Jj3s~6cyxlS)~Kxx;LN9n~VP}=$AdcDX6rQJ`C`vP`A?2MpBy~qO{ zuFS)U!=N-Oi<{}2s3ztGO0zPFzl~~9Ch_-Ct;o|U$AAdpWDi6GJ%FA-FQ7Nj2j~mL z0R4biAP$HJ`U3-ifxsYOFmNM~2qXc?Knjowqygz@D+9>HNEoqimo(F;oqj5?E{)@Oj4Lk$<6ZjYKEbuw-1@I;CHgE;F zgpWv{4qMK21@dcP=NVuFunzbq@T?y1fh-2G*npF!0pFPb{|B(zf)k@9#2N1#`&qoR z4BuRdcaGzf(vymJR)6N5tMSRz`s8N#ngbJLEf!BdIfH#4+fjz(hpp6l|1wKQ%8qt0lsKF@2V2#k*S)#E_Fxq6wLD(cvi<#>modfK8UB-O=Wn3L_P^m zh|l7A_y;_}4#xY5E_nWa3{R$GO7KLv7(E8hNB#~xZ_mY3Wf*i8;K?)&PoQe^qSf=hIrc?i7#^T`zA>F?X?omFP8YnGbR36p2WwN(Vp=*{QDm75r)9;K|o@T zTnu*_F-DW|4E{PG&xI$za^QVnRlHmzI&Z`iX94i)gz1mv5OM&Dx zOG@xWd=a@H0VSfe3K#@r0Oi0M;AfyCB9;%70Cxe;16zRIK)12jRe{lkcw+;6hfz6< z{AHjW(hq>gg7*V9jFXF0=lPR(pMu`jnbzXp<-$16uTL~NB zM0yJNcLOk%m@`8s$VHm-0OIgAa!%k9OS+>se;}vCyPG=(BKqLFfCney#O^!~{p6b| z)r?g2&3Kmv%mdB>=YYP0@cszgJ_%z9Q~X13B^RTdJD|T4Z#3Tn zrUKpYc5Wz80n7&Oo=#dij7mImeX$=@193wT_i8Hn0G575Np%h7CShzxIUhoA_F;D! zj8&rsmO?ud{5D_~@B%(VPIOveGj#^Nhbw`Nl`}Ad>M$~OaxvN&2FU{C9^+hpSj}^G zfv0opu`+-SLvc?6e-%8v0p|zcZr~uG9)`0-qg>=W2cX7KPA$Q^sto5-XtCo=DtQ_f z^PR7P7T_%xW&rAh@w=@{&@6EN#PkNls=yhCTDn;n1>gZ7Z8&-a-7!urYUa$w*mKT` z_>OU|V7eFnUz~$@C8FnZ@eXvZTogLz!Cs;BUnr9&QR;b$)2(>V0@xrK>s$bfN9W<5 znuPaU;GYBdqjr=uLAT^KtQpLm{owNXh#nB1OsmGuYbPC+i#Y!YQgd&olA);g*zK5E z$Q3zHpkGB!6M8gx0j1U>Rf|-X^A_kGhwaUnpNczhic3N4z_*Sky?-H6Mb53DSU8p; zaPm&Mn1Hb(T8W5Fa2`igdZuE(y$gF5(Cu!ynCLtRd! zI+c*+Hep@^6~ME=y+HeWuycXi!7G6#;4C1+Tl`;9XY##rakFzOV)!v6r-1%xh#>gu zxC2dcZiH`>oKq0HHzD5-tiGS#g|0`N&*KjJ7NC9*bNxY*_Ju!5&JdKn3)v3f2gsA0 zryx1@5WYR@-6KXBiA6rW@}e}l#Y zk70yI;9dP=I6pdP!Adi7Z{wZr=9>}a$La2uiWW+pD)gv26YqS1Gmw|@&b2v{QcK}Y z^fF4l0t@GsVU3T3WI4`_z;57o;P6PfnBt5>55vkYS(FMz zi{;Mtn3v_wN6>CzHY}{dz4j?Q5dhtul8XwbIJNrwIMlB=Bbh zLL}?u(HnQ~`s4ez>vkeb|AvbN_X>d@2Wunc|6kH&;;kuX7W_|IRQ$QJ?WBCw;^**B zFHYFHus-&=vU=Z<(|5~oZpcT`u@qn3Y3nn-+jLAnqSz|**KuKa%gQLRFOdeXVa}@hYlQP7}v0`+h$WIhSsjLyiT&ftAEyjAoxnGr}6nwHPlFF(ab#TRZ zG?R)%QcdGjM@99_imIwIztY@vk?g2;lsY^e@U5Nfs4deMmerN|S4=KM#l{jxeL#bW z2uoRYA3dT%lPjPj?n#$8y{xXHB%qt)MRJ}qpdM zf|dG@Tn>6#9yn1mMvClFBDt~HKXl1s@VRtDSye@~f1gt^8dHJoF#&8 zJ1vn*$``3q=hQa%RZLA6sg(#oT}5?qW8GB0(zL8pKS|;^k%TI#B5j1oDiB$PVoah) ztC;4$8>MB6^y~t^%BlGxZInn)66xt;M5-8(EizLvXOsNYl8Z!op2&k{Sxw#4z^R&! zN_Ayr)inNoRari(q9kCkr-|edB0U36iS!(iJ{HfTA`8i44(R7(%Vf`<)kfmJ=syca=893%>-}5uY{Q9uE_e#O&o(V#&2>};JHX^(1vu&)QyU#~{OuKq zyqf8b>JtA+mXs<|M&dn@$ZM>p-qIOLKOSc+eZQC>vVMWGIG4z84&a=_p$j~KrHvHn zX(Au1Jy9RDpCWmb$jlZai$rds$i?JM)Q>F-dX!5Si6cbfSdo+@lCnh7D3OGF?O2hL zEmE*)rHJ%gkzOQ5=7=oJxHSB6kI2p!xoCNuC@2tx$)Ye_6yhG5Dh;*oU?z_fBT~f3 z43U*63Nl0?b|uX827PWtSzVof9CNc#iqjW12fxtgJEqt8&xWzMbz={4)MBRisVC)# zY;+tOA?|0=O(@vSFKL8G8Y_}hL{`4Y9xJlPi@dQSf4mrECqL zNRdCME?{Bh7l{H#MQxe?c3UtO@_NjifEoogC3LQ=_TPvKYAWaWZx)%kA{U0TL_tm9 zA}FXqB>bXKFj5qZ5(U_?>v8<73|R05jdhh}{*$~QPmsJ`pNQL0vIFN7f8X%b5PZiH zV+xW9J^RIq>@)@T`$9a>j@;RSrjWvBS|2 zu-9eh;4h)7%jP!XeCyZA!c@zzc*DDrHa!RAIH)Q zXB3u;$j=n{*`hF!?BL!pwI=YSOiMP{vdS(L1!s(hsR7{8hTX#r%F_$~(i$89eQByDZ}(Es=1-`k#$1{8Z`j&>bXGw@o1w3ekC*JZrNaw(}QpDd|UI1AI zzHdUceC1`(q;K9xqdEoY3hr}XkqPTGTBPqS&*Es~e@FL^LRDuHsEjTD~|@VOLPum)5pk2MewP&}i7+T9Tn@Zq??@XiKQ?$ry-yI~6CDc#<*-(I%r9GR*+qQoD5Xn~roTs~yI&&K2aQ!=NgCwS0RQnxM7g{sqQ59W@+? zLSPB?s*%@^|Hu^}&W#)c|B|uXD{0O7t{*9`lHV0&ucUrsn6b#rM-y0rAe0k$1tDev@)qYa8IJWmMlsu!$0zpKeXQb_aN#w{l9V! z?55<4_kKgYm0}^yH19Hs3iX2a3IBTTJ*1KS^tCCKO+(M6J;c{0%~SG4ii>wy3fiIZ zcJJ%nWf_oD-|BeGecPkGnsyWEJm*`M#TF@Qf&HU0@`To=fB&-C9-T!3`%Y!GsN2v= zSv~JZf&HU7OA#$|-4}i5U?R`kVwW$zWwcT$n*R4$TJh9#s^xpnOX0rJJgP>iZ@o-N z>0Cg4kmgIvoTt7~Jfty_b}aY2rgMXPkE!PNeCJ>yWOPrX-PV5&(ix?WM~L<<-+JV0 zaVuq+T#q73X9?eW*@!>gt7!KKRz_>HhUdI*y&wbDLFQa>L4eCzVkN;CDaf1F6vuK`)oDu zqtZRix0F`CbZ3`Vsc&f(N^jwQ(4D1a9!v8^THmy8=pNEinv2;)bBDgkO>Iy0Da}V8 zNJcA!A{;D=sVJpyE77d>k47TLi2gE264Ks1l{p>DhZ1q&tiB zjrm}EWH#EB_5x{!Ch}g>a!RB%NaHh?d*okAqc8_G+&=rpIT>?;cCX<3Qwl87H}Boi z@U2UCaVgHhMv&&C_Z`8vF3m`a2l+*@@-59nixf-Jpi=ivMQ;^o1aHAPUP^hFN>QX0 zM{C5r`@8G9S8@aQH`rQFgl)PD*WsdeeRmMrC962jv>W)B(m9AMmw*Q=r4ufl2&FTH z@0zE*ndU8>Mrcm@mQpOF(23%hp-g4TK~}5(uO^JDsITcM^g~Q{7$ZuJlr& zx+|fhfTA*k;($7YeNpzHqBHKZs56cVFY1hbj?3U6?hb>Fj?19F^8J73sZ;mfT3Y5M zoa%edJnbIonkE* zeaG)(DI$3dhSKqoNc3I_e(s}xO!t?zN9x$>u?D60cR32O5z5`~R^Rv;21RLmFmLPc z^`)2ca5itv9&y$K>t`{tV*WhBa)9ns3{S50Dsr8R8jki*zC5NB|@ra*uKRjzU!OA?ukJZ_Z=2ktxMvK`~|# zEDOADpiW%2As?*|D0o14Dy;+Eq?H)aeoN~Zo{<{hh`E*40f%75M{_DmL85@jT*EUk z8fQi2AiW(Ce!MO%SBDjX6X0*)DOYE&dVnKLPR03>eLP@>XP_OTGsS#I90R`vyUH+F z%Dt@VwT=eON8nAn#r>G}?{WKOa4Ax_v<^EZ2i$xZ6+SPe!%b?76_#~$WcFM!tzyqG zqeBj6(|g5r$Yal1)XD7f;ySxk2b<719c^5??%3wY@qYEhK2UiLX+8*?3U2^E^G^u# zrk%RfE~RoLIdS@7$#uW`9oAxp3_H$bI#@L8!Qx)U8iq*1gz6)g85KKOSObrnyrE_2zQg1W0bdz=8nqSHkhzmN~Odu$BkzFAPZQX za`q3@33U@Y+%4G3OH$)raE|oLIeIQ#N38IyW=D@Ey=;Zz62+_t(;m$Bpu=jh+<|+M zPKH^NtED4)n!w(%7?jDm_=wOX>jK_c19+^oFZ5$iu-A>)r~Z%y)G8+vb_h@Gv11ij zU*&4;);-$?V08K_rY{@Qycb5aTBSA$lmYJ1hg{KDX)P!NNd(nclqXKB+jI}S_Xw^7 z`US_Oy4AEZcj$xOn5Xea9Ix!cjj11Sgl3>`li9`dL|-EV!7nRSc@Ff+{hk2J?TBiZ z$}dlia31su-pc8dO)Blt87%H1nJrRTy7D_T3SUlQkEBQTGhAx+WPHAz!UWJG%RIM~ zqoi)t8c<#AbU1L>Nm0fPE%kE)W(wYj%0ZXC?uzx;rgAugnGshr+G3U@*4TX5Vp-d+ z9^rJTgcx*aK@`{Yx*r+<-?q-BQFikKd)$4GN$h&tLx^L?$H4mZz6x-TZRT}vaZT`u z{xa%8GJ491*JOO&#mlURR2vO?SS6)v7{wX1hWv*YN^5qxbq?ojez~0sDaXZdNuRS? z4EN@j0>X&~;XI*?(iLkT>OE4cEyyw#!ixEy~RcTp4YK9;s>N zV(Dsfr`=KU#9#~C1}%pI^gm%L!0wX z3FyrBL!xcrM5G8Y-e{}+Dh<#5L|a(g6>gqzd|7NgKwJIl4XIAMsGi>-e1IFng@=$h zB=!qZC>fg>xCbjHH>d@SaoXFcKKL7`Qi}u~&NxsjFqGC{ zHxsI+)ub` zT-v@%dWszp>|(!8CId=)>Q>Eg|Djx8rk&tP>`?3jEJk`NrHW`wj=oB3>~O8&G3bXG zmhY+9CNAF_9EF8T@7b_SK4y(~@s`#w82o5NEvO4Ck z6QwhZY%76elknl~yYkpIDT!T*)r93x878m*jS{&jofWYlq9@qnL#oOAp~Fi{ptAE9 z)Ig37l<8}?u##3E6M_cmT!}BJXM2=L2jD}4ns$uibGOQ&oMFuXP6>jJ61aA#ywr0o zohfUEtpm4kZL-evT4`;1HSCt-C|g5|pFx38)XoyfJP(+KfNm`v2iws6j?#N@KJSD@UB^}(z{rt-gmI`ZdaASmrxDtKctUEWlQ_HRG3GzAb(2lf+e#Tuzl^Sv=+7j z>sorJOYnz226ezW@r-k|Pv|`gdJclY68O6vPR2B0{aeJmE#Oz_1r_d;`5sP2!eY{=7hA2?vj?mg#Us?i2Yh_ zR>e}U)759(FpgE)YjG>|iTUI{2KJ}hn1o1bt)bh}`s|#sR<`Rsp*8j^z?yqGRN9Vc z0c$wsq?nKOK30M|vvQ%HSEmm;1WiV=qjbb#Y!J<2+%Pg$+6G>rKidUIZc8PC%ha>C?K5KRA0u?5pEm~2+@C{^i535{S;}yd6}jK3WJl2QR-m7)`pGXANDx zx>oG#@O%jT@oGofquy;l5zSRP4weA3rB5QOOkE#)j4qiWh(v`cRV z)G6BWmhl$5`j6I+oXFLU!G%>9R&jMt@P=tWI>oNOR{gbVuAUBlSN*%{dR;vqd@uN6 z@RQ)h;DxGZY7*7&sd}L*rI&bZ32Lhvs+#mV;pJ8PtG^b|YH`(ftH0~oud8}w)^F!o zPc2hFbprJ>RoSXs)z6zg-a2yfKh|-tBY2?kfkv)ASaqiRF1(`TRiCfAwebhDZgu6~ zsT!*ttJNE;gO{uRP<5*Q{i25YbEdR(bHjA=s)vhTAPo(Z}byL-SGw+)@ z;h?&ydQZ(BSGOa$Xyz*?Hmb(ws=rYEO!b$l|5@|>SJi%T>W>CWa>>s;+zf)B^W$}qqRPWT9GiuJR zIj82lnpHIy)O@<}&+3QjKi$|l^?~MdrZ!KnQ;q#KSJw0h;_uf!-~3ShME&<`>Axd* zOU+F+H`m-!(^U0OGhd$dsX4!z@=r7Wt^Olbw8>U|u;!kisp`{B|M%n%Pun@K(T)1S znwMs7bF1~0nx8lRyb;VkSN)@!pVoY`_LH?&P5E=Trmxf_8WIg)rAb)NR!!5@x2n&p zT~&KQ?b_OPwd-p))NZcbR=d4+SMBcFrmDJzvDSr6zo=a?qpsmg_3LK!G=00JuKEqL zzS!`EDNnm`JAz#^zvU?B&uhQZ_?7(X{NJhncPgWNzV?=eTN;4+C$-rspkB~=-jvOA zKQwnn9_kehD;zwp)PA!1lX)8Z(exip2Y=_*t*AS{Zgt&-br;tq>aMH4Wa>$^cTf3B z^Cza0RyEC)J*}_(w#=a3XX`gtZFXhfte@R5y8)X1O?^|}$B9;q?v2T8_2+>y!^TIFB}bz3S_(<*|m(O#jSudVH$k zuNuBE_1vZ}OpQ|8tSNtW@+Hl^b572$+dHQ{cLKFvZ1`Ejg*7W`FLYx)9rU&IIlP`a z<&wrr95q}t<-Xec9It+>`YSb$wbaaf%+<(N?QYrauHHW7mBv?G-KT@uHM8?Qy|wj~ z6M+BUr;Ij?I-EQmtkXY6{Z{qoYZEO$o|b4~UPf6r&wT4iH_u#@hi_N&t&S=;G%l)H z*5oa|wJySikX-3oR zrW2c*s+KftK5^>oB@GWud!^~u4eO`;UCkZAJk?y;^xCF1O&2v?($wCxsfl)5n>w0y zHeJ@#-L$Xiil)~$UES2zbf78SG~ASF$~NViu2pZH4No<_*z(c3KeQZ}-P!Q)j8C3) z+pMoNwYGN7e!l7Y8H=Z!+q%AWVe`jlJTs$e*3#K)XaCoXp5}j?_Rau4`BwG2n*Ors zj;6bt?rVBbeZ5rO+nSxac}}MJjZLzjWutq zVfGEpf7#U3+}b?7xvA>9hBK>wU-!*9JF2g1_zda$Z)o1! zysde=YUXA>-Lk7`)3m$lrZv5zuB+}F4Y`?_x=nSTb|VfnH`Fw^b-2Fy*4kU$h{u{= zs(L9;*WYTr(^12Bs=hV#TT|hzzifK0`T6GWspre8UaGsS>bLcopw88PI=HgxN+&CS zQ{UP$y``yY(X`a`SDF`1`*i;PDOIPqtM-=X8=rTScSFkurhmY#{yqA3-1Zz}?WVVg&(gbN1;uabZ*IAz<<^!h_3zd=*HtZQJaWQM>;H1e%Uo`wIQVtJw3gQejQR1FPpPk_s)4GTr*E(Q z;gkUf=QmnzZ{6$W|I3zLjl1%^@@VUC=NLD11Wz?y*7{T<^8C`)9j&XHJ6pS2_qOhD zy|T5ZwYN3ZI@mhY+En%V>SSGdTBfPBZqtkl>W(+8oOWH^V|AaezP0H?H6IOTsP#>) zH@Du>dTZ;uTW@c@v-O_V`&-}J`f%%Gt;btG(E6d)zivIX{vA_pum5oUy>sSIeQ))t zwdYRXRo`6u`_`MQlT*)}m6-m-6!_*FEqpuO=DB|YJ~MlN?IpD}jR$5ukzct# z)=Zys{P>M-$6_#eTX28y(cszOXF;oMfb~_ES6y3md)0@lp04_C)hkseRll~nt2$GC zbM>RuziRkN^^}^mHL03))wkAsxaO-h|5;OAdvfib+C#PPs6Af0J9xVG#oFq+`E?uX zuBdx+-Mw`mtNU`@ta`p7l&n8ee{20?_0LTCT>Zb*zg$0~;q-<}8m?}*uHmkRftHUp ze7)fp4b!HaG3Ame`=^XgdFPZTr+jY83sZhI<;1D2jjw6k+<0~44UO+rHK`L5;%Z)9! zw>;4DM9YU-{;uWQEx&G=)_PX!XzRyX|GD+Ituv>toO=9t#{k0^ao=^3T3EB!#} z=Ssg)dReJ@VbIy2)S`5@(sHHqmDVa%(pQzfq4b>63rasydQs_@O21Y5gHn~YbDET1#^=uJnDS zpD4Yg^ed%Vi-XSBDqX0wQ>ja-SE))Kh29C<#(QP`f5q>Y<=wQ=_sb4V4cexheoR~% z1evLpKBQ}XmE>4&YY=pGzU}2e-~3pvZ+^7tEE{LNh}^9R&e0o8&T(ILJxA}O;k_pb zc`QUcYA^Rg3+h_$=`M59tn3udpuhEMgGxy5ULqXkDUjM7!cJBwTy&SXz#cYG)C`5s5gk z?`ZM0XgNE+wznG{HTr~Iw7lJU$#}we)?q)Kld|2>I6T{gQRsrWPP9Jz=@t)+_Y>V` zkJbn0;T}&ouAM~iyY^vux9UR^<4Vzfhz+neL9{Yj9zA&*Ehm=2{-K?8D82*75tEG1 znY|)*IH0Ha9U^C}4ZkC?@i)1M1$%7ZB{~i#V8W+;qIcl9=vk0(_FxN&=~s&5cSnAe zpoaK3#JP!`+A~AZadrzPV1`HI^MN+meJrKrJ?e>l4ts{MEppOrk9y(c7;&ID7u#MR z<-{(d5QH)6V#$$ET}CH1M|3mV%662Hwc+sxHyB4wK*$%j?ShjWuXT&GLT&av8zD#^f-@Vcm=hC83f!VA( z`vzW-^2K*;My#{#(S}f!zF8pJw)7lU^e(%V?7SRRuSUu7yU+<(@_XRXyGTj60-ed3 zgko-E{{akwZT2LHF-F^?&DiB@i=0)B-)Gk-etsr;-@gyRmlewnp0_mW=S%mjR~+YE z%1^kpw77dQMI%Ld>ry4kwG%*49y3Lc#AOPn062S5seNddK(D;p&f@Fg%5qN4-pqq! zDo0fz4x(q;JVvmHLJOwSD4{)5sYdzd(W0YRq`xh=LUSF6D;F>sicup`1Y1BHa1c~hvnN?P~4m7<>e_F-DGH3Cp_8OCf`1KvNZ~Il-Eo)m+LDbI7T#v z*^iZG7q=!W*Fxr?TPK6wD9Kx(mHP_c_)vNE(CVB|gMKR0LFna7hWW78WYBx*V{$7x zW)$~P2~-*Po3*m&B6KS&Y3KKfbu8s(Jx&G}wT8vJljA-r_bS5`dUliHE37pcT-ZqA zNwi9bU@_g@&Qxa+0%HI#rr)DDfw!UuZ5Z zdNSNqo^P?IRB2pJykixkTPDLxT$5BDmwHh@tkSr4UIDGc8(-qGD@uP@{3EIbO-%-0 zTtiicuh1YfadR;gZSH%v|k#r|BS{&t9x?97?130{<)#VYpo&|CNn77v*WH}RU2 zQ8hKAy09`Hi}m4THKXyC$w!ZCyvlu+`ni?xS?cvxsu^;0hw#do1U${LycH6qN!~dy z?5un{c^}n*aXXHapPc1S>)$e2mPmGcZok-?qYq@AMU5s~&3Mhp@EMOdP1a|ruU-jD z)Qo%Xm22Y3S+t0gP?fP%>eW~36T8o17#7v5+-JALI-Vxcu*v3*Z@_7wv{s-^UxjXy z_rw}u4acJ-A+P@_3PBr2V`!6&UtD*x6)n}Wm3gFCgGSHC7gHZv4-42w=_Z4>xb9@| zQrGmAf9FM<4x(HYefDgb?4Og{kkv#K?W|U`uIE*3P&C(MbK~7Y=$KGDSEia$ZCx3^ zSdzt2qe^sJs*Nl6Ynqm4vf(tIHK>fUQf)hVzns)$jlpQV*SOrG-{RO)rMZPC4~cIf zFZGRdUHOyK(RD+5@U$3wnJsBkEf8=v0-O1bA zJ>m2CPDA;aVKCg4J%|)QyH5sxrPy{Qe3m}JIC=k`8j9oImHMxw11itBk{+ns zqLRFxtVMZAS-Hh#Vcxz#!kz_^nB6L@5>^HIjhz&g^yPP!CR@A85%Egctt2HX&!dv0 zsN5nd%i}g+Wh$@C)s@Hb_FcJ%W~KT2HpM$ilSzb1Z6;fp%3NM~K9xDKa+}KBRk_V% zaoI|EBg#>JPiZnNcuFWA!>lxx;k(>^(Vt$Wa;+wVF!U|(Da;?jcZD-6dvVd-q4;jz zWMgsf9QDij17w5AX5sy%;spX$q#mdn7mX&?QN@Iqeb@}-4WIXt% z+D^tD#SoYCLMy>sSvqYMC;L6S^7}>9m@I-i*?j+0+sWqpYG}Cf`o0=!tlaw5P-NxS zq0BrYIW|@%9y1xv{&effuvSbZ9L~-ZBug~@0bNjL9@AJ8v@7;Pw@Sx8feeXB#xb3|@_u}!#ADaJupZost2OpYK z$o=y6OKs{LaF? z58m|QN4`?X{qUh5-}U21ea(CC?Y?790m?r-^xM0F$5^AQ@8I{Bcldf|J@~OZXFW{W zSr7ZN#KR4DpX_Qsc#JzY74CfXy|3KylfrBd-}B_LbMN=9Hr)TQWBUrZ`yM{=?iH?& zKfaefo+@DTk_SI`=SK=XRz3OW_x#o4zK?&nch|A6JGy$-jXe8(v_1W9fB%b*{p8+9 zo}jGdPG9!&6My^O*FEWTE03S`zN1f4<4w2vvbP@}f9N-b8lA`2zwfR>?o)T~KlXb! z;?(mOYAWTNJa!IlCa48QNPyPki<_w#@5?mM={wSAA{uDkD{&#N6g z8Mk8JbH86Kw7BBFkz*qTI{lmbPrLKR_xax5^We32JYInKEBCK{P5N?wZ`18xeCKHn z-`x)~MyjyFfA`>9@2GwqWw#Y5=C_YLclY<)%4Qra-*7G8e~<5N+N0Osb$Wpg|Nfru z9s9n6|IPv|zrBCuogZ{K{Ho;6jdQ;1e&6YO`&^;cx8HZ~U6(w{{d)^zf8xpidfzt+ zYxmgkJ0AF_0^Z;9$iUsl9`jJV>AoMVJkdeE-u3>HgYtil`TKu(>^=8=wjilac>JZi zmlvq;Cy)R0JvENXj<{CM1=+Oc{T+`Tdp|HOD74-8=pXOCw9t0iJ#RktXkiV$`rse# zJpB>s*Eqhbf5?yj;|H7Wy11}%ZTGz6*e46E_B?XI-Te;3e<-ZjC*I%v#B*-slN_EN zcl|wim+x=hL!Y`U{*U0R=Lrpy3syTScePWd*!Nx!|p!UZlEyQ_wG6Qj+GD4<7W%FzV5MK-IH*u{=-re&)Jn!%4Jv;CF^Qz{bH2>WBm(1^&|GN1D^T+4kIR7u^e`)Fc^WQ)Jlk-0} z|10yKpZ~M@FVAmSFk`{o1*a`oyWr9Vdl&RAII`d!3m#kWHw&I#@U;a$TJZY?wF_r0 zY+JZ&Vf(`U3*WNz(88k&Z(4ZI!s81+vhdRj|7GEK7yfqP)V5RG&TYG>ZEIUsTW{OZ zws*JP*Y-r)r`o=`^y#*LYy1Av|7d%;t$xw$MT-}mw`j|vy^DGmUAyR(MRzZHbkScg z`ujysFM4j#ON(Av)VTPB#qV6YWbvxS7cbtvc;DiY#cx>rw#CO5Ke_lbi@&`1+lzm; z^rwq|v$$r-j3x7zoUvr}k}XTRmkcb)EqT+DTbA6pWrN34BN2O zrGBL$rBS78l&)2}LFp!?o0V=+x>f0z(p^dqDm|ujTR*pD4Yk^fRSjDE(2X?qoglsWeS#rjlL_(0P*5T%`p{rz*WhX{FLyrG(N( zr7cQ3l`d1dTzZpv{7k`(xpl}lsc8Vl&(;Ez0%c614;*#u2C9SdV|u9N;fOrqVyi6 zyOr)!dQj;hrQ=Fx91E_lzc;x0B&BLSWiTZ;e*8R@>Df&8oadidD_ zJ(iRWcn*|2&v))kWyjK)(coxiG}SepO^*(Y1&IUMbYF69Vr(Rp)d{J-AfXFNHe|BN z;hwF@Y;Pu)EtGD_^p6iFdkgt(qy6dRXmV}GXy)3I!X3$MYIGn|Qr?*w7bLy8>_Ew_ z?$q#b&xZ8)M9H1Ksl&-KrRmYW)aYnR6UoEvA=;N7O^zhP`E;a4$8&u{6Ki*5M#s~A z8Ycv7d*(*bw;iuIX;pc z?ax`RE14b;=_JO7lb~!JXF6fh4;W$s?z3KjgNlhW2?duc4`%Hg-daNhWo9qpXh6mE3QeUH8#55#|vBvGm z(Sck#k~^3iF67cp}D>`+!DV_8vaQk3X3*`CxGqw7|4Qlef^XYJf~`AX6BjQ!**DY-i?h0m80irl&hH_wH=^ zP$tA;cWyLYz?x)Y|6nFHRFD>l{$wOGs?oE_0iiK3OA}D}Fw{{f7*7x6B6(HMB_(OY z8rcC!LzS%Ep6uD3&KxXvOXWRV#QrI_qQ37!OA#ytUZ#As=Ta?gg*i*#Yx zo(+;{A)hiSTqn? z1X5Y!Jv&pwQE(`eU2rr+!Uwpl`WHMt#C9GXfcP<-FVT+8cB+@Pq^Ojt)KQ)}m zMPO3VcxuE+-mua{@)|LBq}hZFxk7fUB=Lb{Xwz*?9**5kWk)h&k`3V+lpPpNXUB7+p?lCNp(F;EDika9*lIDOG&pPhQhMlYBZsusEpX1934uJ_G}v+PK5~Cosyv&F5hn1 zp%G@E!4C1isg3Tt)`=5P=4?UX~`#gs~S`k-`j zqy+{d7L;$J705&gcQ4bFg>1<=@C(CvQ$RXhf*O0>`xBK>J4Gtj{|pPXw+dn zbZcZSL)>A(M%mip#IQj8eoaoKq)9~!O;ton`gY``rJ|KOlf#-)v}AWi9vgOh*sg0L zb0k*Koy`nuLBkq*rR_2jVa^d-yFD{HFp-kcAf0NSR-(UfH7v(Sv%wonj5rY4lM)sVzxFCRMhkdPQUTYay_wLq9%yI6u*CSy9Yb9@b0oi#&vvCMRU% zvu<>DsSNxv^U%q5BzyhL<*xJ%CLQ0{9T^=s5iTRZ`X`WLE+-RkG&7OR`tdq&s(QBP zMl?>oN=|J(lpVPvNz@>1MUZ|8cVO>(yzLOklDhfk(nD#O$hF9g_4&2kDRHGTyMbRY zlsh__D$JXbv2<^`0NAb(58^JVQ)|{aDD~6RnHp7mgZ|~MOUTHt%x5Q{QPGEGFOz=D z19jQN(TQOhbNS&V83!_cU3RA@lKuG(yOKkLvM2H@)`ch^68fyau2jY&yh}(O81$>( zC3GbZDOi%PmreDLriL=Z6NM>sCnY2D3(_qIZ^%hArqJChdK&Y$QX={M;N64ikwbWF zu2yDfB2Sodp*&*t3@1f&$#9x`vbm9K@_p?Y8(+55@jM;uP2=o1m(XR0}mp)Pnk=F2w)_d$y!9*#W4hP^_TIFcLI3HZJmz{KpoR!^eZsp3uKeY=qY4D zfXH^VP#{^aP+Y!tdun(fD?Eq!EClZF%6LkT4a;T@OLAjl@&F2Xi33GW#>T^feuc=Q z`7zPIR6)K=Nmvy~Quw?kA*(7_i$oDf#C#J;%SZAhqDr&lBg zvZ-EQ`3fX>=IG!=0kA7_!s}pQ?&4Yuqfum< z;A{C@M=GmTl9%WUb|eQ=;q|bjv!rXj;~hysGS0*b1rv(C73%L!DRw53^g-;zA+1Fr zqrC*Vbp3^bcE#zE=}~hoeJ#yI+a)7~N}G}hoiKYq3L(s4T1z)f6iPPB1jro7g!%Nr zbePGFCJzwE^@Ay*mOSJz7nY3lDu^A{P-s9gexZ9fS{A~$H8UzlWjI&3>$V^8Abpn| zX>caHG#s}hGnP$;)95&oJScNYlE}B&kvu4w8_8znrjBVr3l-A+M--;=*_~RL5QLp+ z@m=9oCVL<=JQT_2MpEIbbZYu?eB=rF1~S?uGYh%&c%NdjA!vAwJv(eerci5lGMmwy z#p1r5c0Ue@JAAfVk-!K7y2aHp`U`hyIxY*dP_i#M6i#6uTsszwq_nG)I3ROJ0b22Z zFF@$@u%m=|Hdd(Tij92YRh=T2SdX>eCq+Wp@IWxuAB+v;Zw@EN>{+n{Sqvw2&2|H%USsUVP*;X?f!QQqnnpS@5>ttpA z5Pj_1IS#?8S{<=@1rEtSpSn)M6-O&?6dA@9O zj*ZW3*?Y0I*qj_Tnd`vWj4-q-MKSth%qm9g(V~4TisH<%WkzBp7sr+$tQ`Y-8~&2D%X`t5 zLD1_hHqhp!NhG4X4E^MM_NWYJWLg|S9rEAv<*~s!B!2V2=T(Vy6Y;67U?Mv(5sJ#~ z3Yf+hCUgv3{V>v#&zf_c&kQFgge04Qb^y&X$lvq&$!8UX(6NLV5roD=zLE%cA zX5BG>BUtp&(wK}?ICemC!b4%Esnr&#$V;}SrVm~D&XhJ#^Q8*HYR5jM<@P-gm%Sn- zjVHS#U;W4diR%7H3EI@|>gOPLNvm%M76vEjXTqJU$&*f+Id`CRM6eX z+Yb3_7r)3~A52Ga+bxG0)5UH&Ys4-&J7HJa1wu83EYY1ito;?ctDr@Q`8`K_Q_;>9 zgVmN$zUJQ4XzHk}=KRF>MuHe_oY3CSXI*^5T|2`je-&CaKI-9a#G@XrNZV0*IV(cM zj>_O86(o0}PXQlyGhyLRyLNF-e@UFvU0b-%XK3m06hc1VQqd_LoRXjHYP2hyoxdU?lsC}YGm2p3b-#iv3L)ez3mF2V z1B69gCHy`-IV{kq3}16 zFSoySi}@D>^J_1zy{I+_cz^kb+O^fLcKJ@d0gHY*gD&@XN3h@h?Fu&J^PBWsNT4^( z+TSig;K!$Yx1Ncmzj?LGYj>#s&GlRBH`NEh^2UzFb99;yIIU+OwJTt?t1dnDWLNtN zR~>3&u=7TTk>ICp6t0rG+7WEax8SMYL3g)P&rI=d!9aIXdM68Cx8}Q$ykRT|W(l$j zl=Q7ZeLHNqz8z*)=j$6{K`_IWY|zy#eNSw;!^vEStMgU1pf*u^p>l?=m9CdXwdbqm zg(};icXu1434I66@W>kictd;;%oc_(R0@K*4%a}iP;J-Ow(DxK>w_^)*WGs4b3#2@ zF9~7DuC{9oUpD0C2~_J<9|$^y54+o~E5qb|!PMc_sHKW`{)4qsG{*V0E7W4A#;|%k zN5vZg!71zESJ|#?-6)%>mg^jRv-P{yU7e%97rHC^=JgTPo31k8GFsTAR#4q)%@ewq zufH1{?wO@QkZ^12zR>Jo`JH-U1%KyO(4LZGEvIW$mb=xOt}pDYc4M5N-qyL5IYs%^ z8X26fR|$CG%0_#l{`C4Y^j$NRHD25}M=1!-YFys9qw!Q-oumAk#x1(qD6AR9*If1N zyPitDM&!gQcu4mZR$*VEjPHnmKi-vOw6;~4w-)|8pFzM1TG>wF*j9@xE9)$bVee*z za-hl8`l_9A?OM@b5S*czt#C7cjX3NK%_<1a6{oGLZ`V~q`SVn+dDL&NKUYbTp?;Yvs1v$~qsn9x^#z`>%%ZH=oN&(PIru55~~xHCsN@Z#?-*O$>wbS+jit`|qs z_P@GL>}o&op4)@qhuyCk_+s~(!63N2_l$w3QXQA6Ot`bV%MRSq{kwh3_X*5rzo9dCKcyFyzxGXY zN4D-idp}n{f9JdVKdzo%c+)p}rXHY|8*YASY=8D#kxuoy{J57KyYa36GV#=#g5a*Z z&K)%f((W6Zy>6A#l3e!o#z3;cqz7+A=l!6(lRcwr`!e!RokZhJe)c@3z5uQ3v{sus zUfQto(;c0i=hnq@2b4Hl)CY&c4bbO#%0ri2!|T+6BQ6q`Q0I_F>QT=~R;Y>ZOTZVr zE4e?oUVQAw<=rF3YxINMny#K-o9BSJDqAT^fnw&VY@M!K<4Y}cMY_$~lXvzkWW>nHuX=8L|}1en1Im|CNL&=yD% z`d_5J+g;Aay(kZ}$uaAnHvsZHIQ`5J&Ms6!o6S@otJLpiT_X`*t3?0EJ7fV8@3h*T zx?WwoN!Mr_&y8pk~v zQUUqer+>h_Q}B-n6I|Pyr_y?lsK0(m&tiMsW%9bqz2A$c+kx$(g8Z|&ua-Uo4;O2$ z2`6Wb_P{831`A#`p6}|Qh34ySLJ68#q_!IcKQd;q%2)yFEY|NulCjiTQoB`um%BPh z>XG0DN0aTs8{eeJ2{zLqrbSpIIPIXy(FzAO-^04@R+)X1!?f~no*t&VF-@}|@z#m< zfWfaX+W8dCZoR`a*U+S=?GWd{kDjHz*8uR^QkAU|F6eWaW(((`lg_ALD+zhJQV`6M zCb+oq6iGI&J0$%&Bo&c_TN+m=VZp3WjT7_bYh3;1PGhWTJYRRta1s&S5o!poL%x7} z;fsX0+$hd?oVPu(zPvYyHw(ezyb)?dx+rq*}-;u6a)s^?7fHmr)zl@&(7u z#)Aiy>sKB0=z)Bn@T14Sy-nZbaEiCX|A^MEb?~K#y0X?MHlC)wPSf={(sqlqu2=-i z8>@Av-RVeHdWG&m8>^ibgl@Q|{uyqp)oRt)xX_ia(U|9Jj76$*`u-bkZXPi_*If1B z?ypL}=>Sa7b=%JdJ1%?nUFgh9j(vVVrE7L_&DGPrdv5U7zO7W?Bx#SnVYXb~G=s08 zD`){K;w{1(-Rh?EIb;rB_Og2k(E>DNIld4vQfRkJ{LH&^jkX3{&Hh3!Sl-Z`y{DLW zVWFAGAwhXxndOW|kqX@NZ|1k$E(a;L92Co2{eS0r;Vl$B!79yXO}?GklgJHvF%Q6~ zp0CbeS-+rrR|J1>9MdP7x0*XupKsPMf_*EX*VWu1nufQSJ(eyqnRi3}x6AQ1FXJrh zg?HNVEjP>Y{$IWgg8b$i82BRA3vbaw>S3)tr~dz-d)KH}xCcr_yP?~l`*pfT9^(ff zPuDpw#B#`EliFxRWI1-L@deyPPo`nGGV2=oo2&vZRugVTn)idx!@PkU3mJ{lD;$H}-TFno@fOcO-l*kRDZ}nchd-b;t%0^f-lI3x zI|&7@!NhvOWqM(@?yXbKpgu|08{9o?Bi0Bwx2P_;)q=_-oyP=z9P2R8wMVOvYtt_} z%hom_4niiI4Fr$$h^p<2gFv=MV{C9T5Bp-PW`DjCP*c9n)nIhsqBhczRl&+IEMaG? zk#1&G`~m)Ma%J)a)EB)YDak>nJjlUChO@}+GAqAY9{p0>{Q|hNHplc@PdtK@&$glP+xyH$%hxQN_VX0B9($o zpfM?Rp}U68unX~L%&&&B!u2~v82p5y3cqjJ~+rk#*Pd<)Se(dOU>%Kyf#XCSXLB{;IOJG_)Ss6MTxQ3w>2 zR-Y!plEIH-Ig> z;&3>g92x;RLeBev8&u!u`f^8k$VfCL-Ur@4xxEoBiWFYs`gb(w`dgRxVXy?wD{w!S zz#37n`7!v)jBOGOOJI$lF*r>ZFW0OX9qq*2%=ab-B+Qt5=SveKQ7nffLW^IndnVcG z5y`$#HP(s$LV0F#9==7MU0%@dp**7(@2}$@nLMMWjbN4lHVZY+P#kcRB7u0gL9kNS z=P3$EOpu7+>57CB4<%Aat_^|r3@s^42h&{q>c7IdeUq=Q}A8wD<=Sv3t z8j%>2-ACh?4MyI_n!WeLS9-C0e1E*1uTMSt@h?^Wpc0yh_QXu>%hi_WO?u4V*T;(k zV(-T#)SHi%(;k`1XudxmJ4zS&A5?#Q69?-gB`?pkBC?bA_?o=+4{d9< z9C?dhnY1O3#melww|bebfj-1PF%#>5gXAM$8RV;cemsj4Yb!Dj5AWlTdfUWeLV8&y z|BCFyvTX7$Ul_w?( z{dygWHZuPfdl!hYstw=Fo_IG}78{#gHM~sb%f1A6wUeTV6Y4c${ z5(WIuReT@)?&Fc@W+1~eXTD1ve0T}wse@0vBpyL==v(GF8Hrsd1SHXD-QAg6_fzJ4L;UulVHRq0RLDh?GAfk6u@`|x;1OV z;yAXR3)I?tB5VL`4EA2v$;JmGW>=C^o(hR*KFZcpvPS`-++x`LAwg^^-;m2Vge4;yq zf8h&?_R%5Jw#a|pRm?Zmpd#|2et03D&njlYHx$hCHS3d|0MF0HpZwyN6Y<&VFlamE z$fNb5H;Y#pzgXVn!zpe*$+!u8LT~iG!QlXWLu*JglP`;ftCdP%i}hG0TyB>)JYD@* ze!X&Sf?$`UfAGgj4CLu05%h?j%*r=k1>FY+9dz?Wmkv9PV){3X)R;wYdx(5z6dl8! zB6Lk%^GNMPNn63L-{R;NU+IU!GBIezf+PBsSRZu5n0hd;2Ok#y*5}csRzInjDCsP}M+@V3U)HF+~vccFZ=1?|B)wa24E%eO#!BKww7CU}Jqal%qY*K%fdN=;_ z`Hn*VVn<&WsfL4B7OPpp=D{X}W!vR7{J<|}J*9+Gi)XU}e0LCeiM#@ztRVN1Pbs|# zn^xq}b*z@BAIsaf(pW$E$Krg(U%MP#SPSm6uYfgUy^zQLVRen4_lWMI@(p>%H#Va3 z4*DI+d(2aWpJ;TFJi7dHCs%@?QCK{$cE7_S@@AT=kF2xE&NR0!p}e0iED{BRW>`=1 zCQpq&LwRcWCi=QwBW}^VS^{sUp61S%L|<}!D_L6 zT)bj0Z=rAeLcD0;o9{era>g$Ub)Wt99cn}SIu~cb|61t$vT5?A7Rjd~I^*|2SIEP< zSUw$I)k67f__T5(xv-N|2=IwiQ zKvpurEO=UNS4o@mdqSTOiHaXaf7$qZc_E!6Q*y>O=N8HQ0YM#t9*?p?fm`9S^`uRG3pVCg6*yx5E;|tqKZVS!`&erbKnHnov zvfP!>%IhGsjGw#TfAwR5XY*P;%zFe4dfs+Iw+m9Ecj6==%v}3uBV&d8wZ3P#z;Uc}C{Z;c`opfP$ytBz~MUU04WX3}6xyV0|^ z_@lFcL(S$l{P1-xvxz*vhmm4G3pBO=mam{SqF8z98d00N=L1YWx zw`Qhj_Vv<)*xPmvXr``hf8FoxvdZk+v8rGN{Y-2DTflsJAVgbk(XT&uhK}XLl&^=^ zi1uDCpWH{WO&UQv6T$~QLqAA-Fl2HbJZFR<;x))NvnH@qEdqc&f&B`uIKc+=h7F@< z`tuUW_$SIc{xqGfS3-~=k61C&aVDR9BnPT9nPI*clxEZd-G@ypBzY#Rty4 z2Suyt4qoggzxzEyc)^~+YT7D1n%#{}hTmhBhFQ{BIe541+(LEHFQ8ZnG86d>kK68x z_h$?qJXDLOfo+43*_aP$Q6BTM(K+Z`>d-6e1h3j*?eJZr+mMYT`OW6 zhOuSxDToa~8}JTsfK9Fr{!v0RurD~m;qZ=WPG%MLsY6-ExoW&L!-lX^#oVV0K4=`j z$ULc8?l0CUp6dpUb&{Jgka%x)uHZ3m^@*^YdE1IcQW9{1Y*Wya-xy9E4PlZ5MMm>v*aS{sMKs?7HGtm<0+0HU?HUMtMd-IgprYq*> zDRWtb>WJtNON9qH`vg}4|1$Yn78igr(Rc6?`UnZYzPQCn?H5mp(}ZO8cnQ6Zi+w1F-_%0oS-^{_zL zAr9s9EVqw9-^K?-0PyUQwdXs2vY0B~eHc|muC}=-pqHy~!Fg^Z&y~NB3 zh?NojSfqZC|3n+`^?8DXr%RTKdK=xY@)`O3a+S=y;s&i19wZ%mV z7P>gZiH@7#jf?YsZoX_P9FDHF{OfCpGy$i>2wuBS} zA4iTp;dVB_791gMRVbjDpWpSy*qi>Rk{yL5r@zL$`PxP_Q3}HO#K2 z_eQW$@$|8ue3_3(po_d8vs3LX9!Z?ibSL_X)9l0nz4Z?FqTjH!;BUsoL&ai7v-vVk zbVlQs)HBVBG@wUoyHRbibJ&^oUMOQ=^_rjH$H00tSbRO38}kZrutBw=acjnnO1EqC z<8G7x3hvm!@cl6^yRTTtSoJoyKFts5$^3j7_~=uu5HGtVPq7$GN?AR0IoLwBd3(QG z5*Hf+ui4`nkBEqjVb;Ig=|+1J(|F!$#*h98%?v&Nw>!yW>Z!0LHAKuYs00_V2TD;_?u zNj!;q;E6BR5zE64^KJ3$v3Jck_2aTej1oo#@xh0cMuc0xM&0VgA~e*rwsDV#alfzn z7B2(KzHQu}vbOk7hI`;CeWMW`=Z=kQ-a+UaFfR0LIupwBIPm8Z!m{1!$!ua<58CqWSF?D-ddLHI zoBSR;^}u~}-;^?F*Y>VhIU9G2%2*$NcA9$NYD9@%nH%eWt;VGu9LL$o-O5jBmRKu? zwd3dKi!1>r{QC15yLC+zgJ*O7xP~k8)Wl+9j>Z|BdGj7&JuNWH%`3pBz{8}B(;rw4787OF z;a1b1b{2(mO^jgYZ!D??51<9$2cE0rq$4YC7=vE+sRT?#&#u^cJS-I~J}fq)$xufb zo^^m@lw&h)RztMa!cbzdaKhiqr-D(a5?Wx4 z>6)28y@EFhUhq4JsPYVp_pN6MZ}_kY&4j&4yxC%(0o;SDwW>pmGwvmX5gNwuUICFW zARyA^DbddETT}+mfM-jH0|1T1tt>XMOwtj{A6c?Q@L8+?&%>Tx;3*(kv8vOi@t9qd zo{=T56?eh=Xgl}^x+UJ_%iwQs$C->EhL1e(5tvP`zMY@KD@J#-Ki8%+^lAOF_X8in ztA>5E&aiWAmu#zgW8I8D?0f^O!w9UiJr9PoYm+u)<X=gg`6g_=#ff8_=*7G#veNFQuJzX(o7KQ#o8B|9-&M)&EKwIGo@6UFj z&nkG5>_6Ln_Ck4c7LO^W$qNGXTd|B-p|XU01vF1iavB-kuQF&i>Et%_Wwsf%5R`1T z29_84(qf0mPM&Hc0#YoqtsZimenP!!y4K?V$ad;&%a4ZqhkJ-dqN7G=TSX718!1Cd z5xqh7V6%3pel&t({80*Xhtu&;xOpyC?|(F+pW9)_TiZp~rf0(aC49kaH5zten_A%a z7;gcIhl%IaQsU=>f-IDYyEF?lG5pKk4t5SZzsOBH&C3;Kv@!1sj-%`{jWnhd)xYp6 z913rGUiJ1Q5c{(3y!=0?QCL5oiHO=^>`5A*o7M%xcooPiWc#@6I8Oh9UDjx?M#Mh^ zTX-qVgP1L+r*fK`dG~sohHHUe1g3wgx|Buf1$^-wthXbuJ4`l(JGvG%I8*h$AWTd+ znHK74WDZfOD4$1lkB|F=a%gW}2E_HzUdM5qqd^C-N5UIlyxr+_l*u7<)GR%@L0l_p zi=O0U6ERk_2Rj~tc15BxagCFSCQD31c^x&+J;T%%U=h$KPvu#x3jKyOiSH(O`v4iS z$idt$33GyE22tr~S*Xh_u63cLaTwV`4uw)@zmqvUS;6~RHo0dk&U4RTY}A`qcw-BH zPj^pT*pnD%Dd(TKSgGeRcuUKKE8|@*ytgI@8eF`Kb2vP2K{SeJS%)IX#JzZP&58Oe zIo`NQ_lRJH?<$y=&z~U)$Ws&Nsvgf?SgfmD8P8swr6=BrLi1cjyV5py)`xRCXE$Et zB5v#5Gg^&qTw;2h?%^-7HaqWQQEtxj@E!%=L&kEVh%%nmBI-vOBl_pVXzOJ$XM?C` zWkln6j)W6OoSoA%k@}q@_=u?cb3>e_qgFUa$!wL0GF-b3ol>GL{m#m31!9pral*6v z)oQ8zD9!jBH!jbyaBhiN5$B`c{W}-lc5(LM8-8C&!n+z+L0 zxcS^&XYRg#XSuQvmWu{+$Cll6%|JBL8I~2-yW!^2dX$CrzCPT%Z(r9ZQ_pnm>&m4K z=I`mWSKpx{BhT*(>sfp?-d|W2*1L70 z99uK^+pFT^hGk(re6@t+xcN(_3Cx?^EZL4Nc|d=;Z>89z>}BAck*su+YzS;ti^?MR z>6aJ@S{*AijBXK`$U3P`%*@Bo*l8i=YJRxyA#TN@iwxdykJFw^q?8lFDg8r_9#LOb z*YsIbn^Bkdtf9;7)ChjI^-C;iNb^D;_UB9S=&^~+woc_s+36gW?!#x|uJvH0V9T_; zmD*_i&Ni^qO}_ITB3 zVkw|zrcW%U^`|$;+SwN2_CU7 z{oJCq9@Jw!u%BnW`tv%#fZqui#!D?Bi}!WJ`2i2ZTy5mg~- z!k(k;!Vw3w-MG*f!^6TG#0tV9q7UlPhFy1J2|G0owwCuc@zR(DQSk7IF~33^1wS4N zUIlb$QCs$mp$?)U7Pp0NsF!s!W|g2mqN-S;JjsJcXg;Q`8}!Qx;Y)*u(8_NUZF)N& zAJxv65MQ-u3H_Q?h;7PziCp;7gvu^f6ocn~DJ2?6B=%z2dGqya&&!xCNxZ_aLz~b_ z^ydVC-eZRodvKd^xs}?XA3AT_JZx?O^2H~J|LVN^-__!#46!h!vk^zIznF9&KPut zZiD{}5`0>;X>lp?nkdan`r9T5k+t|@l*auiBn|Ky*0<|=Ts1w`ISU7`wJB0ZB!!5z z=fVqI{637)nGX|2cFc=`)`|1SX+5N0Vw#?QLz-+Wp-EzTQJP$=oR9H@F+ujac|Llf zY+USXd#0NhwaI0F;sS}tS|F$6SVuF*cVEC+lnc>@hRNxoL83fu0VfrZ9mJ!i>zX-1 znHKT!IK$_IH)VMXtM+6+CkyR8bau*ux}4&)_o}oxp0>Cn`v#>l%1gPppBTj?zN&d_ zaKHvf)5c3gnK`vEPgq+ZY%P^f@LKmwyX3F@fY+!TPs83-fgfWfygLq0i)Z2S(n61d z(+#|b3|}UCjv%xgcZt$$r~9xd6B^;fy;~6Pt`PnxVd6?-M(DM0219F|<w!HL;_rNZ!$<%0FA3KZJ1(WtXdQ|pZU&U@zQjjro zlcz(%53AbmN=<4K^$JTlGvDLRQh*7rI#hS2IE#p~J!xfJAJtiCP9iAitdpF4Kng^q z#wku-^hjn{G~4zIux!{BDX!}y)OL!>^jlo}+cRhALVFWwya!|{I+T4+ASW`$(^SZZ zVtKYeat)gy-opZwae@rH!R!SzFXsx0v&HKojiQ*by~n7GLNcvYE%fn~ zVi>z(R~g$a8ogTP>^I`!ocQu}ed*qODN=T$gAdz@2s?Y!p%$^I9lHm-HK|7_J`479 zRyg}3x^A3&WX0lj{TqzqrM#!)y!y6)H=8{>{j3io@C2G-6}X zx1fYQ5RF4uSX2w$K@5r0pY%oyFIv~$WI}X~=oWu%zk+A$c&8HaKYL=7D3^Z&QrH7f z?vUQPNVV-vOZ2cJAHiGXbQ3YOEh;5u=HHtV_Rw+Jm9P8i?t%RmXS*Y(*rKJO&g!`A z>E5SOe|-D>J1@@i-e-&3Jbw8NH~+Bvto>tGHIIZ*m1t?$gO%QJ^NC&22vM{&tcxG8 zS&|UX$@U(wQp~c(SH-JC`*mLMqIlvKC)Y7#8E6NKs&3CJ=3p#7$xeDQf?C7 zbS3eA^MdT1DBid6{dhfye8s-^=erW>1>2PV(Z8ueKc<7&8}R!@^lu)oow%}J52r;$ z+N2Gmu@TM*m_5sLhm3CZH>s4!0g)nXXAckiF{W3M^~8IuenJ=n4qD)wc`tQ?t_`2w zceDB(?xZX-zTZY$-@omzS-gy~tbDut5!=Hu&F;&)gaxEA(IL(Q zMk7|(V0IP+oLfJvtG5wYA&-ZIYO;Qe4%X-&>&~=p+`a>!*yfySVhnos5kuf%w>$b| zfZ;#t6`4;&Iq?d6e#E?Lj~^mq;dv_CzotI>UABuC?qPd)MjS;0m-%OuZx=LBPMh0x z=ecyl1MAi2*4D3^m1A*X1wzflvaq-4hbQWa&+AaWMfF%E>{7VZB0bO4nFLiA2!z}IR%+KYn z+^lO~zQ|dq9$)r688)x2FE;utVF3v2jgw(Hr+;`J)ZR9Ewq(Utt;|Spp*YiDN97@M zEA)3wSD>Bj1T4}Mec{hV6qiRM?gR4Uz&iX3Zy|--B(Km%e*ZmMesWtvYhhkoygc-* zY_Gwjd(?MDmLM6CZ-+G!QU*T7MqpjpUx|93KAOq-_@m-(p7e(wJM%PP{BQaQIn$|n z=xO-Y#|zD01s2X-nm3NbVO;2nYi1mk1Eu9JsSfo+zn6$K5}7j)l+zDu<+ZHU|AR1z zZ3ABIR4V$VTfO<`ilg(5`l-lQ{|>ciIdRg%YR!5@%aMj)lyRfw9_Q%CX!%anL_d_4 z^K7-zPqaSz2t89=A6#Km7LOZ!r&_chi<>ZV9G-6VVe-2;{&-MpZ~V?Lu-Uu&LXUg8 zq%U42vBx#yBmZtA%8@L^ej4Y-I9E~ZVG~tDis6fLc8``8Lq?|URVgXdU&JW4s#dXY zhdiMk{ytEd-|yv&NyFW`=j9B(Hu4%jIqEqgeSMTKT0UQOk#!r2>T`ng65ZpOqj-Ib z-kYAfLbb~4DbreEr5E+>(t%oS+}4mgow-nyN? zE{z!JjQBb`16nw>+Cj1fQ|v_4#_2#Tz?y zVx?1_`AQdcY?SAjkVi@+IqJ3Avy1lDUOQ)Del|WXrzbdzvCKWwc)qUedzk2=Ixw#`}>kACtkNwd&Um?1s``Oo>urGS%0=p5v#`ZCh>~>`q84?3+f^~?c zi0@-}LZ1*xhOY55wao!+W-nK==+=Xq+vzJ4kMPIXhj$J-N} ziu1a}+W5D4VVCnpE<3ZzI7o2b&t_JmkJ}mqSde%*XaVNx$Ki}YukQKho`KTChQG&b zn5muIw>usOcz*VLkGF8~VDPB?j{V7P-nQQ7=7#PX6nyAxKMvmLn3CVAVE5F9y@VO%Q$E{bU$-U=RFpKAdKnqJ|ryW3JAOO_A_CBT*>n~=gLyD0=PyD21rlqG>cs4J*|0!FZdxTuJPVnjd@#2`v9 zD~M7eZV*Hea8ZyVvO0vQES`8 zc-NWKYJiMm&uGAh9esgSGq?>}0Txt+4Cvrqx@L=o7fK8L#A>Q{8XGm zDtg|(W5wG${!tiVYL$_Yb}Mw$$u0xVbWllMeIi|19o-OklppA-6D!kdmsY5;(|Vx} z>l^cv8i)0LImO_r&Ija*ux#tD4tU$+pL56woCt5V1I|rQ%>ds6R@&4ijV@z%_$qI! zPVzS7d_Q+%T*CZK*9CM(2w0=P#lD(+Qona^j92z%gxKGxtIfd}e(RdaT;o_nw*J#^}CH8>iYeD^^xIXYEJjbEP>tul*PTj#@p?&ugQxw?Xg# ztU6L~gr1|%!K112Mq@ZFk}>h)+X&NdQF$!Bp$oen14uVWbBqmstyQKrJU^HvUi}bx z!W-9M><(m>2ZPv{oa75wn(Tf{Ir#1r5P+Xa906sD~*cd)pqPZL}in`aQKqP0LU z(OtO<=5aMdR_t`wGw^!-*pHF=qGRS6ZUsC_8`+PmdW7Zk)zW@eMd8Hg2(CrJjRC)j z0Y{nkG7?KgMf+gO0jhIWFzR^94$;5`uV{m|y63(*vccc6_+N5ag!` zX-U1n7v{7H!_O%#NUvS03?27VWu?OKVDx`4cVWFj zajB_Qcb8e+I&2|UKRx=zS_rmDKJRJ~aZ9B|DoY{py4-^}Rs{8oZ{%<60v407()(91 z(MZ~oZGf-RPYEgUB>9AA!j&mgtsUFsH(qFz2WLQPfrse%sc;lzcJIw2SYzB>g$)vm z51dLn^c3<*uwVRmJ*?cta=-j^lEBq0d|O8oX%*QQu95JZDyh56w9Es1b47poHRYMY z1Ik2q!xI^azRXZly}1n9%KkNb1G0JuCk$q}vMC%gES-9-=RqmdYe5gjEtJ;5zrnL$ zoXRI^=?=%S>UoCb4(Ib)wi#naQ*|(1sb^fs$H`{+tU$4$pwM!BB{@yWo{~?WvwEjK z&8nT))x&D(K{RLYj^-eo&>FCn_PMJxtgN`}G|-TI;ZBE0d2m)v9IrLrPI#>aEf7cn zt_^|}QFOG)f@gkPi5Fk0L-@k^Qdm7{G3Q8OEwww@yw+2ZM3Q`oQ>obH3nfExMgzu9 zW94%^?%>RL+`?zUQtQ3u>PE=U%q*{zKTCcyi=jx2jrF~xUxNKfohsFZ;}~n`WE3tf zkbLL`oJHv`6CToJ>JG*sO=??JOYr6!oA68N)NSQ&+UM1LmqSYQ5~kg?eo=^u;Ta*GW9$mV$B2S^8aPg+CuQI_$gl zR2*-ajZzn*!1`LSOuwG#FOxn}?xJ+pTjl~obvH|$wAP=GIRua3MkHvmH{W7`1%75v zF!IOwPY?3OK_ie3?A-LmEfEOx%vSXd^2Vu`lX~ocXWqEu1Ws3zcBEgux{2Rr6pjPC z)M`W@02lf$)*`RIgS3JsujB2Hb8k8b`-ZaHniVgV(vikpiy%Jp&^Ih34QB4zd5nz{ z%>tgoUIV}UJWSGalPx)e`LOihqoF&X{rRHoOLo7(2+4s=jixjT=y|yQ`Yi9qhLtOA#SV=P3vU+Uu+ga( zOE90;!iAp4*dj%c&&IL#3bfuhQt4hBRv^^^$NALcg9ptq?}GgjmM0ib@R58CQUfhS z@AAW0E~9q1DKU(L-~i{(fTPO;`M7UzLhe-AyRQ4&y}DYS=s0D<+wf;qk5^Xt^cHo_ zYUB*mC`}H}*c#d09Thjl$P9Syl7$DmLvOWSyKb;rY9S@-XlikzWPH(p(dszpX|8_5 zDhWM+9_Fqqu1%JV_M`h+(fsHexTe)d;D^w5m8s#1-ZjEh5}Lwn^%ZEmddJ|&WmiSf zv=kz!H+8zJTe=?Sa&pzzl#_d<3V4Ly#utqB${9gPMs;E3pl#9{!MuJ8T`<;fr3=P_ zC*Y=95r@ev#zWw+NV#)___`?#uQoLN0GYo~8l_gQj~Y8E;1H~**%N$93>~*8_$0*d zA3DUU4=a0q%_$+6;?z^v^=$J4M)TT&#z{y~H>r89e!HYB! zjP=`YgRy?eFc|CFR^JGfj4X;B0G%%g6%wb{hL0DQSDp$=omvj-uZ$a(+=O5xy|G5> zweuc~#eUC;gV-)~e3_BVFQ|}O)Adumg1jYrRD|%EIf~jH6;*Ip?lRkJ`GddE9Z(?S%8%mp}gE=g)Ufv~D&O84O+{ zxQINWmNl$yQMLtESJe9=DpuDjbj3ExE@A!lto09B<4gxDieH-2_-4`V?P{Z*Ym7Vs z&9m`J0imWrEgpGBB^ErE@V>%c>$kjmEp5uhp^Iv1Bfq8A)^h2!3KAc-QgRcKE1NVM zs(_}C#N^lB$&ZCP+6EKF`}~%HAb(pdby1UY-f;e)=B@kK^lT=qQb_AwYgDlOpw%K6 zAJoEGTVjTy!9>v{&L#&|dh1o`AGJ0^Ww#6WSNJW}1}otV>yumwP8zH~$fbkvey$zP z@5b*lTp*lZSB*Cb+)=WLYZ1{Cb%Obug+I9bEnI)l!ofZjKW>2e)<(ykhTxgAe%}W# zZ>^J>!G4t%!V&>iComr#W2I+re%gXAqf)Z2+IZu2?y?&R9vdznT`0IW$eW+O5AMAQ z#%u2(?dTpKZ+z5V9B(|UM%aGOlDukr@=GJfZnCK}nlsO*!seG}v@D;C(Nuv-N!ViTohNH>Kh4jZK(e*gaJ zu)H$ftl>--S*Su}p`zq|W6sKeljweD^#zyxN8-snLsGHQp=TJ%N{`_;m0}B;5-Cf$ zzTWnX^!CHoD=d2h+Y3EQ3(j)n~c9K_3uc@8HO@Vy~IvrdS z339ry7KoOhHcn=mcRuSJb3{^uuCI~u@l@AcSqnriuxq?{?BV&&I0EZTp_NMn7Oy1< zX`gcsuznnzw4vISLOmrRJm!9zv6U)=b|Y_pc+1drL%+S6H8*5HWE4H<&f7$h&Gt|%$YyFQNDZVj-kE`SSo>tb->{27bkaNIrW!; z=P#BIC<-$z%r}F48M(k~FN)&qq)_=r=WVbI^*DLO)TyoYr@(>{lpp;mbWL@W)FU`0 z?QN4D3#L#B8tKKguVTvsN1zeZj9tjPF1A5>!R-UIIo3p>x=3os>By8`i;qOhtQ1-iYN@^n{?#b>D7dfdDBuZe-+mnP z+NRlG#~l$+cxWSKLQh=_wDJz6Gdxo!^dSlo#+y}0y$vo*F{AXBAXQb}X`fGb3Z@Br zA^=Y+Y;$GY)O^!TQztWn`HYQPZNY8M6rqNyPcwJJ?eg1)m7)Y;=66u%3#N(EyMk%Z zd)J8Hq0VmnM8fc-)6cwI$m=EMrTKQ1DCpJZO_R#IZIwV3l3~63{8W*Ku9erDz6B_tZAr)lV9r4lr>lI3mNiM`G*9=vr0l61a@n!)>Et%>eZ1o`sdKt#H*4QsocNABFxFc zwhZ+a!IPxaoWX&706wrHqy8RhqYqN+Xz3fPzMfjwXz)pOIDA)hCnl1L_7~+rr?3OM zR$Ja!58XPM-KvdZedm4-Jh#_NOTD8QhAT>s3Z@F%@mRyaM;tu?dp%HWi0peWpQuZ6 zE7jVOCBQPqF?A}%Qlxl)D%OL~kn*7K;1~3nZ+|L$1YG|zXb?Od?MZE_XgR%6#IPMA zif;Px3;sk82DyAVRg@eQPQ{G$uJ1Bq!>Ph!6qU;IDNZBD%P_huQZXN0JEkKL1a+0D zo`Byn`+Mgztjbe*@2Q|$YIW^xgjC*}ZRQNJt5?5pr8%Y7%qwJiwX8xXtqcs+r8$KVuPVKl8gH%zX3vZFJO`cSr#an% zS#bD`@{L}~oI~@i|O?piRtw^@M`bFuQnTp;N8XFPV-_sFZVrr&tEU87D`WTmk^X@!xT>~DR>%tCH_LejCzAb zUXIQ)GKW3CGhA;fNxS#*?766p(0TeqeagWk+JQ|=ecG6HYI{(B3owFJ3#D~f|8$i| zX(@AFxjZWxy{GGqE&~ysXF*F-i@e(`b|UC9Yg=d`)Wpy6~X(KiZx zqlfg&q|}rUNk{j_M$ z)`cF7}jp? zPX||sPUrRK^J*Z$dP#@(H05(n8@6;#g+p7wJMc)6COKL7SixE5B(!R-;1avrP8J%( z?|BBNphnzyb-1xaDRoB{pDlK%N9EJMztfLblrrCxAG|5KcRFNGD^^+5%6+c%37$ns z`QDvkYUhkfnVObE%~J0`2+HxUZWEk$!IWO_FnZNWEWOi0cO9Bj=6a*9y^Z2*8A~KD z{Ev~L-L>o9%Z&ERi<OD1j_HD2~!J||*pKzI0=Ja|> zz=MJ*{WKI?8n@AG2&DA37&!booVU!VlZ+iCI7|p+qHr0Co9sWN$)AUF98Y? zwuJOfzY2`kA?*)KW{RDh;egcQ)ex~jG|AYj)aCAP>>CZUnjkV7@{kt-m4o-mdzH~F zHrrcJb-xlTyzYvnu8FY2H8@s!`z#(A#PvR|UcQXS*SF34T>64iiSgALZ*R@)D@3vSW{jTy4`MrIn7EUW^skMm{uIWpa&0JYNs(+yw zx)Ys!zsSKVD>Jw83D6Zt)wA$l)>Fyxob$@AjZ&ADFI9$Ccva#KrnNeaZIMcWQMM0P z|8di*)E>5g%n@kMkbo@=+a7(Q_iNE6KMcy9!9e;%?L?{UFHvbz!NBR@oT3A?s?V$R zie+Bima9W+mUhjRyifBH=X>+>1&~EHz+AqPh$m^~J z=~d}HFMaUCFg7tu_z7Aw9CU-E#Xo^jW6pcidU=d;Fh1S$x6-Et!*y>Z<-1lI#yvG3 z)6<>Vsb;+&GNmQG%krGpqN~2?%k|Tp-phry;AfQyyl_dC_VF(}LZ}~}_t)tk!zHL@Y&ZJyxDaa(Pd;dpz7~Fk;dhTa!zv*I6Iza48oVucCy;vJhDo-vi zep(qQRa)#XoM!^gyJ_vL^`3(PM+m32lCsWs= z8SAsIF+hiSulHm^t)Yqa@>XfndSjc0o~WM{o=&2h-fUg0p}RYc z9iy$H)!04wtW#jYg)3K!4TX__elmWJGhWKpHI7=Nf3pXd9eAoEa~=r3BAmj6%+@<3 z_Pi*y>N?KA7`1Y0{A?L*Xrgi>U3Jhi%~=gqe`>eC6$h2mfhP&0jbj&5PXPZ8w$%L% z=L??9kSeunhx6h|s?;r}_mET_v(83~kgC$lT3*@3yY^OX^e1fnUXMR->S$?zK8dpZ z%@c^YO9ni!P^Ff3qEqV#gyo$Df@q;@USnWRQr zfFJw$y_Hz;6?6Ug{vkcDSePm`Hb8vkUX|WVEq8z`e%qs+fvleR%l1-sl{}Deu&k;q zlu2r}FzYPtT~eX!R6G2_ko30WFFJK9drx#~ug#}-xZSf*+#Q0@5$kUO=B1Xhyl2Lz z=hs7xgwkMq3D7Hhr-QCP#Bz~oTz?289z5dxa*kIY#CFOV7Es-2zXh*kmOeGqAK!L# z(DbcTf2%o?UiT~^k-2t^pnS&p57>A!ll(YoLA}i~fy8@KdwRGzZyo;&PM}LKPkFHl ztCZi%KqUes8kIPD=V|`4PyAkX>K$z@G045}$;79gFpk6Ng9(Ql2Ux3GYA{3hsk2*C zX1oL|*=E9bRN}C5K{}ZYo(2uV0|8#I4Or5*RH|3Dtfx^oS<#q{#Q-` zr$MrX=8H8<0yo|x+Xf|;RC0n!73y7~HV)RgpkbNxkC)To{Z75yM5g`1Z~q<3-t0Rk#mYEy=^xpbiTZFsP z5tL=3)3*pL(L3;>)2po}YDZpFdS-!lyuAIBD!q5S+_liuw86V3S|D6%hEPyF8#g_d zC@`t*iMg4ihk~>I$0}y}^j zB_XesOIJWPN;wOqZ?x@B$PX!f4!7m0q!si}>uu&gi#1gaY+6_!*#CfpnZ6GE(Kee= zM2^ZNNATPQFV~NfS~zzB`Npo>_~o2ba!8%%=+*-%(;QyC*9%qZI#QkHpDKr6ehgwF zK1E{_>g{CL$(o!OKfUAAFJXjnm(fFB<6fhvb(bifj$fZ0b4Jo%N9r6%PHHPopMx1z z=cL*V7_I~RMi8&OeHG4;Znt1m4z&-{TXy%LUpLG|f+!Fk3dh5m+K`dVK@RUZnd!Oq zFe%%6dS?0@*dx4WYNpTOwNYeddEhhwy)j5nQb=Ei->#iW@515O>4uczu0tV#Xx-rz zC^Ta4376@i!Y;(V%2JV9u#!jZI`B(56{dIHbDYxG;rCIaf7uPFZNfujg=wKz(&Sbd zyi%-1$x2_TWwqeVcj>Jv!Tpr!bM!8cgwJ}rUYzM|Vi=Rhu5D4bfo%~adllx7{v<%C$Elz+N@*3rAO)mr4W4}~pE?2#{)@y8Rg zK~`ik&BNRPJIJ%t&|>R*nlQb_8Vgz(>kn!#W+%xhMm~Yc_db>tNzC)^*Y)yt)qUqk zza#lX`$^D8-aM&f4wX{akAQz%`qeaD)3=rhcHg#1Jzjo|C!kuK@c%)wR(KbhIm_hHGbp5SVww>_y~3v%vE@~|T1`ZZ(*TaXuLQcqCI^YU*U z4P+fwViYeD(!2gMpZszKv(9g?i7LgPC(QN19eeIX^e))wJouffB}`8`&!nEY(jxRa zSHAG}L3BOHxU3s77haW~$)p~&`H+*f6L2(>dXSjV*fML6u4eVN%QoB|r8@LMsx`LM zd4SBW3Z-k0wj}5SYj?_4ORsqCdaUj%U4-uIYLm4OhR>u-&)dT`p7eP*{|Kv+wUcBb z3x!X$OkYpXLXb&4ZWKs`4J^oWG)3+xb&kCPHkr_WlW|X~L!b{of z;5hwcpBQ_^YQ(Q6;pCVdWSpTn()`{}PW+_S^a*@jFvrcAe?=6bnU7aqM zO3JKadG|@XoEW_go|uXsTd9jxpVa+lM{BmMf-RHY8zwl-J1m@;=i+P(dmmWlxv+a; zk;ICbI+wzOd_C2iM8t{u$Y0!Pxezut8vJX%$ohO)X+V5;83-lcoO zNQ>nwlUz~fZOoH;&yoP&p~TGAn4;y{bSrC_aCH9}9P~yex#(9v2go#+p9f@;3+dmx zpV!YhbU%acF;EXyJNAA_#Gfn7qmUsOTit`lE*JGaPtSFua3g)LV5>5d3exRbj&7IA z5=gwS8i_Zvy2urjD_Kk7?g{Vehou>*yiQrRW2}9cAv;6 zQURVg(Uum*wa(B9WB}KT6`cTGZJk(4IEjyX^i6nG?pUKYVXNon4z(UBC&6C?68PfppFoX9j0F-sxH%W=WZx&ag&GXZI8KE3{2_t;);aH5C#O zH)yc$)XE{?zMdS4H7&DM80==@b0@v^rQ-2OlD+NYPn8c%dy_z)YF~d;KGuHH?ekBS zFWtWXa6U#M{W$>Pe5ua`h(3ieJ$+`KNB0*VA+xhSd2<6YQKQHmP$#|1!L|DH4u3@K zx=0|p5>Y9sxiwAcS&6(yVqwk6zbfJG73y1kx{gC>ea(la2Q`%&iOsEGK#gQHNyZ>G zobKMEzSYO-5jOHe4ToJW&)(B!Q%jWYo}|9jXT3Q4+Aq;(VW!8ID2sb0yxH9w)wlM! z`=t7o&)qZCw|sTtYr`1|`0UIPpPP$~=M5*H9VlUT?!Cq@r*|Kf@VZNQXCU+*%S!L( zIHcYgorxr&_9E|n;g)aq&TqrIgKHZ|XO(F-d;xibU7=WJT!|u;EyC+F<2{8kea?l# zS#*D>cc)nTZ}W|Bhgx1 zCOOsK%+417*`4WoDB4n;NuA!EEPd-+@2-}<<&5%H&CIsq-5b-lI{U(n)VJ9B1Y|-@ zyff6xA2P`cg^1!1ndHr6mPYAVP!+XMde`ux&ll5_-u30obhK!?;YWX9n(RN*}ma;Z)YT?$MT@>ZQtq+`r-C1chD!dZ@Gj1xqZux z1qI8C+JLaYxE7)Gy@p+b^qfn^ZXNamO_eezvD(3!JVPv0*p%&BglnPF9j9LZ+P*;^ z^qlQm?o@shcK1y0=W+JMrz5;`r%q@Do~XJLw(pe9@0a@DO+{OKJ9XAe+35>x+}O>zdCTg0&^aJrM}nn|_&%hf&VKK~|Aj^d zJqumxtE)SH?hvMu!Tc^Px<0@uueuKHuJH8@_gS~{dyMrhf7pAhZ~0l-BrC*0=hDr#D~?#ulvm5TR69uv1%|dq0=awkow1xx!FGy@8pU`bu@f-fn$sKWF@~ zgKo8Rcbrw9Hs>vw-@1F3nZ$XDuStq(vCFi{Co>3NZ##eH$~sl*GlXVJ>G)r3N%+Yu zk+Qt!){K_^g_?NVDqst|togtsjCV^aexUw1lX$8PZwg`nDG?Oq1yi@98~oOlE`i=3^~5 z%15bh^D=DF?<-}D@(k)53{hS}eJjB~yTfM(rk|TpcW3tvhA2OszLpU7+38yeYLA4z zj}ux)UjJE#>H8tdzou_6^iHWWIW@%Z>j|&Gy8vl%P;#HS`r~hr-^`n^hfAT+5!AX| zC;9*ygI%xIb!b;7z~dJiG@o{DH#2!N>O@v|W$3>zLw$*Kjm%4BR4UVRhxOEtHsNv5 zgzZ8rP7$ujscD;p$Lg+W-UZLd)-qfP7QX9Bu+`Gf@Z#R(*C<*QwpRAO8zx*vY8lkE zKS1%O%V^e$&yV*`$-ZHzms&)hXO(`Qc%^~=wv1?xfWEaQdbPfgHe8F4mXWk}UE&U3#&Ri?Gs{Md{5AKRcy0a$#8=tkl&=0SzmAih!{_lO) zoV^qvYSvhLqV>dbbvN(4Nwo^tH%v*jI@h;Syz>uUg%lG!wI=-xOts$EH&{}w{rxwk zfSKMMD}9|qnVde8zF*Q=nUJy3Jg`+T|Dri)dLGQV9J-#arw>H&;q;}nC(FQ|lFDB- zc#0348vm(7#9NDJ=r8`=@OaK2;_RcSn`L^RN!HG+7LQClBEvHh>vv`zl9}z?Pe0x#rIX}@p@!W7rbCDraJRb`3kr*OVY5r3Vt};zSVc_%VIdU!@{H2BM z>U}HCtCvUJUeveJR69s*PwQK0%$xLbNLatcmUo~?y4B_!XJ&=F|9hXYi^1tt@6#JK z|6+K*o*bjH=o@CY4!0eUlFtR=534(NII$)Z>!lS-2*rp*BG;#=hvBlmF)t^xNpX){Mz}RgUn_dv0^!{^LyckQd91 z!V6{RGddQMHY38f<4oS0i5;I?jNEhiqVybin#!m6WZ>iFIMuyiUzAMHH$17%V1`H0 zjm&T*lhUK;M`ooTu(z~fsAvv}>c`nWvB1e5LG5XVX6$&W!2h9*Nyz6lcN%-y{0w6={K*RGkrWp&%ewQ|%N z-g+_TK=YX(U6ZG}UBUXYNav~VY^g7Q@n)x=ygxq~#>;oMvv_lzd^b0J{(Z+;BD3NY zV|hPAJ{@PObAZ%%fOC*jBcBI5hswK{Q|??goX@WDe2&WHbK_h-ceU_2^h7?dTEXXs z3;5h^p8sNEpKaw$&dGfCnCHAUo)>NAv&*EpY8KC@Oy~30HGG~~%;!_)&48nM{-sHo zTf+0lCe7ED@jPNMpC6c%&8E!#Ox{Najdw;kRn8Hz{?#fP#+A;^&VA0GoOhg|u?ew; z*vi;>u`6RY#C{QbB(^v9W-Jyjj8BSBk2l1d<0r+p#y=asJpP^d_3_)|d*YA9UySeC zHC)DEl!UPoiX@auD3?$rVWNcnB^)3@#;j?Ygy|9vmvE$nS_usjW=ohWVZMZ8B`lV( zM8a|j$4mH(gfG@n}KBX0M7DBUp&Nc7nnq2ebY%51fk+#aGv{Ke2NZ({qE;8jbo6i=L za*6DOaGc}hE*q@sgr0*OY8WQxcx0Wc^J^xSC`nsJAKEzQxJ(%`y_aZ%&rilB}mC*-tIW{4Fy6q-zmK z^;_H1@@YPWo3SQ-X|nvKN%)o}%Uza)Z<+LLy`tL4YJ8;)N%}JKhAmu6sFavGuv7bII{q$*l@@b~jrhPtB zYSX-YYhK!DpKRM^3v~K!w!oq}8l@B+S)Q~{nG>3>(ad{V4xC!sT*<3_#gm;Swr%sI z6zx-HhL$oQwsC#BeTizOu`&zD%8iwoq9jtox<6;F0X)g^Hl%A=()YxHU1r|=ys zt(RQmwTP+HO~>Fn$P zpGemt>9mv#@gNhvlS|xUr_dC zl1j%7O02OwY47TM({kVqEy*%<-q`odI(^o;qtA+U`m8u%(^HFmW)9hB=8it=oY80I zfPLQ}5Zdw4nXPFQbM;wqQlAya>@(x8&x%v}tT>|2iY4~hO|O`u?{&QOS;yHvGt&C3 z<7%H7S$)=Vw9jt&I)eIM$55YjOx$OS4_Qu4)jNf^7XCSVRqU2n%(=C&I4AD#=E&Tk zBA4=1pF2{XYN~E6bVPe1&H7}_Ci$&t2IQZdt51(QXJqM9Ywp@yTfXD`EAP-`iWl?t zOFs2DI9FJx{nXPcV?ffkH?(W#V z$)~cM^OAW-=kG{973W`=e7ZPyWR45($egh`^xuKzbCUVIESd6(+-iZB(Qq71Rh5K) zckWyhb8F$V*++^beQV+E=JSChq_eYXlRf^!+&Zc4Z`mJY4@~B*$iLd8U0~`uIQjO* z+*!$|N%=>93g6$e84t?8*?j&Y3EAVhE6k|>D*5}9yx*8ImzvMFKF$Af_LTg3^KMbH z^wpxfXwQ8{q(*%@&dD*QJ(Vo2F?Wf9t<8MCoXmM}{xhbem`VF5^Za5m$1AxfnzXNf zI+ibHyW{qa+{2P(Je0dEnd5-mk@BP%JjIlypKFsTKXAU6?7^COl+S990p z4@t&8=H%s5&xqvj#{99#r#JEznYy%c(if`q7$K<%oeBNn3 zZ%>w17P}$&^yk=1Nyu)_Szy}oOOx^^$@uxX$C=+>Oa5-ouS=GHT>k9j)5`pL_9^c% zllph&^S8-7oAaJdKD`>dH~F+8?;(?BNit`CY>hk_yvV6Gy|5t}b4va;(-Y5{^k*jD zo|=Dd@@Ze*q))MLNDjXktC$(FgOj~{M*an+j5@_(fq|Od%vRjnXG*@vq_{L$s-1tY zCgD9d|0~Iu3-iBjQofOlxhn5{lmFTz-gM@Dl#Ce^d&k7Yk}+S--<2%m&Ai11%Ccn4 zkMnYpPxs{wGBN#`Batr zkGx&GEVk5UJ3H&MoK~?IwAy#~%DW!~}IUNo`j$fD+=^+l%@-BEdO<#|P4D*ATOPm0c{x~J&TqQ4Zy zipLaBDL%UR3sv)qcUB!=ysr4_s?&;pRCPh|<;9OxUQ>K~)lJ2B7XPOBiQ+#Ozghf# zabC&LlKZL(OCGNpU-GA_zgHbza!kq6lGP<=lw4nOSII*qPnG<&b-<5WkzFRstQI(jIn30&1XiiKSzbbK7 zV#fF@65mPOkeD}q#rR(&o~hh0{-MP4iN937mUut0eSB`&h_dps1IrrAmX@t5JG1Q4 zvTv9Du4FaLV^jpcjF zA1{Bi^40QxmuFQBt+;f2amB=ntHvK%(OA(^v999uijIm)E52EAdbU&0~@%O#vB zVU>h+5;jUWRl;@&XG`di@OcSel<*Y^UzP9;3E!6RT?s#saJ__^B>Y6eZ4$&j(R8%P;Ux*LNO)bsKP0>@;av$INQmV)P1zFqNf<0)xP(y> z3MG_CD3dT=!XyckB}|bpO~P~uM@eXqFh{}y35z8xk+59Ci4s;xSSR6R37aIeOV}o1 zyM!GQ&Xe#Bf&B~e{Ur%IC0r@tn-abw;d>IUm#|C1k0snD;b#)=mhdYHzn1V@2@gtm zOhT80rzJci;du!!NZ2RgB?+%ecwNF<62wN-^pS*kuG5qwAz#7(2?Y{HN*E`hSVBTV zm4t~BswGU7FkQk72}et)m(VC-zJx^*S|l7N;WHB2B%CB+gM^I|PL;4-!nqPUBwQ%r zVhLZ8aJhslC461NwMT6l%pXVJeZuF#Mmjf7=l z^lMqMbnVt{8@6nAR&3cU=GoJ>wr!Tr9qnt6J?W%vYfsbX1#Mz|->~_VWPH=swFgbr zq)l74ohHvGZP?tlaq;OJ*CwCZ&d`VB*0ybR7Pf7Yl8N2s)QJitdW5J9OP%_yZD(!R z=rmN%I(@6t(6+g4O`FrOzU{R2ZJXqKgA~?q`l>c())M(&w{1h4Gke3y8=ScUp>xcZ zt!w0K{v2oi+Es0v1^fkT&)l$ji?d+M#x+~Ex5@YBbz3&d*VZko<@Lf9K(S$!6w-tl z`m_z3*UHn@Hm7;VR(aXHW7}zKH;Hn;o;I{>-Li3`v!vNs*6ggHZx*jzCtusd7Kv>c zTi`7Dw)Vn0^NcmY+7Z#$tzA&9jA~6>C>jKIH?=-ePNT5^VOe881F>p-Y!uCw64a*1 z=q(X_PHl(O-YC!LU)CyljA-?gAU0UZg+;ST>OtoQk|n0brKU7=V5~>LpmwhYQ+tES z+hAJJAlkblZ?RTlHRO|WW{YmhC(l?1shu=vynIsfF{b2s=KVbLe!eMffvIJIiM4i9 zYFS`fjb7>qe6#}l9iNonWcs1Wl%uv)taaENNP{JgPi(PjVXZT@)S23`tI|?Z)|u8} zQQ?_htur-ZKjN7Z>Wm#1TNXW|y-i*9rnGufTD>XF+KlP#dTBAAlw5D%sW;`!dp zxn`PNGfnI)1OF^j@@&%&SO*zLYQg5kCm4v;i%JlMea1fE9Ix<)fnjiz;t z1~x2R#Hzg<2(crBC-n9llSb`8Soy#fO2d}SCzkkQOzp>*H(1WVXKJ5kQqD8w%ro_> z^?jZxA6pR?G)8K^^a`Kk!luS2ZNwtYClJmzwa+&_iDd)~B-a8{`vTMU1*Y}|Chr2t zK`fZLz`(h{l!g_EH?(CzvNT$ajfYRl#Lmhm{khPTxzIqh(3FY&n)j4|Ee32SFZLHc zX+=}=z0v{7#}?-Z9Hhj8%_n_`wS-U7V5#8~7}UnzY*J#M;|)F2Y;Zs=@686DW>Z(Q zKtwEMViD()lABE%n+?`s-Qx{2rNv+lHgldCwH8wg)^ncee=O&GQZg1lKEdP`Q^FFH z3)?g{b0A-8Ajf{rGi5F{Fk?x_ibq|#mZJ9T6(-jT1OE!s12wYJ#~LFmB~VY-s;YKJ z=nC(xO?jErrRnUqwTi1f3K~GXU9-XF&hLigd+59V*7Vrx_-)r*n1lLTo}`pJ81 zGqYBEu#xxH)(9r?+uHJ3ZQ?hSkx}Mbe{1>R1n>D~1Q(h4cb+SVs^D*bTf|{!!K} zNxRyaB3P*_1@<><3G_G|onGQ3Ao|RW*Ht@iD_$*SP%8D$m0#`|Y0#&&W`yt~rX|$B z(fE|o9&Ons)34eKwtR)B##7@8Y3D`>P+#puZZOchXy_64A8^wj=N_nBGevrX9nS0t zSG-`{=^gfud0V5k?Jqdswou>6=>YQ1j?xr)!gH3ExbN7-eTsq1eK%9;*eJo9u2Isl zU&8y2wrrO&z3+|{nAzRte+O#cUeFjqTanB_K>h`hjzWXyQ8Ymw1l z-1MFI9#HQXaa#cQ1^BU}PR_lIB;kiIsFw2fQv|aCgaL3($a*j>wKg-6x_3r6hZF*8~;$jr0 z2z9r7%kIb4_v~`tWGIt6N?;&Zb(*2C-uKFL;6vU~ReWPd9~90_UoXF*;@r>af6qJU zp&ygL@~u*e-p}EdGe=Uck{G4u?)!OC${CV}dw0F%gL|AC$vpDE=WIvX?N7g0(!yic z2&eX@SFdY$r+#T20cojDz12A8cbQ>T`&*x608pAfu2G)b%uCLn=fw}(`}*Bkf*>`jbS!I z3v_hVhj#3()oXCyJmLC8aXseu^1 z89GS0>rD&SOZv5eJlw_$ZZSjrbR8KRIY)Q!(;k&wp=Y+A?I_q7_z|P2SmMn?%re&cE z8o&$$lfi3$o@S|o+nK;of6P*O$A0RwB*srUz!EeFN(;{II-wj|S}=y&MUlwEc^D=3 zXoq831ZsLH9HaXw$m7>~pv&lo@bh3ygNZ>l492Mc2a;qkMzvOC$6yRLycQ!t24mF2 z$S?bX1LzKCNL!f?^tQ_KaDfdn&fv*5=^>S}{B#7&V;0li;2t_;iaNoo78B>Cb6`8v zCyJtK9Cd~%CzOMHU?%l>%e3@{v*n`WPBxH+e(ehScn4>OS8TCbao*}hucmZH`1W-2FoOl+qc2jU>x{OkE)g) z<{so(B`L_~A9s2i4jUbZu8poAm5{K*)hu?OpGmRv3`vveF>QCba@eu)iw zwox#eUJ25FI52pGq(_fapDhy&hEk!1L1}fa#84J7LEZ(oK|<7^f;td!p1 z+)*gJTjmne_G+=+xO0=9Vi%2KI`bX7@LZEG9EV*E%c-B5*GUOTd+>)~9NNKFGmGF* z{(P!wGQ+}goF4?uQoQ!(L-N^XW>GjFnhqlr#rGJCHBu_4IRs%rvV?b9>lL=IErJPa zjWi2CBIb-xz9vbBgrGde4=3Xbjw&4t#z6tw&3R=(SUAIiJl2-vg=MM4(bK>h%m?36 zIv<8}g~Y9sSahslJ}h7=i^4mC{22VR5^XRJX-@5aVJ?a#;&k~J#bIX&-Df^QLxQ|~ zp~L_Wb1WFgZzy?Goc6ZbgvsD4ilDD?Rk`0_e#msaM+*%)3D9g-=)<@YhQZsRRdf!Mw;d=&i`Q8XKhh zPzbCLQ53vh@-f<$-um;ZgbBsf-U!F;NYY543dX|MwN>F*==mAai#l(Ed1nf&o0D=( zI4{y4bX(^{FfUwQCFCeh2S#&47pFRhONO5@3$0|~ZxOoQN`s@wvB7$wHrT9LA&8Cz zUTADoEYuIoi-MW)_sTndsF)*^4CM)zyjUR8TT`P(pI9(Dx+kGM+zLoMC0pLe6Wj<& z0nYmMOXvWjy3SZYg8G$G3ErM!%3bFx*;?dRip4_9@Ybt5f*xcRS!u;Wr85k97)k>V z_U0uPu0=0}IXZTKI4k%{U--4(Cc!p^MzPKh^CF2oO9HwsC)@e!b$J31QL`5+OWkeF zI!5jZcgXisWL*zB&kecc4RdMN8sygqgLX!LthFtHd5o_=)=!Cp9Hh>)g!V@9I%I&2 zhTN-U#LeZ{aH7Y&e!tLYH7HqGRa`;0nhgwde>#3DwT$ zuU#cpWSSt2ohQ(2k)B^Eqqi_39*LeAt{4)o8|tHUfOKI!+-mjs{-6T~yg&ae$&V&L`z^=z${@2%scR)K zk}c!v&)+CHDIHu>S=1k|dJpTPidVt>=+Ni{^f5F#7_TxnrNe*2@e2i)k-WfI%aOeB zgOgjNg}N@J)X*E>BBiQ5{uF^RtUE6=@Ub2MEsf&;&^3A%`Cj4k^IB*mm<|1j;^V~c zFwoon3+89mkQIIZih=59p!n~Phc{t!r2Oc3J3Hv1aQ(-c8LBOaisx2Bz3F~KWdAIdSY{4wj2b^M z9B!b!6t16{p|ckZNfl3=wU7DR@7kWBlH|A2l}dF`AI1+DwSR0pErT|1G7>WL*T3qv z#MHQ1V&SDgptg~qtiz4O#DV41AB<;)(Z5#53dSQV!HH8#OGp%}KW%?lnu2TU8I;r? zj^|{Z-r})>L!W8Cg_hZZWz`RDFdpoLZljAqNrUo@%2jCf%s=R#Upiv#5O}eoFh=3{ z)6Kkv<3~wm^(Hqpuagwv`oRG#F{Drp$zMNunM#wk;_#M#&d;wZQI`SLw>ipVhwhDt%IH+bS~x zz6WQTA|*3_kkOa{UJeU}K!23W($~Qh;4l^zdJ#!Lxv-zg)JY4W@JQ>?bO^e`Oh9vu zro_x8ba+-OEiLlb0-eF{09bT=Dab8n%6ojq&=_brZSj{eOY&|q5J0h_IKnK+%dCUn zt0WyR1DQxAnrN;GSA$JWwlIbToON6UrDtF+)Y(5@X385RT7@Gj1@jo0Tj8)g6Klsx z;Su!5N~6mKxn`=Hrd_@aMTxpk+D)OHmvLh*fMvkXxL7z+-76jBSLnge_f68P7LzT` zD)mrL5O|YPVrmJdVC;Yf3y#`J!#q~ySfn78^1~_U^R3dO%wB2%EBBKdb-+_Zsq!58I97yRi+GG zr)T8+wQzPCYkr&>NWX$({uEYf#*Ya&!*IZN)|mN9pDQi&m%*s%d_{uAlPp*Zc&7F- zFjDGW|W^tbB;SUNhA$0h_?7s&|0)0wN8K+L3<6H zfxfbmUX=X8 zABj-ybiow!3|*l;^oN}fUaqYa4BcK^qvPx6?DHijc!p%9d^xONLrqylh5Iu$&@E<` zw=Vh={p1vb*J^DGrUBd3ih!j@=@)7IoCI3S+#oHyMBxdh(Ku?P zs5JBtG2k4uJvt5TMWVs>#b+4i*~ymaSVZffjb;>BDNtP~YVEvH%0Xu7Jq<8Ge}Fn# zjzS{WHEyH_#x)Ex^F`aPa&Z(lT_Cl9$to@3eG*j;*sk;tJc?=;(g8dV9A-{L%Lj1( z7Blj+ED9d%z+eZsrrs{V6UBLHop+rnDh<#;(V#4;%7J!)JweYnyj8XLSISB{b3?re zD97?wi{p58oh49WgHigZyq|eHMdSeOKk%5|W=t3_KMhqb1--#@Q&+lzX($PqM)_8> zE(fen*gE5KLv|6R1jR8hxz5K-*O7VIK>l zOId!(363Z=Tq(PuEYA<7vh-}Fc!5Aiz|3%2SOuAnYs|c5?4q;_rA3S|^Zs;$q2aQy z5g=g#o${e58liHr@_%~nKLTOMq z)iRmE$RtRU%xPLdswm33K+54p9<^zwO0`(Z!CpphDBfGj*(`6?NFguWCc%sH|D#j3;hDO-=7*2&mquy|KjW((*q&}s(U|A|nszu_| z`;!@x3i_oIXLs;vDld1lHYmn;u9QYAsX53iG!D538=LljSYMeZxpj>g_+4!x$P2I# z&|8cuE##YC^-^Dz!GVU}q+cyJ49=oiQs+vc?TM1EXg$5bC?Q{?pXeO$!{?s{_8u^9WT93$<#R!tLmSuK)ldwtToz1esT4fG+p<&`vdUmOR;=E%X5?O^3@ACP z)zAZ-o8fYUV-HP$?nlug=mAs!dWDZLtwV;28h^KC%Hx_19VAB>28#h;zq?+c8cUE~ ztDFI~)b&X)1r09>-e!RodWpnmt*wl*Vqp}AUvo^SHY-KC7%v3xg*qc!;(7AzBvnsL` zQF-8Rj9V&?i>N&8jKrsy)L3^4w-9EPle6P5rX{~&Sy1gG!Gr`sM&=5O(`NY6x%fV zCUcziEbNfbq3{T#&exD^0rWncFW8&@-|bR+D#;+KM>Cg{qH-^m5m(6xo(Ii_;zV(! z)U8zs)yjU+>%LKSLr<6`Ym9|SH73=Qp^>M@|JuJNzBm4M{Jr>zgX{CZS-f%ZYyIEr zpF3d0fbsz~1Fjx+WAPiKj?I5?+zI(-58jafO4&`rjv8?Hut$gO9X5Z!vc&DVUmX1U zuoVM79JW3GxpDXAt{?FFxa|WzH{gl^oddo#_~TInhyQ4B(ePUad_3-+;)24-!)FZt z+29NF=MUeRUtTz5^a;bK6<$65Usdmq|6S$s%8RQ0UU}E}_R8;7{jw^js!2N?iESp{U^x(e^7+OBPVtn~agEtOeUU<&%e+|BL_{oI}Dy|;> zyW*RM$A{cK{D|_QLz>DHLmnO8JbKOO(?_3@_`>M(6E78?Q+Rpd-r=2v?-sv4yno59 zg}*7BGUUVIM-3@1Ie+}x@{22c)Cl9MB zIc3PM{3{a;B|9q48d5akk|C2vEG_v%;WtLl81c8lZw}c|a(&`QqvwzKpzxfMJ4b)H zA-^B; z{OAWut{(A&^4CXyH2S)Vfkk(g4;~XAcvnT~n3^$lV@isiFZo@?fU?K?mzLc$;_eZT zj;Ja6%aAuq7LVCG;-IqCV@?~hsp|3a`l48AOVNnZS1LX~X78wziWNI z@PW5x_sbiZ_w_NQ1$So;>o;d$X}_fd4=8vk=g5M|{SNClzhKS4tpjKGyMD}>Ma})n z^8S(YK~8JGj)B#AhvjYR_r;>0kGVg)EBnI{#}}MjkdwQk;H-YL@)qS?KJem#g50YI zE*w0e^u)Yf125{gA@An{PtW^mzrx({xrdiNG-lw)&*t4f@EZlsjk&hpWqAuqZ|PSw z^6z6Nk37C?#>gKQw3dE2W?N}pM?0C+=oKZQ6oc(gXm_03Laqfw^>vOl|o|k)6&YYaZIVa?tl+&JbR?g>g z=4Rj8e{6QY>^=Q|nYTE5+t{}XJ~y^!pfmKQkslAdrReUFUmN@A$h{+9AGxP!;GiFl z{cz;KQ6-6@QR4<3n0P4f!G045{cP+ZgPts!Iq2zr4~~7Y-{L{7gN6)!I`1F-o*lb+ z(7wDk^3ECbQqkm5|1SFCpbz`KHnwEwHwVoa^`EixNA>GpJ@kizW(*xT?zTa{9+Y3) zHK;6mqBAr*C;M~RmuD}?zN3F-*74aBvnFRv%KlZ^3xkTsjq3mUpaaIepLfEjqsPq~ zx?4e-|TM}0Tk-7F3z8nzbm(R*rx13*}v)kxA>N<*W*jGPmlL^`a8o#(vAs5JTvx2 zd|B)q=N#w#*nZ|-qQUX%SZ=Jrc_lX6`E2Y|xrb<8?2y=ru~XtDvERiXiJukU6+bTC z6hGN1j&F#4IsUT943EbzirwJ65c@*>wD|L}uR52+N5|vwkDPw7SL2(UZ#&n-hsHUB zeXsMZQy_Jx`uBIIE}kdp3Y<~SyYg8X%ahN;b%}46+@$sYqlB+WnfC3N*vQya z19wNfz)48xiG30qC3#6h38S1t1>RB4&GMNOFBGV>PAy@SGezE?Atih__N?SCaPE?L z+M%DrC1-)0(bEzu5E#ibP+32A{@obMioNAr5g+6{8oMnvEOywiL2_PHk^FlmR_k0CuXV19 zKjnNaeviDl$N7x&d5Ik)=LhaD|K>V>kmuVa=Ew4HkVD=d%D?+!-*>(*zxQ_zj!%wn zlPCTiAa@$<@9c@q6bL$<=J;pi-DA!-B=>LR>0x=^68n;rxlaDgmpA)MO+Yfpc}U?ZkjxpP@;W&ETV7@PUO0;g8`RsY@K{9gJkCZ9#7*Xcv| zA15reJ70A!ka+$zI2R|M^!NYrSrPA&HhnQR(OD4R?yQf0;2abGUTnMb9cN+eV(0AG z>9N+>b+P5nEz;jJ-%CjoeJ%OC^ub}nE_ePF`%!F`+(Pz? z*roBM@d5Gt_=EArI3qJ(aGz5+zb*ONOkOa3l#EKL`4n9;5;S>2w$mMA~ zXGOd#801+A6EGgGg&ZZ~Mmd|_sXwxVO)X8uDYbCgSm-4;iWpTyZ|IiHnyzq>c-}FVg z_9mR2a{K1joo_i;i_CI^vs*aKJHN`o!P)1$>hw78IiEOrvHl_<6~)Sg zJ5Grm96KU*RIDzxYnPnC-@RJG771rdxJbg4622?pMhQQYaG!)HBs?$S6$$^6@QH*0 zqn+;25-KE2k#K~BMhVRlR!TTU!Wj}Sl<;KCVViB6Mm&VQONL9Qk>_%`Q?zg_{}NfUNKZx8*@#WndUH24@fb+TUa?b?+; z#_1j@Ve}ZMV61#kk@(wAs=21)>}lU``tYgmJ3k(IUDuS`uj_d6-#=_x{q^geQP2FS z>+5IS;9T{KU0sDMZtQscs+*dQJ>q63e(o(@7Zm-t6-5tNEy|w9x?pvKV z%Wmu1eD7@?Wm$JLeeZjBI7?poS=ZAS{@i)){yV!?ob-#1K|i{y>GH&&4 zdpb@#`BzQv^xM<%{``BJ&U*b`r}}{Vx^8~#zK+%*zirxg%Ws{p_T1k!V&?tGcV<*`P(g>D0j}79;=c* zS|)w9M!w4=_SmM@uk@VRcvbu4KVH@TmAkL*nX~6R?H^xqP0xOv-|e}swX?#^)+3!iMyoA-O? zsmEXL*?q#ldhR_l-t%BXmh;Ca2KCImd9btM%pnEGtuJVA*gmYI{-ogr=d2vztUPuk z^O`x`J@>&=Z2QaQT~?s^q5|iLLeEQsd z`tlQ9J8tOeZvEWvnr{B$ldY={`CC)<+kb1lbHHm|txvz!^TF$XcQ)Prde8Y!yy5)w z8*jG%boW0xs&@4B{PinuImfN|XZyHq|LVB(h_~CnyX2jYp(X$BdGe5Vomro}+nzh- zedpnQ@An+`{s$c&{rW#W_dNe$#|77Y)c()AKX&f;!Y4gd*Ek)ou8XxFcYfR{o}1PF zLR+@;z5R1~hBoAOJUuY4eO6_@)9=mvo-=d$cg%RAf6qs+4CuJ`Cj;9Ld}xsK&J}}u z*6bS6G4Zs5_HTY^sB^-SVeQ46hdcYGkLYPSc4Wthv7>sf>>TaP`CxR<_uI#Ioc;XR zo*8eC>u~NVY;S+M$eH%t;-2r{QPQ!lqqO~x-$*!DwUxD>a8|jKm|4+2VO3>Eb5&LQ zeKW>87v)aq`FHWej$gbovFB`OzmB6H-mm?~`}TLX-8i}D#a~x<{P5BPx`%g8=^A)S zP4_$JAK3NgF;lz$xbmQ`uKlKU-+A=GUAOi>r1cLIr#C(Euj#En&p)i`Cr=&L`t83R z-gMEt=W%(Xd(F zi34Xho!mXUJ3e$y*U+EM>3*qaZquEY9n%_nZeG_f+vayKzhr*X2S1qKedy`UU6_oT>b8f&OKGfC&oN| ze4@1TgwBS?Pe`o)@Pxz%x1E@Xb$q6C_f?-sJpIsT5_`Y8GVzy{t%>DZTRYF`Z0&sS z+_psJ8LK*K)0-hJfS&O-}N>b$0SU84J~b)6j_t?#_(!3~|O{&aHZh98}h zIRE~Qo%1f58Rf>n|)eh@X*scE2eBu^z>}+ z%o%cK;>oTvJ70NoN8+~KXLUaG_}QIZ-#RC8>UHOK-n!$w#0y)`hfng?`PJh(_)hFP zRI{9uAb{3y1A#~`diwM?fh|1&PBU> zPPybK?d9#a_66?>c3xUi@Y!=p3$|`d6s$g>te|CndBLn16$OV(t}K{PR8=r$;P{;l zITLnHduPJVs+TA39QE|1oq50AZ|8fr?Z5NYA57l)+*hl2KJvK(cHVv3l$|%PsVR8& z!~+X%+d9?G^AGPlw2-_J#EGl|8s{$Kj1bFTAW(Q*k0 z1g^Mv5}tFL1UK%N@QC2aU*sE^r9=XFTP*=Oe*F`(FX*`RmPgyST=Q7R=F1;%Uv%CR z7T0U*&fa8kop0nMZLh*sJ5FB6-uGIe@39&+_JFn0w=r7;YQz`+OwOoSp z-1qP39(|2mK6h5E`~7p{UF(j|>OQYEyX*BMbGln=bDI*SdENDi{H|uFUw5U`zv-fV z{kwC!2Q&@*&A{%z{c2Fx(bo-b&ADMn)3z@Zw7zoj(5@e@8`k>J`r%#sA2Xu$#yKOK zR_;Hl^|FbhyRH~GrgcmH*rxm67~B1&x5hQi>niNt^t+<2^L|pCnALHpZ8I=M&TlVG z&CedUNlq!CM3iK+B#9fBni;w?NT`9 zzx~_U7uf#r)^};3z25qENF5hSxJc@|M7|m4t2eIfeDmLJBHg=xytnfAOYbP2Uy=Nl zDD!9K@2^QYS4nx_k#G9S+VSW+^zShe5)uxO!0iPW3$Pzch)X4Md8e`QefZp)Kk54R zuWx&%@hcDfe&3Wg;IG0iv*2x?E0+)Xn@H!&A9h3jqQ>tAf#D7bcL_YdlyACzO~+ra zXg~F&VXZHWA8uR7d%+(wZ;F!RV#kMXf^FYpQqEIS-qZ3;zhGtP}+V>d!qY1k;9)@T;82Ev!W+Ht+I7`RaMW= zYR9*}wQy?tAu|u^KKbBj&bPkP)bVV~qK?}(EVk_dmgIa0OBr-zvM*0yfaEXORy#Mm zxUx^$`;vsbBB!9B$kkuFFFySK)@znO&|Uug1KlkzKHRh6=0^(Vz4GYJ(KkHijQaIs z1-l=8%sKdbkE5%0|K$>+tG13>_+-zY9~jhr(Cj)K(2p#`0V3s z`#}+c8+eO3CUyIw-0^uZ$e2DiO*x%;*6R2LL&IKX-J+$jYg&#AGn zojK1>pTXlS)uQ7JK|TaU{(|F>ie9_C#FaVfvYpmPMdoM|xHd@GA~0^1Z*cnv2~84K z3qX8#&AjB1+NQQAn@;`t$F(g#`lPA(n@;T^7sr|oJ~O^&@u^u|i`ugHOk0%Gbx>XI zo>2$pb#1yVZ_j%L{hD6Ax!<1Wdir-g+dZK6-Dd}O-L+>>?X!0dZhGd1A+>jXtDxx@ zmkh1_&W>SCS8o_zd;W1Fn$DX$vbOE8QBAFrM(;Vdd`we)zp;B(#>eex`scXa2fbLh zXX=whyGQ=Ic+ZGiOLo6|ZE0=e_QdXIKU-EiX=!=QzfZ2H9dJlx%`?YT)xI%ue9bTR zo3N+fClhL}?mubI-(Q$ibKYzF?Ro5;{da%+smXhOd`d?C55&j`MJQE=pP34fOGir~ygNt~gLGpHwtGkXrX|NP^c*+2TEcGfqYnu!<3YA2i--#zoxtUV2F*}KOt%Gpy@m%BUvz`Q*xFU#Bg zT0y_s=Wp(}`_Z2MdmiZ?Q1j}u1NYp#XHd-}cMh(7_=X`hH-D?3_NGgQ)_i%#u-eNv z46ix$xDmDOb4S)RA2zCX@ubnax0H{moz`#c?nUu&yX*fsuCwaJ!rhfm7Io(Rx_Ec) zttFkWURzpo*!D!{BcCm+DO_5f_}j@9H6I;ZnRxh^s+vEK9G|#pzX`kl^YMhl<^3n^ z{?iMS678?;xBFN3?B99mQ%+8yh7+!Q}&BRv@O}z7;!~P%ko&zpwtoc|F1eLWQ9YT{Xp(8~i zMXC}z-dUnz_jFZkXNz6$ymM`5Jzd4#h#dtrcI;6sAc#>pE9%-25dZTw1aS`(&%5uw z|9uyJ!|Y~vUy^BW-n@D92;GzZ__gc+wh0@E?@JA0brj9wr%1wJd27ejMQFa;O{Fx(vc2Ed-sK9RWT7a>YNMM=I(A-taL!xMA& z6Wjc*6NQhiv$u?M@Xq^k2!o;WxMzETeZS}>-c9Qjk-)uHTGV?(xU?z2 zkDn}HFXfa|4CNLbUkZU7H@;gZ`-iX zeeLj*m+go#454gg?#|+!Jn#XvJc;&xUijexFTxV{QTDsw!=8BUi%(1OBktU6rgWL( z&%RF&P}Um~NX$JJq*S$TPV}BaDVyPK(DQuOpVVNFX4FTJ0BDSY^o^J^Z#CI=>>l=%$zF1fMG7ImoWhMa+|MTM-cN2XNF}cQlE&p_ z9bk1wA0&-Z53zH;;mBWqJxm-8IKuH0j{ZxzL6MM8?Sia@5PW ztWQQE=Y6z@XqQ$@w%ziM@Lpa*dd+^%Mki@2huG?{yBF9f7szZ850oQSc7(o_y)vG+ zC!S%BN`Kao$Pk?HPD`8-?OCToer)Yg5%|QM2zGU0B;F&ftpASPuzZ+gLxX@0pS7Q5 zqq&b119huf$azKms@JJf9vl@hck%;9JkjJ)`MBFN;Lj@n4+~82wZLSNfDyl10E7T^ z2lyxPi+o=(zldk4B&T;8$zRK_>WEV{Y9hl{%CGiE{y4w70)Kh{tN=&? ze(fsdS18;sioYQ<_`kp}iBFP#A)P|cU1fVFMZ~J1*jRP-J2ZCVtEfZe#|)={2j>9v zEHRm>r8r&+gSO@X_yhcZw{=`6@Gr7&+mk;$arl(2lXNC!o2WC$AOBMO2IfxG7tj`D z+tR;6S6qP?1i(OmA;6o7fRWAp|IQC}-?RIiJ=vs*LuLI>rS^>dV9%QW0shp~5Q0^rFdfNQ{?`+$)QwFFoN@K3N~q?fThd-R+=*SFAtjbt6kTN-{s zLzd*4cWfcqGf9VP?pQwTkN5{_cR{1S8F%Q*_*33LC6`BPqhdILXJ1FQ$$qyYXW^fwZ3D)ZGeb>;F`^fzG7 zKI(6_d|`i6o)>3<{@PaH2Uvk00Qi5UuVGj2CrP5l?`&Aw_7A#(^ySa$Z;pM1zPJHj zz5^HzJevAX;L+N5c4d8xX@o=B__G{Ol*RKS*tQuFi76VVN0%QY!@&TiJ`bYR{5G$z6o}s>mym+Q;>?w_DBp$6P zwQs>di!b%3%j}!zwu!lHUt!~5VonGK2(`v!?E(K!_yVo>RTvwXsbSy#EPtTjE9_f8 z;K^Em&A^{Dz-S&s@yalTyzZ>Us*1I_#0$FY=|y_n+wFCTlF@ZZ*ZK8W_iyw$I#I@k zCe$YvbZEe)w`@on`!ynp?G3nCns9yxOV|#b>yyG?(C-QlQ=iB!C->u=i|;b?c~Ak(D&qIzFx$I0x#})V;}a>Eg$YO z#MjOp_T%H=H%9If{E{kkmQr0E!ZudAtc`>l>ND3 z7`ekeoRz-_=gym`Z6U`Ns%;@R?|L*5a5#p0zdn{QU)74cHKR50o{1w%H_mBsC9mE|#s`N;6Si31>yDHrB7c;K;(4JPxm5ywt( z&|U&SO#o(9$_n}0{VVBC1?j5VJuXT1Bw^|kwGWH(Ezr|I%78kb%50N3PEc$L`G2ha(w{|#Uy|7HXK3*zG_HhbrQIyQ^{xWJLE`_M`0G0>UV&AH&m z`nVE{luhw>1ibK8)Iz;{d3i*IGP)!c{1Ix&mQ_x=w8~VPKs*!yA*op!!xQ~b2Aw^2F^}jcc$@h4_TiGPo|)) zmn_oWo4M}cBXiRB#on0u$?Dwm!?KE+DH^=;$1d&(Q0TIO*srNUiu^gvv5Cuq73YVL z%(AI16l`1wGd>|yG0!cG=^hrYNYro1w6Kkk%`J#vY-&cyhG#}GT6xj34kI!^5aTDlD4(Lic z(CY=z?LA;L9sXOdX(_^UtR6pmK|KLmq|XmdlnJ*-*5|4A4e0mX8&b`QM(Dn!1O29q zyKoZm$~0ZPFHPN*=0O_Uf_~a!GJC-0@cqQUVg5+Ee{}t_`>)7ml|Iw#&&=(3!n3r4 zXX*kNt*KzMy3H2?R<6u!6Rs4@C$5Sg+;p|@zFSf}Rd0=OtNGe^k0)#C68rV>jn1#9 z1?`RTueWZbkKEgo*fGTmPo5O!Ry&ose*Gz7_^s3N#}sFT z4u{XiualpnvwLb&{61}ZXb&UGce9a1JA~1*ev*C_(G;>T;ZJQ}sjZ@{l$Tkw4h_98 zKX=v-=$Zud-2oWcae7+H3hD;f@!K=c@Q>*-J6@+*P`C2;C)sn9gN0->@pQ$qS$@pQ z!8MKpoPq0|2W$nu6DDr@Mb$|^g>C&Vg$#MNkC>dhpG@<+PU_@e=bjqp5PkRMkTyj( zi2P-_0^1C z=D@SPhi9y9C(dulJH#)hhSzW+yB>5#*Fp!H_k!!GX{XpP(oX985H8=I0kmUkhsn$V zcZT07BiF4^7^JRLI!#w9-Yi{($F|&{s59#fX4K=7Y(zmJ7Jt7;)+w_X^G|;#YnD=i znQeG4GhGZxVKb`9-i@lxm<+9e?u&yb0b;HC3_KKS&_Si68N5$b>N38urCq>dhXGWgkqL{YAm1(=PsiN-$H^yr| zQPn<1_T+>=mYQAVK1O!@ML0IjHA3=VIFp)cxkq!!YWa}na{g4jX%m_c(w{HNfzL2rU1+Ud07b0$uflqIMUph@Nfq^S{eg8MuM2mPEV!~}34)e1ku3WYw&8_U&X9v`A1Y*eoN6r-T ze8_>$}u&o&R_`kTXXdoiWptXlkDlI9z&6?xDPw>f_e;9W^4WD z_;Ynn1+ZpA0?C!fg4mMQ&B;3Rf?1&{N!FUtf_P`B9zzi~--L2KT7|PkLO8jgegu)U zHv)~Jh-r(W&=`tc#l&!l`(xQDbStjo($<7BDvlgJg<>P{He`ohZCOXG9qAj|o@n`? zJ!x#yk#IQGku0hnPv~xpCvV*DOytk}hI@PFTjG4bE?oBJt^^y|jXUsTclNA1&8-~R zgWXoYCpRgk7jdSr7uU72G+Drb9d8aw7KKkMOxnQ8l~?wk5a_JFDR%3pP4PXJS#9H{y^HHgWb(_AHA z7R+!%Ncm4wTQIBRLgYgdLYb*mU2(q2y9A0gxsKJ6xKU4O8(|fG#2sk zm;uup9jCfBn_}#Hv{CIF)Rw8;qMd44YaJ~8V60` z#A}9?zL$7Z-Vd{Z_8kD6;aW`rqjnX}FXy71B+*)aygpQQ{$qYiIX=?3qdBw@3T=f0 zMt)6CfHBn|M+6$)2Co^Hb?VpvQ*XLbp1pJxmUw2h>dllS=2G|?RaURHSXR4r@0G592po*Jw z2)p_XCl6!~W3#6oQB93IiVaRUrt0H%ocW>E300*2NoJ61y1aKmI@7xDX?aBEX{Kc6 z85GmNUW~|4Jt8k-S2|o#ox`tUd%drzlCex|i9wcXu8_s-F1fB6&Sf);a&zR0jW?Jv z2Xp1aX5D1IT_MQZ_rJviO}H)hiMqpBcFR)*cKQtqjJT_^@V$pw*xy%Sh7TZH|Do#k z>xbCwyN^`IuI6LMPCS<1I`o7QlAp?tu2eBc<~)5OXF(^1vsb%xep z^m^2kKcTdk$7C%zPiQmtKWWQ%$ZBIrTWiY~sC1e6f}V=as>6)n>Z<1LtB1|osIN*~ zBEu4A)mL>K(*Wz(zoE*nb0f?z%0Ok(tTATdXejr!Ho}T^jOE7FO&Fu+Ci0?NrcB{Q zGx?3f=1k6Z3;Cf{mYDuXT)t|O751!ywd%kC8!W@yR<$zP4%=VgB|N z+6-6;-yqv>;L z+SQ7DEEJE)fc_^M?z=nOe{aAjw$iHc{Ukcdr#>}!Z++UiaYKq))Q}by+4Fk_JJ3f) zIr3RY93@+ba7FPL&+Qf4cgZe(57(Lj*ZdJMva#}*tIM!}w=2-=_i&`iKa8o7-GrxB zj|Y#<6Wf)>0n&4qx8aMR&7}Y zmgEb4@PR(mS?L4q4g?qi*BA=e8h(#OG0UiNtr{u{JsT+=*%&Bt8a7s(t6``(_`*<; ze8)(k%rI8WJ!&F5kY*~|w#7`ga=H1Rz2=%|eUCuTgYM_E{FBySJ`rgw`DF+r8!sJ_ zJ(>v5nFPtmqkUf*KLTQt_lC8rlnM6mJikD+{(;D6&^s z;?5&+#eqpyc-@ZHvg-qE@TcCkvb1PB{Gve<*$O9n<>L~28Kdi{ypZcC>j`rv+YdS` zCS2gv=-Kd41g#w!=N}#0XDCt#)2`M|*F@eGebpPuo|fW#)&Q z-1C#&D{6)ppYWHR$_`K(v4OJ9sX@xZIn8B1EelrW3?UU8r?yZYj0;ixm=LN|x`ipe z3k%0HUWChj_|V7i`g!_C>y1KyKBe@pQLQwQ3QZM!*`Js*A3I*;kLJ1%^d7|wBs(v~ zdp_ufxVi|=m&FQFfp_l!YB*ss11C&CYbBKjQp9+m$*eQ7COt0U&pKR@J;bl#8Q#}q zXR%Ctw?UR{n~`G$qjj-Nb3GlxjOEZVp{NPR%d24TyJ!Bg~QMqO8Xu)6{>1lNVidc>6iGSzijq_KVNL2 zq&djQ(s>?D`d8H7x&p2H01O1Wj|Gfu(sux708HTq2LjOWTH(KL1*4t1Qeie-$vjxP zN>S2#HCAhCl0pby!>pULMvB8B9m5uYj>YT0#YXBB{^7W-_fP-EZDDRuGj7Y)5#zSV zmZGBv@aD7j^ou1)qeZw5>hl(qn>U2F>i8|P#})b7AZum5_KzS}3V>$-Z$QrKJBxnf zU}$3i$X9E?-&!A-hAjwOB3I2kBNWk>R2#gn39GP7`4-P2A>e+I{3cn8K0;{AjepXn z*T`zilQ3O+x=L3*P0$loXVsDSgCn9MeD*(Z8YK)VYz$ zG0H%w)2y*d&(V-}v^G*b)-k5_s+-7lpPSH+Z<)&TFPhO84x7u*Z?~Ygud-BOBXN5E zBrDbJ4%R~Q02|dYZ(Ct*w4G|5K@(xPlfC?CiM`N4*HOMU*HQ3&=p>(U(3x(Z;Ue$9 z!j<;f*;F1g!HqVWPgEEKI_Tk}s;liQTsQSoJ-zEEq!l$&T|D70tjG?KKS>T0nA9LS zKc~6Sb6K!_#}Ja9IJJd*L0kykBOz2i(k+Y*4GULoco8mica1=_`}9Qcr`9!B^qClU zvD+cqc4;gk#e1dLj%3Rv&jZev@!Jmg>i{sy8I#Q}Xo|Q;qYl^Y4sv$PxQ;DEFcp zWZ|-0YR`?EWL$fJH(mUa{9fx7#c;1V|9Wqz$TkJ!t&;`(6Wv0t(Z)i`I=_fp@?$Zz z>6AJ5VzdR{Mrp}C^2DiWldQNrJ!|SB=Ryj7T&an4Bv*4{S?&^|q1ET<2Q$^84lxHs z8ffZ{9)~Q)^1S?`S;34xQ^nythVwTrmJ98y2@lh zPj)V=j&d$nSC+i59=>g(zHIIi8LpUBUp9P9gMa#X0NJp_zUnFZ$y9jN1 zC$2;NBCAa=gt|?mRl4*jL62XMRfq1()#XR-t0#=usL#hQkqMn<)#v@kG!UBgZ^)Z< zZX}pS8So{3jfHm(hLowbk#H00HodE6LKj2brkl4+>D-HE)ZxSCG`HP?N?K(pJRhO9 z&BEml*8HjgHo_inTYgHkov_%T3E$hvp59$z&qwGw(u;B(dB=xN^q7OrRLcw(`r8$* zl*7)ZbkGDhN_RdXbnfd;;PIw4&;ZW2GK|6H0Rqd3#Qi$A*rELThP#jDFv>eDTv+-doNpuc zv51CMn(-h_8o=jhu324IuUb>k@1~f{9WZ1HVY4TstQdE7|H?tFRvh$mPvJH^9dp>P z;o>73E_OcZ_iEI!4Lh41PpRMI#D;~&CsSUK=?*)ppGvucpLSSq`*g})>}>j7`ch`t z%#6qy(U&uu^t%%Io8#3?oycpECu?VBKD5t@-1s0XUb}vF`teKI@rk)Pk>72+5#RA( zZe-l7oAG`tgh==Px8hAE+>UG*btk^KYhL6lhu<=dBJQTwZ*VWOu*v=O7tiiz=G1za ze&yoB%!79yrSILIpQ$|YIP&13C-Dc8pGHEt-}seto<&Zc_&k2nkQb2&-CxG{ihC8= zGWd0TxZ9ibo(=`^1Fsj*P4(aMF*=1pbU`8SdcR0;$t>pe)87g8QcCz|>)#8iMHrtk zqndDORCP)vukm;3cJb8__#mj!QJm7jI%m`Xo8qP3w)uUd?TW`4G|7*0vLCmk#6I6y z*Kyp~T*rLKK^_OWW`mqET*d{ja2-@rV_5A!ItjPM+^qpeqQ zHGA(t3p{*^@6__mXHETzkKgsnpI6kZc>M|g{KV{lamSJa^E;*njaxUTdA{GW;BhmD zkb^o*Z82^@T*x5bgwS!ZZefFr!@`Rvya>qZra?2O8Pn;$){`|_AU zjjzUzYcZ}B)o4#^I=D+5^?D&C#dK@~#h4C?=|XU=mi8a|tAb{Hup(bRLkCJIgZt}J ziETlCDvIMRD4i!q82OgzrSB0g@6$_FgCrYt1LmhfK<}~vZh{VKyFqAa`@QUUeZOg5d zfM$M|%ew^HPlD^L2Mi$u%qV2d9*HjTO+>m#{RuiR&6har7N4izo{yia{B!JtHg^N0 zLi+~*qxs62W3md2? zE6p|${^vH4lZrPJa}RAHGoNfFN@i~(!_$(94ii~&`L^w>JZ1+u;pd%1s_ib49=x07 z4EB&At@pBqIw{-(+kNcYd;7REHB*Vk7gNcu*a6o4*8}9P=Ld=FibLGJ433ECc9{J6 zrz6A)>L@Ay?ij%k$H~B9Cy1W1liXmRbaukqbdG9#nx(T&OF7iS)e#x|1@f|x(%}lf z9lt6p^}fc>$1;U+23hb+gQmw3=|6GKsn)SVr9CjT+n& zs@dP?3!mK=?$mn7=UjX!9KZXBKe#=gUN`3%HEZH?dghQ9)WGg9=>c)Cs8+$R=~%Zn ze1C`kH+|gyC;t`6=oj@mANrsF^eZv`aZJ>0DW-yO`94XCPfC3f%1gZodU+e*M*@@W zAw(UW1kVi_M6g>b=WkyXSulLXDPj7 z7r9pfm#D`{8Qe9~%e)r-h8+L?4IdWtmTPzCEgz6wNKRj0#BV%aO!k}cj>l3;xI63L z^S2ja-0>OJ_+z80legtHs9SVRu93GEXk9HbvavR`7T4j%zR{s(V7lZ0l`hp^(Br0O z)uCdzx?De~pSXI5KDlhXjDOgsKDW0|1OBXgLvBgSM*QS&4Y;vQ8uJMOhFsTLMtnXys!I)~-H79D|L1+G#y)IO%6|Vf~MNKKU32yv1qX<5xuR9;u z$%A)=F;!>Mi@IX29#c_!-}#_16`vuFsrcREn2Ne2j;W|!;+Ts6whxKMQ2gu{;gq3m z1hp|If_hscil=r)QQ3E*sqdD@@Ndq>^0TJ3;#(hT%?qQ{eiqd*unmqEPh zY%s3l@obBgIQJ=b-9L(pWj#K7Mi7$2=CXwSCuTngj+MJY0i;IGJ^8mn!r7N!oI;e zBdN~2nCt4FEYeA$hZJ9}DvyCQ>Rk8*K)0m;9Kcba<9Wcyx0nhrAD}5=ZQ+%FrMV_)T#9V2q>tYNz19G%2iolfjPgw?(>)=mZ{C;E>a%&xe_=keri@Et z(DHPb`iIZtn^Yp@NRoj)&t|#c*~;=hnI=E7pbtC+JgDvoxwxK~%n&e&b63U> zDPLVP|NKk%B;}v0Rt&8$|6EhnHECKAEfGx};J!c6zaU93%LGQW+xQ1*SKb!50=+r_ zd<(Se1GwQQXoqt3HJ|Nwdi)7}Rp&E{`dUsuYt}%|Lb9K>X`hn=|SuqVa`4sCQByf@lnzXAABCzFwFt3~(T#aqC(FTDO97 z;M8-=|M2z1=$R#(CV9?Zf)OvILmG=9jN;CkV-n4Ip7OaP-vIp=0Uy>&d{{N;EXpIJ znv1cb|MomEX&vAn%>zTW1|5hWHEU>nWSc+14|O+Q{&Q4|R60I4=0SD{@kx^}NJpfc zo;2V`5%5LNTa2@y{DC^qc^Uvl^8ivlUzxA?mHB+A-3t3(pbg5GsVv4_z80}H+^Zcx zfHx)!0ZhT~lu{1zr*eAB=bwcBq>b`V@IzZ`S2h0x?^Ss|`afk)gJ~DVJq?a~hHI-#!kE*VzR9L7~{+Y#s zdHTE0`g-N^YCjsYeWf1$f6uF}%)du*ud0aSM+R6djb7f&e)(&#U#PEKTE($%Mezg4 zcR_yk6_DXffL1<`d*}oE{{Ze-fgG2u5&n10t-5Z}dVX{!b z$WGmlbUi>PhSs8*uc<8*w5d-Gxm;hk?%t4Uv#TLKw}&GYbJ$6^5$a4mJ>?;A@gY?I z;8138`!Kq*Ww>Og5?n+(h3pe7yj0(E%~Fi)v{@znx>4zQ$zGMWQ*m&A-2r;Rz4il) zuC*Ls1O&M)0f+q!HR#CFI!Z`4(1GsbGyGAH%hD>zK`TEl`yQTgJitnL-VK1!{8?Cf z(p++ItA=c2FLj+sbPld3ws}J2v(yhET%ON+pp8^$>i}RY_#LX-Q&zj9iZwX?thznS zqUAC2)>mWEeSC&q>NzAdmL*q<&!;&~*Bp;avEpp-`%b~LK7wa{1sKVT62Jgn7y|y9 z`R32nKozB7(6BYE5a*mG+7n)kET^xPN7t#Hyz_D;|@7 z$ysrZ^u}l6;F1hT^GTANXM&uQ!1s9oi$Dgp0$y}`V@FfJQ9Hk@ zwg<#OK4x(xd5n_nu1GH>nLP~mm;v{i1=t4Kl6=Wet|9*`eYM-(9f`=_I^ypw;*tN0 z)~R1VFUD?6h!6WwqMQ$LBfU>m5I`1LjL9^)3O|5DGbXccYQ_GGCXc0<%q`$?KF~_$ z4`T{{OlA!j*|W6(jo}4^B`ddQZ0>Q&YtaeeS%*{9jfba%6V)$J9rs=k43=Eyr;N=0 zqq2c?0$o?s2Fa{_jFFtwNfMt`vTc%0Lm2f>(lbl84av16C;sr9K>**vGxq}Q0_|<^ z+cTHzHMk+4H$q(tmOs(KnwvkshTq_A%Z-Q@bGl&vF_hEAHPdxOIbEpkAEc>03#NX7+VQ=nwxCAGg^=M1q0~2SVWhp7YH{Hft_zCeD0JXiN5|12_{On#iscWZo_J9D+_ z`LRn%uJfI^?9b)N(lxr}QN<3weUvYo*Z6@tU-ranF<*AW)qG+7iO1COLr>^q$xo^E zD^-74{_KD0y08EA+7M~o7qUCZKBhgk=r->Q<@saj{;S@J{Zm-!zKl|TBQCW(nchIPVIe*M>`nkCn*>AKk)^+_^Pn_sdjv_o1|uMVAk-i&h>?8MEsU zJ7yy1_sg$`*>Afa@f$ts=f%(~~YTgwnWDKeB> z-cY>;gM&3qd|#ai4%RgBQTHP`SkuHir$>{prirh+A(n(SP5jdttw|eL(^O|DMQTB= z?GvgkdC#;R#S`txQ$_09p~!wC8kc#0ntarPiAd>BjCjMuq;%qQSo9a#m)iRBYmRiZ zv5)rSmEM;h+Z_b{8wNrh&_J=a_zxkz^W~%CUeVtMzecs9g;5R#@<9E!LT8;qReV7q zsxk7#b0&vzoqubQe5gf&avN#tBa2ph0$#3^wEj*Z#B;Ph*4ZYrbt?G2Ub@VKQ^{OqN z8-%qb8&p3x+$7A%-K3Jg*evuvxJA`AW2+FeVw=iqXR_crft9yezMYQlyF>0dZYS*$ zu}f~yWj9^VevkZ3z+PHaD@C4Vx{tnecc1E2%~X2ViB#3KyflGNKA_rn?4Yn?&LP#Z zHJq?u$YIs^sYis7aYt3%6OIY-ZpY>0TAdL5^-s#Xxu&E2Xyjzw({!`U(`7Yt@-Br|Vm3?Vmp@SKyyAN2yTNDBHs# z8RWTAd;F#P_MiE_TBlc3vR6b!@$2$>eGK&ZB*4fZOc)ykaY4Y5NT=tgsCAl(Do96p zK=OZW^+$E1B%hU>B<^E{Y&SZh{!ICS_SA98(m0OfcOqPVoGba8h_7XNL%>I^=CBWF zb4+Fl80FybVYAMVRF6y4(3BFg{f75cyTuskGqW1yJ-RyAc4!U0O^=$KR~s$fvqdeg zvAZ_^-A~$Ffvh(5U~6sex=NSN67XWHUWYqpy^~qnyG@zFE zZ%9t;+=!YGWkB|5)|jFl4Y~2wMpQ^`W3GF3lYdGM&ip509OqKpjPYXp?la?#O7n9n zi}{GY+jo0_X>dGA5dCS?Uj~_ z!=5<)?IbJ3em!et^>`au&)YW2JYPH6zRPyXl-ItpQ7L}-m7C2J)gClcK1&Z!U_%1c zidFg#-D?%?vs!nS-x6si-1&eJ?aI%K>;`(I0NerEJONC@HGWsG@oV?d`L`aUdapLA z9;0l1Mg-QaZj@}+&M1t09IaTpJcj9VHI^AOu9ckF(^|5x|M_~2>NIloT*^YFC^J%= z5n&`dmBkw+JB;FupjPVr-ikqV=yKg4>l@ny2=YwqI13U#e(I)@5rrKJt< zslPJY`MU)ZAR{QJM>;h7R*47Fm`5|_j^2N64TVk%Sm)aUlf?r@bFnEuYt20t<8*MB zOV3Lw?gvegoJt4!9Ni<5$H>zCtO84MY$=vvsnWcel=n0o+8+zo84noc(WC&FgMcLf zp!O>ADa~#gUfA;6oC{_qlX$5nuOy?$F6qJV%2^e)Py6JTiuI(toc;v&Fc)Asz)HBM zB*4zlR`Jlm%Ta9$@@X{_>d7+`^5QL1ioa+^?mTQx?bvQXE?i|vEtspG2SxP)QSD|_ zFA&vkM)d+w?PgRj5Y=u*^#W1tW>hZ_)ow=h0#WT|R4)+8AF3CK_U}UV0@40mn)8`e zt=&Xfe#lWp^PQC}sx3#R57q_EcM@qLy)G0$c*f0>}nHc4v#H?|ezV(0eqOkL0YqMt)WKG0A&$ z?GRXt8UpqF0h`13?@#{E@8g25TOna362r5g7==+Kbz~&nu!3g@hG&TcjO6{KJ6`696Mybr@g*82KpxUhvv% z{=4Z?t$tNp@7-t*ag}@cUbKg}s-fLJ0rn7=6ZKMsCl^xX4W6j?5Lf98J0d*laa8rN zje5^;)mirwXwPu@1Cw<6tnMlKnZi@_wuh&sJws%(du3ol+Fh1Owf&EKU&9V!nX>f; zS(sADLhC57$y_#CN5QPvcmu7YV3=7q(K-sIXa8Gh9R(8>bqB4ZV467ohSpJFp$+b# zbrhK0^ZRK11eS3%AFZE2&-BUupaL0$@7F;6a9$<*Ur2ITzW@6H==n3iQK0Qbz)0?y zNkv!w)%QSh383v=h^}o`C=ylrU6gUn%tHV#2o6kF3V2b9=DPkimf^^ zsvAoNjoQv*Ep~A7_??uO^)7Nvv)z2(8hf~FCVQ!6d3)9SOyDQ?k%P_7^7jUv<>usM zu%}Efa~(Xdkn=`fAp??7 z)6+(IJY>TX9rog(+T^Pny2O(WdgQeObqIcDU2@;A^@tt)^tmh3WyFF=buB+)q=UMa zA3LwUx|ScC_^dIi<;QlsXoPC{v3}dtwftC@k};$g5vJ!&rquOeuhjA-^)Wv}=Zqic{Gb`}aFcq!YvSw=f!xy#LBzHJ z&AE#+gW1#VNN#7p7VH+!5N=^)DEo86Fmi``I4gf4?sr}NX#_d)StKzeEsBi47|miS zF{J`(6SjD(DIe`%du$-k&-&(9_1hEn9t~s^66@RJQSS}m(xw1EezJhQ zq+6&g*icB+$}dum|FM|(`INcx+Gq>bTWP7h;E5AZGhCUjXU)puZE*Q*8}_-c9e(n% z9ieY!ue@`>o_K~i;y*5MWT9rb(qo`Av72+jkM(gS7Ac$J>sq=I(%Le-lLtPamM78P z&kH|X;6+&CKFWRSQs6va-x9<7|u#ISw#$0|qAt=Pz=t?_wLaYXMa zl(HG#hKT6ZR%wd0BOF89<9-j?6M8lsag$RWiO1FB@!}2f#D&|P@!Xl;u#e7si*xf_|oKkN1Tj?@ItoT7nPJ5|gz6Yy;0{6w53_YtJ}a zuSUwZf6u;}mF%bRIh&{UtNJ|>>7hBdta>J%M;P_Fn&T)qU$(zO2cX4Rpvg4A6wu`F zUbpg3$V59?9j4-Wg%`Y4+D8Pb|OgppiG z{hTy!Ts~i8DagYkfEOSewIjs-;ykoH8v2S!0LcHY)APde;=5~pmGzo3ea_pU4Y8|jH|AuUZ;G8-b92stcbjAT+A^OgfN!HeoBA=UIpEc6I65XZKm%R(raHwcL9)-zB9> zlP3FOYd7AX6QZ9Q`{-3_j_uR5*mGA7pglo0)VgrcD0%mxf9&2M_WEzr!*mKWLkkMi zo7^wTw970`*GYeushv`i{&4;K%m<6G^s_UnWu6&TJ@SFPM*MxcX5<-4EB-WDD{?EL z9lr(FiJT*=9se_?8#z>^8!s31(tpaT6W^Arn?7V;z0AQI_0!udk!4b|>Zf~-X^`pB zzhSyT=SG>0q72gC_%+Ua?O+($$l53~Q^z>+bv2XtSIgDzh)|cf2Y+layw#}oX?Ou*BXp$G=WS=;%#6Hhf*D*0M*D}Y;NoIvapGF!cQJP zFLP@7=4~|fdwKA#U*3;J&0Z=`_~(6>9guh+IWR9SH7IfAoaTA%%YqXp4IvX+Pi>Ld zD=s8~NC-^~cMD5s5ElM&)Qj-Ermhh$J7+}X$?8VE4A>c!_dGv3F@AYWg8tRmME`NE zBJ1vH9q-pAF7oL@3h6F7kla_R!rvDv@RzB(^zE8od=+)S@wxp#(EJh_mrM3R@`K^L zIv#oh{9r4v33dQ?A~0FQNK9x9bTRtnL#(MRHdJloCu2kE7>~Z;gYq#R?9ALJs7401 zb*KvM3n@}w{Ex0v;rO$3+(oOcZKd&rG^W?|FVJ}Ds;*c!dl)?TB6$8)fLp<}gt4}B%JSVy z>wW*Oe(Artz7^*Bx=emDthJh7k^%TLu(-CY{T7k8QjAV>j4as#$yb2S%jQOQ0B^A< z@DZXgnGs+#w>TW&IKVZ4Mlitb2AFxhXRSPL%tqC?=gIPfK6@~k>0Z@y-4y1hhiByb zmt4X+n_g4xnw$AY>+1Zk?h&b+tlv@*XB&a9EQnCJ*Nnm^Wkx9)=9TRcS>ApjK0w5! z3M&7x0jT;rQJ!MwiSnfBb4qquk|(Kef$x>&(71pMxdY4xdD?>H3hsFmKqdhC5_&DI z4@hr1LrHF5x=K}R!D@12ha^?k>1*iG4r^7xebx!B>#SEO`5WY?%r?=ju56NT zF5XPL?cO5)DQ7EPf8jRykhChT`9X6f(wZMMSMo>J{HXWEE?wipZ|ZP`OTw@6v%Rlz z)38i_ut63%((^i6<3lGl%&E#6A6nN@T;tQE!GF&hpMPz4g|<6?v^cMgayI@#<*T}y zR_&YWet&^RKAIG7EFX8Fun^1#+q9{Czrca+9s?K>4Re&ym~16r6zjYWFu645_`Cg# z^+#sN#<#nSKkINs_7J~{XLw(eoy9Wo-3D2*Z9Zd0CH|Pi42g)g0 zFuUSDtRlHb{g;$0vJ>Qd4}fnB%p1qRzTkk7+~)vH1-Wklm_3uSLTQt_lC8rlnMs>3dpB^B&88m_A2v4BcvwOuaWE7Y zL*rXb-{fDguby^J}SD<3xNrsiH5jAgga?`d-E>WBSb)(m-}>goOx z)ycv}>J*~=fUx-cMHtkD#r)IXVNf>OC-H^yr|fpX88#=||Z_y|v?psg3G6UAKj@WITqeX%#DekcbS%PN9OL{K3k zH9LSQP7cI=O$}ml=QPJAE(=CE{LHecEtu7DAVhvl=QWg^0Y@467l{vE7#JR1tl?PS2>;XX!&(5mDuH@?C z2lmw?(l+YjE0@TK6|?H&lg2b4nEnk>{dA&dlmQ;ztT7ShXsGOAZA3JwZLAFa=d9hF zcvYMiIOO}Ge)^ZxPpaC8UmSx?LIHa?s*M+AL32Jp8iPq=`ttFACGhYH+BgITXnL;rn9*A^Ji7*dO-UK_5}>nRH0wUxd*d48o`{(u|?O`7)if z0{VAvg~{ZAwV)y9tVIc4>w2{6^qd%c`Nr0YbD?p__MiiOuD(}zjeHpCVC3Q}cBzP^ z_~aC5^G9g=XTT`7iIL0i$!>o_d*-{ z0Dptp7=2}#3Qt>3@0y{+`qjCH{dA-Vo3Nu8>wNMZ!;UP$0@lB0=5>U{573V#2UlmB z$!lO{b!#%F(2x1O)?(hdX)`8QwV9jxwVC4GwVA_Dbur_WdRT5|9js_VU5rbqhu!F= zkF8!T!wxmCk4+uj09$3z5bG1)2%A#U2#fS-dFvLkc!oD=r_E@x)#Ru`4kSEs9$BVHr z_r{_d`!Lu$AI#;oFLOJ`k9n}Z8FMVnpK&@AfZbXf$kbUGgdLsMoOv=K7+c$$WcY3^ zuo>YY%#P-vOj6S@W`RXG7NgY?+pZmft$q`M&A%6kO}!R{jW`*N_1POE`Da*Tt#OD~ z==c`#t2%J(&+fO>?bY~5S0p(=80m^6yXEs*j)F{Bw1(JvYfKgZ7~M1Df!`*ruScW% zMekAZ!t%Nx$tv9*K7>P()fo7F9JJF0a2xc&*2S;cm3Lorp$!X&jFScAsF!b14Jgk0 zXc5sat(a`PBDs+cbWU0?gFZ%w)V?G)*WtG} zp^aNo8}ZxKwhgsW(eDW-u^s96kKlJt;rGt~BY9P5wG5G&CWNBjqxaPyu7YCf<&TQ` z4ES7ruQ5hnh55N6XzM++SuIX{E@oEzgUaqlQx9bDn}%_)?gy|ZG@3KkcoXq7X}5B` zy@70pQDc0&j-leWw}#5R2SzgEY-45rvnJfgG*hnc7Ben>xj7d#+k*2SXURDa!a1`p zR$Sd!Ypx`~hI{I4%L%4-+(o@6o(cGJJ_weET-uaNNP5n5N8-64t zP;$j-{$zvf0Md9}Ao+5C5Lq;>IeB$yFnOal$vvOa0zFT~$%dsH`&FEIqn0;Yw2%i5 z$$lV=?2<%3gwcD6ua-c+c0k7-fFs~{{MDpA!kA&TsLge>X|zh#(=zOvPfuf5WoemBp85++;HH;3WWk)Brc;kMR% zZj23`mSD?s&UW+=-zNNOJ$qreo&yzq+krlq=g9Xt<0SM>b><^Cy9g1>T>0Ijo6-qW z-GsIA1l=;hoj%gSgLVk>q}Nz^(Ym(Y^z>>z^!)FAh1Cyzg>kq2=tCLJgloilk;TAKx=5llT)sGhR-LaPRwShRD{;d_gFUFeQ z6ktOybGD^to7&Oi^_mD9YT64+UfQb`=Q*gz(T>8{%Z|dJV@^WXUCu)5H7-K%0#|{U z+ElPgbQ2mR5Onjd?zHhR4;l~hq>I{k(bdhp=^O4obY8KK@YckSK9S=mWEVE0H>CLs z2d)PQ$JPc4EB6Np>!vjqCM^vXX7(oO6;oOW1HwaSrdOyCYZpfM3=J2WYPF=pY$E8G zClPd$8d0?C`6ycFPBg8*Ek@;WHdg-rr&h>rNC%=v4OnXXdo}r_{(Sg4d=1EtC9H#g za7cYR!iX>22Jt+?=sjOrg9hR9x^)wHV?$vwFA5Vp;3vWY<4xo{;L&-}J}FL4W_+LJ=6t8w7JTG5OTO74oOkMC#hb=j^K}Ak_;=2>{1a0< z{-$0NN>9t4Dt>8C7v(w7NuwR9+{=#Cg=0<>x67H@zQ%=Gy}*^4KeZ`6FVT&jl0XRC zy1EOqV6CYl$Ws{D)=L;>?k%+P@DbX-^PvZr`UyTa{OH)CW`fZHf4XUQ0PVdlkd~ze z(T3BT)6bU%({Fo|LcOUi(6dyl@d@%)q#Tg@fbxTJH<5Ov-v^9nR++t$>{KMsa4gVr z7GPu_`~57^lKs)%0O$U*^rWUHx=|w%2wvIMogWJ|j3)vgiJqR zN}b$lCL}I57kbaO5IT;t6e0%Uf?pRa!7GV|QMm?>7? z*og){*xu^C%-a{fSm1Ad%!I4Wm?03~+p#wQOIjbu{I)oVxjM5sX8e6H^X)(qThXNj zHYYZOxfm469B~c9v@FB1*Y#R5epm$JAIi z5k|6Aer)3ibnOn%3urtHa0vV^Y@zWcs?PO$+!A{OWb4RtI)-euLPHLFXhe8t8*|gn znh5jKOob_1zKGtm?kjtF?cW^ag_j-WkB&J>dCAyT7;nymxak}iZw`RC>CksR%yfvG zw!7iS^nLKESY3#lX4!>dPea3* zR2Xkww28nnpG06gA!B6!`6z7RooHFAzsSVR< zP+O*(Z#$-0YTzz1K>17)$zCCNg_DeHmJ8v;#qnDer0kbVwmvNS? z`5>IF*Tsr`A7jm`0&Lh@&bI6&Q#llVZ2%KE69IQ+r6o+ z5jTGCzf1f<81Y}?_dCRwwwSC#ThT8Rdi7pSO&*&>Gp*O~yMosW_IB&|iT3M-7mgdK z9gj8$)12;8t}pM?`}7|2^p%G~e*PnB!Jd3!=!M6W@scO>TJ|X)`@M?pwyq{W%2`XO z0ecixGB%(VZU5caKxq2XgkOHqlTlD!6nI>O6z1p zckgS*Gw|sEU@!Q+Y{FkRe&v!5IuO419PzcFL&hha@fn~)MeAJg{-8rQrn})W z2?TMdkGryOE04@sL7wRy+j?aVH1|&T^YF=R_0A`2IgBh`$^jg3l`oL3U3%(DPNM4;4$l`mA~nZB;m; zZsq===6Lo3&{Mk|#0A=keoa{QAGXen=(}IK7le^aNcD`;2CAFKM)w!76oZ!Z$qw3a zhW1?!;ItE(h2sjyu~b_L$l!*6TI-KlZ)@Ac|yZcodN( zC}To`;wag~ii(ROEJ=c>YsNfgOy`*KywmYasHkI32!o;^rZuCYVgx0)fC2Lu!8~Tn zfA!7|tP3dKdH3%9-)k*;w|A#^rmDKSs=B%w&#B;mpM2#&oVe>qj0khWH=TFFSHk=j zzNY~`Ikq7_d|4yB*UZLv@OWpu^&lw|+NTNQGuDL(YTcBv>(q>CSi3o6;Nr?u{^W|= zTFDsxnhdY_!HvmIYKiAxX@x)A=#HN~*c#88<$-TqQmK^>y9S}W`d}F2x?WjiYMZc>^CpVzaG@#RBsGGo79rJQ#GuMnw z>C_^+Ap4i9E7-r3UWD5IrS1v#FO?$Lztm>I{-x#%_Aejz%7L2)_U~N5_T@(iwlCjK zuzh)F!SdR`Y66THRTy4ZO4dVJIf8~Uh=E#+rtNBh>WryTShxL$7@6il8YX?5F4 zQR8fVvcawfs(u^PzB9#d5sk?yzd5URjFOUAzb2|?3K#OWM^i;;lV;>e>*lJpRb9C? zOColHa|4C zeq&PjWYgFjGo=VV>pMsxBy;BB;5ga96z1H7~zYNRLYfl{mwFa`kishoZF ztoa!I^mv!$>8rBiuj40M1u?nqh3ijAvjy7=$wM?Y%EOjuka_AccoKZBsEB;7>Lk1u z`CFXBL_XKf)wCP#XFtFZfD>?kr=doE_LJuKm+&sD(e8o=|~0lH?-}8=g`M1 zfVa@!JE+a!d-ROIPp?rdI_rq;5B*MQ^N$g_2RZzKQksuR#J`9W{jRVFw=0I*Lp=zt z<978(RUEsQj(y&mp?Y;XlN++=oNDrB6-Um@qR!0Arj>(pRNRR3gAS`>^8RW0q971A6_+n1>HHHx z=f4H=#T9sIEkHEz)j_C-!1e#*tDnbLii(E{`3kM$X!8|k+`GNv+RPv3FAEKS4Fy_# zbKd#0^HuTd)bm#!0Y3;ucmDbof29LYHSGrRyxlOo6Vzx9GXcTv0x$*!j3KeuclX`JRyjYxQd%1!d5XS^R!ShE2r>a_*0GTwgd*yZ zZw3nQb>|iB`Ct&-M<~EJxTi@_qj6ga?&m!KGV9*-95ySl`@=KwEw7xV!`h}%1A?<< z`-kVm2Q57>Q+i*BKd|OvqL;^|c-zLgiEi(5<11Fal4y1LN__s4tBIcyuf?CuxGu9? zf5WlY)|;}A(>cd8D{je#b-3-gW#S!KTj#s+DgExr8kydY-|U%}7+8=OKflg{#0I$! z;zxaXm{=+CQGAD+j}xD*eBwAV^=V?(q-T!pzea(K)PLvb^ZK34``-Kbem6cO_Rahl?{(x;qI~=3c$=s%iS-s@@%mHC zC06*Qe0*LXy~O+NDmYf~*O%$FsOWg#-ayuRhJj;hMMGK28$-v0`$n?O7mXbwPMgTw z)>erhIl3ysKf(?0+g}eufWDCKZKSaQL|UO*+osZ{*<7Gg1V9eZ>^{^|xPIBkoZ0L{ zV^eLP9_=C6xHKWyxO92J#-;BHHZFZyuyN^l!N$c-2{tYkch?cwx7b|4zQsle_AS;< zux~ME!M>&2wo}`;bfZRU`<6C^96`q(v}6zNX{9_6>&`|lYpq;6(}SHl-c$MeAUR8R z@ly8l^=7@B`6#_?eTjax{gm-Fy3(WdyP;?JQGYnX+vBeA2a2etiM%iR+;sIxXfL#t z-T>|#y2ILEcZ~CbK8~7JU61E%*h}|!sKGBcH^Y`oYEoz3)kO9w|M7|i-7ejd?U`i7 zw%uBbb&ssgHj1!jt$(Y-nvNt`tan}ZdE0vI?N&ByP6J!^q?H}J*Vvx8Rl$MCe&ry| zy6Y&N9OgvqIj{Ed5G(emeLO_iGPRF~=s8~P<6$TEX~K3K>%xY#Zpt?8)QoLeyE$9K z#g(n~$(3-ilCht!$%yJ7+*mHDCGqA;E8^2ecOv&-YvSfC58~h&PvY2MIeT%27qP+5 zn@t?(L(H=CW!L!l5kvLcu)o>(vooIhvwigf*}<8Cto%+8>%YA%(I-8abz0aCztpyH z{T$(=G=1$megbigRv+92YTf!+e?*}oxg^r2G+q~VJb$3ee4x)dsFA+T%?jI0-Y`2D zKI3Q_^|V{IK)j@FRO)sr7j{WDWv@)W1pS$U*{55Kwe|NV>ZA4*0G8@S6vr zM)G;pF|&jGfe=;b`n|8vxEBlh4935DF36vOdM@&RtePdf7oQ^?`pSVmFKGI#Rt|FU z0vLg?MXvmCKWS8%^^EF0FD2Kxd5PNVoXfSbzRc(2SGe7eu3*jfT;+%Z*RTcLbvkp; z4f<&8O>E+P4*R{^Ei&lHZB;YZJJ{REyDBrYdtA==`*e1dJnV}@zN$lh{y(L=aw`Iw zD1LEwA$K=vs`_l%j9gx&xnk4v=Cq_j3##0?7IeQiGVa|qH|mM1CE06xD~g3!kzH(S z>W>*7T=Z|Alk7P~t2dzc2nq<{^OEB0;d5#{*upnJSG@(ibPvEc1Y&|hFr0)MSPGM0dZ!Yf zi(OM>@1i!*pUTOF-w^G?08in)w(lkk`ui1N8uUFKYIMoT6`kT#Yc}kaJ2}))_Axh0 z?)`r|e&sL8N6;OR-J7&b!2S2)S43H|2xyT5G`R~kqNy1Wy%xMceZ_v9I#=!cs5(A7 zo{PV(^xNUiI!3pavR(nKzj2`S`rSZc%Htp;!_fDUuoM_ncz?}9xEEa;T=a>EK0j?; z+{muOSMNGWZ+#0A=iD z+V)Nm-C%oL%qu;ZuC%b7qWmxIk$)fICtc!9;>!wPtPR*17 zwVNw#TwIm)KeV^Y=yMxp z&6v%!A9|3yYm`jh+kIBjZ*dwwDj-|(da;?v8wp)qry_YJu1}y7IuOsQCv2$u^hdw= zwQi{dX8WGLr#;u%!2L7;aPEoWE>Ks6{+Nownk4No<*35y})oKhI9It4)*DXNx}Q?T?qsj8#B&d^^@o>jbbPs2ilXF>Ol3hGnWzNr8UKu8W# zrRb(;JfdgO)lq}s9{a()4u%@xiGcA{7XXCqfAOIuGW{u;iI{N%q4hd)qs<&^fkF#&KA2CxC}vjb{x_&)1uk-)`o*sEya zP$PMSxtVIXq^3OjT}?&Q1M}qUD;5fybW2JqtUFRwBWt5|N9xs-I%wUIy4b5OT6d%p zTiKv>M{13g9a?wf_f>E}>yF4)#yW&Kp|wZ;*OT?p+9TgPwjo-3h>a|D8u#QqI~>#cl|b0CmVmN$5Vf*nO-2(Dl?EWyAwp! z-d-4Y%WZAj1&g#&=gmd9M+M>KugZhM_231FDn;wPy7Pl>Om3k(0Q%_lf;fO)0w3D| z4|@Zkxr4c2c95+~a*C9BXqtJYWU%OQu)r@DIDd@LRQR_=^1A>hp zyyxp^_VvR!MFrgt^4U;hg!e`FCGLz&NbrPv2>|E-_thC{G=A;jnJ)mKWt&9nNgKHx zPYhK{t{ZWK-Ww}UA2A`_Vk@a`&8tjW%`{bYn1GX?23ApUovU&d?W!q`H?2+{v#Fto zt!74U(5tDK{jw%G>yEi1G{=G*dO{tqjAHmuyfTWJMDfZfW)j6KqnJq)uZ&_QQM@vW znMCo*D25O1r$B2FC|3DL;(G8f7gv1RCs$^fl}x~#@E1K>na6vP1W?mEppJk~U7Jbt zwFY5Qb=DAM9~}kzNFBcexCI@7iv~PzgIW$DPMz(0;lR@#OF)EqeCAIZ{A0+N3fe_ z2PLtSi}{x6@mK1q{mbe+slr(#G+G>nBHBFP^DFzqZ*+j)>I5~?Wg?$nnqOdce+gAS zvn!Iz+WO61O*}~WB=t`e)BguRA48$9VNfIe;SE4z&>zri>ADv&$xG%{K(CQ8jr1jj z20vmvy6E@Q)|VzgUts`Kpx@u2M)Y83|2+OGX+M;>U$dnBQ2*fmosxD*Y1mL-Jzhza zya9@cx3core8A&Tz-I>3h`vt%>HwXZ0Kk82kE_)MaZX0>#rU1{2Ji-oNH1+V-GsjG z0OUcx51{sj?bwG2 z(m{1z0W50GU-F6Z2f@DCRYJULiFu#&%4;=$D-BA8@{lnY$?H_jdXA{ii*c=`**T(o zc@6Yw)fdCt^%df*TFmuiUKr(^ANndUKdh7K!_bQ< z55t;0dlZ@&_c+Y#+>_8XbDoBcY0fj`27(#-OI^l$Mm;95y$!m5)UVF!x_V|n_b$=M zMNvMYT6?V=(FwiR9yd$izLx`RfoIqWHIj>H5S9Zl0&oSG0)QOVIDABx>zztDyicVo zUpT|}ym}UMJ!nl$8&-!7ok~#s1MAX3ed|#^PBz$3e_Os^RXZ%u!JhYeVUIO1aO7>W z9TAR@4e8_~_^+yF58P$sKXevnYSefhN8BVfZMh5wExbuXKPHj_{fe?0SOk(IuOn zGCzmk=6xQk=XZfW8hjBu>VAnDQZbi)QTsB#I`1-CU#Bu4k6aJ#8jmGh$HtAlK@Hk_ z6PxuL$FE#*i%#rwn@XE>2Yc*smm;M1urYP-QyZ)1(Xr+8`P`TJSniz%l*xsMwDGA& zyyw2h*vGd|_>-%i($1HkQ3aEEtlLKeYTgqGJ@>jHe>l^Kj=5Tey56NKx?ePY%=ygm z2%l2Uvf@ElK}c7f~4t@(TRd!l{qDDMW^*N*aTpndIP-VNmUKzTRN zx(CX)fz~}xz74eQf%0vjbq|zp1Fd_Yd>d%p1LfO5>mDfIhBD>4oUb+0i+bQ!xMxZI zOeGE@4Koz~3;#?@|cOou70}h*#aNZ9oj3aj#M~1+l{h^Q4 zs#miE)*q@YZ#3RiDqo1pTRy>4hjy)!801$q^>K@8i8UHkPn}3OCa$~cm>QYplvwXb z{Q%Y02C{C^4O8_NHcFgJHx6hq+F5qEzch8YqDdm}?UMS;rD@^>yJi74)tk#US9DG7 z_S!Y^T3(BQc^73e{ES4BEAwA5wZhIMy3v#J}U9?xL*R+3>YmVx>5mk{Km*Owiuh*$$ng7uKD|}V=y`Qgsz+K_;>p941IBLsRaOu+C3WM1-x3?p>iA+r3nW;J&9S<& z;jg?0xq|c$nZ}-yHGwziJ=7)fkFI|bzDErP|Kw|k-{=Uu)CFKa@Ku(EuRMUSJOPmG z8(-u8h4^;;>mu2Q3ThMA&rQ0ZUoG0JAo>lo^_@KE^C7@9=>Iv?$o`N+-^S2UB>*HJ z8EcPAwAtfJjM=+fx*+W`UfbX*ePzp4{LB4obkh9m=r@rJreco|HiXxOxP|*cdW+r+ z_ya|hr=s4aEmyyw-|mlbCIF`W;fxQcec+nQ?eG1gem~tk$$!=tt9+1IVm_ch>sLxH z2vqz15Kc-~3`)}%iZin4?~BvKSBQKe&JCikLR_B}NHZ@kyN=#uI%myEt#!*TCrPV-I;~UTC)pg zdN9;@Pj>VmIn$|&7u(U-n`zd}hiz)>i+8N;r@KE7J&W%8Ye}||b{iTa%?80AC?f83 zb#&b^4xbmsm(B%zMgSZI+@@=ATNCi=2LS)EK?gr8)q@-Up!cHvU#k=P#Uh`&_PFMt zpF03~(B}iFz2SQYuNTF|{9jz(l)oC)9{B)7T%sD`1$I~IM7*H);D{}$xp*52k5R|R zw3&^lA*}DAT9kJ`s*k@0dbJt={(u33t<=ZAM;yOz!(P(Qp@wR*xfvHGsj1lZt|qzl zfw_viVnH@Zw?r}AXsn?aZZy_V3^y8UD25x2H59{*#u|#@Mq>@daHFw??}ZrdK4DI1 zyrDR5G~Q4gHyUp!jvI|P6vvIm8{K@Ydc6H7{5B%Zya2C1CjW{lc!l=ThAD_jMRXG9 zrPAmn%E5s^mpGu$0S$fnJ}eqn|5x{s{~h#MKUtuUt}GSDl`g$R`lJC}Ob0?d;6P!X zl7i3-0zkS=$ha3V<{w|A@k7^Sp?gMcps%R)6i1Zo6^a-$CjO4LTx|+{x&pL<{#!$h zR*gaVz{DI@e@C9B(sF|RY#+EH!_QlFd!UbEhn=tLq>rCsv3?uXCL4d% zwx|B8aJ@j)qRc?m@H;`OG27cJ=A;L!IxlP|FBhzqtAae$@|+fJW&g^dTGU+pRYmZp zBHz#f@gt-4+i-hq{JBF<{kau- zf!w;xKrZY~5I1dmTXK1NFxP)!J95(2_UPG5lb@wp#9xU}!L~^(qiw7`cJ=}t5&_-< zO(cUbZXVoA$maV?n7M7&vUfhOWenFvGSO$&F$4AqZiDn`UGuf5hY^MBcZ zJK4nIM>}j}j4LMKTV5sLC(mrd<#F4Y5$q1U-W(+!K6fYMLG5B<$L?kb#U3WqWj}M* zG?BURC6PJ(>;Qf~H3>hJc$k?IeFTqNbri3(HW{BAb`1YD^f*2ua*`z$_sZyJ{TI1LM>)A6I%((#VVGw7iwGO(j#GnuQW zGV!Jp&S5jRp2K1~shGnXRd|iAS=f+>ENq5LHWNK78^6^f2hR>XFMr~8L4L#OqWql2 zC3&)8u6*aaT>1J3m*o=J_+l<~=gDaUUnD1Wewn<@=T&l4)7Qz1Y~Cc()!rtL(JM$E@Uj4RT3ZRXoL`yon`z3p zj>j2?K~-4$E>#&r-)gKxIIoy}Sj~*Rs#lXue_2zRcE_CEo@2pApRgp-lB|fNt+j}4 zk+q4a2y0@|Z*>TIBteYnU6&XTT#xANZbSGsv?ZF?vLozG?Aea`4y^ZU2e#=wN7nX& z6I+geg3fp+mt#hXFy4rq#2KrWT{aRJW!dN z0Qp@*R^wdvxm6$zwJPT}teUD;kLsLNU=7u0nHl%Vv8KYRo;i0@Vxjm{&XWB2+){D# zmKAv;tCr%}vD#$vPHV-6m^$2x34~(S^t#;nuJu$g!)>^I&23dPg6z0eHSAS`>pPHp zKRc-Wjhx7pH=I;X5C5ZQO(Gsa`1y*I-y-w3K7+oHFQerNfp)q%pmp~TqMXk#-H^H9 z!+8XBYC0Ih+YH7yTj+!DU11aP*6Tdx+O8V&zG-#l(ZAy?aD*>(e`T?M)qWwZbHCxT zuL|;W>EZ;wKve*oWB^XO11_ckPUb=lZCFIdX>*Cl<>~luh#%x?p|`o#(Zl{{5E?n3YW|wzI=V`jdVFw(eB|w(ra~%q4C+-G|+QRiC58ex19M zmQuUu6=QePRTX>ao-X_8i>8Tm%9lhs@!0|FbZQc|Kk+aEl<-2LsIA`ms9B0<<8KJpP#|T+&+u--u)H>FS)54{0FD( zHujd%f52^}tkWH(llNVvrOQ2~alQM}7FKyuN8@~{#fN;U(W3{_4_6*aAD?|By?*eq zG&A9e^yr$WQsum7(wJX)>5}2km4^quP;T%1QW@>@O35^Rt(`4h) z+npvHTBj&$UP)nn?9UMPC(f{T71LPnt!YHYwRF}tB7@kGl*v{cd5%~dsbcfnX0h95 zWwU1+tnMErp8qC-6`>X-QwwLB*ul}tyGcG|YX5und8 z0E3|zZZTA#719TjKNam=MfV4!EA)>hU;lc((8GjNBc0%SXXvL1)JQ*Y@8`QTxo3wH zQa#s`$?ndlr1xr^miI7EQI`9XB5zfYs=RaKjJ$U4S>>rCY4R`o)1}j0GvuGESSXWn zEQpiOEv17JtcXonwWMw4)mHY3x0bsOucK@oPRPxJ>MHAm)|0zLUuf4!No7Uv9~rUEE6Hf83qhI;OS4 zX}t$|rl+UE_zyX`rKOkRNq=v0fu)b)oR=>-`n|7WXWcer$181A8Abuzs1pII9S;M! z4jY10i_f;@n#>4BxJ0Fx{-m}Af1Knfrqu{=ee#Sz6J7mDJmW$N6t=5p68Fmun&^Kdq7^C9$&PZeLT$=2f`l zv_}=m{IIH$cx9qhL4;qR>q^#p*OR;$W+Rzd&sK6i&`vU>yuDv0t z3%9G?JREaz4LA7YDyeNH3x9A;Ci(K-Ej%r$rR3I?R+9XU?vfJ+TT9N)@{nv?<0;uX zSRQ_ChL>capLh6%fj;30jeWys`S?jX>9+|VYU3~2{MKKxCNBW#S!g^}pKmq})s$XU z^_~`#Hlr;1p!Rx5nO*}wAf4{T{CP&pBX=4V|#96!VBmTx2Ao<;+}J_l|Z+~W+WtHQO?#P*RhU6LY~o$QiUVOUC9_0aw4723vSRDW)2 zSiSN-!|EaBEUQn5v#j39&S}}v9Zt*kjPYC6Tfa^9u{QqICqMPC-bF94dauktkw!|R zO==odgT70kk6Iq9!q8nq?ljFhAF2_4wfA%{gZqmE*aG*u6Kd3df578N0FUvHp63G^*Cp8o82&^WAxj9e(X2ywupSO)0}Y4s z0HLl9{rpvZ0~`0CK7Dpo1A0+*LwajiBM~p>*FPCs1NtxVSz+v=XW5Dz;!t#-MVse4 zzfH{^5m0=djAbY7lWSf9G)p(9hw!#vAbhPIEh46A#~ zDpWeBR+!$g+SJ0y)&&VG>rhk=A}ocj%SU+EE4VYvhX19WZNaHPJO1i3yMj0;2mbIm zhl06=PJHwZr-Bg=>QhOp8ia*sH>9G%8iftt)tI6~oWp{bsQ12yH5T^1hvCBB_plej z-uHsa!ru3=+i~i>?*-Yy-uHq%!ru3S6~f;4u-(Gm_ps#yeW>M)eZwXRd*8!)*!c5H z-})EK&kGRod2N!}I5&9Sa^+zQhx*?SssS2#X}cUcfg<8OeyQ*t)e;D(M|EksEPO^~ zmlI?=a$0+^5%$VkBWR?KFe$zn)^`sJLmiS zIRamZe1huI_yRto@-;Tj9pHoe04+ygoaYEQ4+Ls-@1ejGzW|{5HR*W!NW67YByp}w z8Z#~>jUBr`o#`5v!G16`WX<;(vIELlveV)$+1_?e#MvEA#L+P&=K2$Ha@Xwp^K0Zt z;dyl9Gqm-AVQ{Y_0j2@WfP0?{wLV-1w~h6HKYaj(0E__mkMZ|h6ZP4;W#MnSq_cHP zuo+9@Z+c;fGyNanZ}(~c41b?2CBH{$^XP32f3E_bhyr*4@D_Na(nyH00sbIsnylro zTv*F&zZ}Wzja|nu2cnpjGozU?hN*blymY4K<_z3teJ0*)$vNEa4;5}UHj9zB&t?Y3 z7F)|kes$dU-?!d|o)b(R$=_J zIpwftlgd*jWAtd_{uQXFaK`l$c|}SkHJ}|97*M-#Lu|t~LuwgsL@(uxdF5pjdO~s~ ze#wE#*pkhr{P@*4HhyjuzT4!gShr!-cv+9?m@KdcZ|P=+Svu9ETGTVgK1wVoi}IGV z`3p}z=|qBxnO+xr-nAZoc(@Ig)7+Mi4zk1c*0ATN z*LR?^K0ELOjhyJ+H=KCChxO^@M;cHAavIW;q8d@YyBpIzraDvhOQqPvp-m{sI2SC$ zzbW+)&Kzs$(40z#GskKfwBYmM%(2h+W&BwE|p6TpMb@cVa_P_MwM>XY?~oDn>V6n zamL*G%O=#&?uxecW9@TlLz#5#1n;CEHRFib7 zXU;#7Sdhl$Eh(cHmgJLLR@CFHTI4y<$uoCalRIPT@YqCxTspljf4gfvZpUyN{$z7o zZgG$uzo~{jH?F<|b>g!F*VV|0+IYi>Yw@r?HRnhJvP(`wYFJbw(sg%Zs_j%~(tN3u zA3C%N`F^YmAL!qdyw<51-@u_cdBnw)uVm1IyJ98dpWT;nNgv$!tkW&IsH?50r#sv^ z`cP|1wa9}Tu-22>HCj$igFRWxI(U=)2l-GFoqb6kUq3$nr61R?5u_w7JAKQ_2jce- zKZrC%bxHgH?Sg4#Z4+L(1kzl;4MJO{m~s7+tfMolkjGt#snJd4j} zs%aB-Ui2H)HEm)pQ`BamX%qLRqBd(y8#;?u?9WEi#+@u`bJVnnV;^1HNYf_n-9v3I znl>?x6t%U`w285#sLfr|Chm(tZC;u-aeoJDYolos^O8Xh+`S=;;Kg|#M$ zmm^J%#;!B5i;FTbTNxeU#jqv?6JsK5sP!gSx^0NiSHzkmxo(W;Ww$Bfm_uB|oxbrA z8w@s^^nAKGVpd*)$!&+N5kph9nhbfeEg~>(d&KI@9T5%YC?l+Q?lcLYcA0cqvfHG- zVo$`ZaeGZnr29+`blGq6)HE?7On$&b_3S{z81q9Bk8=;1Y*OYBVO5n)j$i@5ON{zAj03gs-Y~$Faaqmwtggf>2waPOo~M z|GVQ)&^SSBHOqDjxe<^)WeIIX{%Ku*jo`0FzFY00`oTe*%)j=BTT<>Y|N3llr>tTAwVUlhVKDz13@O|b z&3^`;Sel(L&-wUK+w|M;$H6Cd=BYm)s~5;`$qeLY-wEOuY;Q|#NDt;mL%ewH;4W14 zw}ofdA^anJ6ptTA?$|O$`@rTyG`E^Gf0%|lrCBpbh2gn7u0l)z~1+azBxaQ^6bSP$W20flju0h$7|pfKDUYIo@8&-gU3 z75lR2BO%#%hnQ@}YG4jy(^eff#^epXfQ^g4fbVg-h+8(igs(8nWsa4cin1%&-y|)_jOI6zEOlsV3}3bJdOrBq4gB=xv6M~UjeK*vP5fGiIKEtc^_i4Z zv!|Q+et8MJ;?fr0D`hJmcV-)J6Stk}!0zDn=P3CRb9b`A)Gl_{*xhVn#U7$(;9eG& z?qesq>}Ow?CbD! zfRkK3*(t7?<7uvfc?y}eO`YFYW!$bBscKrCzHU>4&a7reAJwZ#D__>6WA2#KOL8pe z87C~U9Z6OgyR{a!II=eOM}##t?zcMFppgXDwRc^tO>jM|g}V*r*w7ZUsAY#4nb_0K zh5Wwi{Encb=;n4*EERG)7M|NZWvmN+sC83(MW<#0rG&reS-(x0Qa=@9s>}tfmvz3% z1V3j8;CLzEdOg&>aJjC`Wu4;Geq(c&vv%Q!!|g7>lqWsjpoa{C_oO%kBpDqK&JwL4?wfZV+CKsQP3yu0iZe4Bzi>D zPZ=*ulTsDGPb#LLkW71(D$b#X{F=F$;;N)(vg!Mps>%<|c{a(4U%a&z z|3_qPeq4k#Kj^nQeAkf#-==q6zD007-qGELw`gc9>h@f)k9z#j_OBi2n)k|<9~;IG zwykwjEWA@Qkv;{f`?{g|vZPD|YUCS8ivJULqKP%o1+5QCtl$q6UAly6#@8!kSV7Sp zXS(`%NqP@lL%G4(m}u+~KtCG*5@6t13?C1*3-n7ySg%zbxv-Y%?o(`TDqOq4ZL{%N zlXIADR_F0;eJ|kL%?r#K|4aDsqnG||`b@KDCS#CyVkK4{pW_J+MIZ9Tw8 zmaS`j0gq~bk#KByiCEaUXkWzRN5Z~{%(QFlyOY=1hkJy55$Ve~Hel>6V*H5PZ2eAm zSfvU#=Zy<_5+@lnK2o9HJNyGa|YQ=^9qE0KXJE&eLr)L3HyFV#0dL-+D#Ys z{W$km@B3le1_}Fq8r2u}{g@g#srUUne<19&%{e3NwcWc}*lW9TZn3?#*Nn2dF9Dtc ze@ofbrXT($I*ac|{|Wvr+xLR+*;K0*ADzEtS@c?9F>DF8hVVim?= z_-3fb!57$V_G=0K|L!rx*qfbYdaOLlSZAd%ttO>2*veHfS;fQR~ZGDcS zyw7>AQt$=U6sL>avj&$`eGGHSmE|w1JRe*pfoRk zWW~_eDp{R3+(8yo?H*B%i=@k|mbcX-4-BiI*wsv*TKY>xI^N9yoAAMa-DF|NwY+Mm zGJyU5nYf9<7WVtY88C{)o788(D8|jklUEI`itLW$U;WkgVRCN=wSAcEVPLLUHrFC~ z*)Z@VcP zpX)Blgj~?KrvpEfzP?a2?n`)8v?5c&hd;7+1h%=V*KZs(I(w+5*5!L$-CR5FZa?t) zAprLY5HmOd!}~+s9-d9t7XDsL6;(dYSG@!4>Hl)*+HKGsCY)o$-?@UJzl45CnnqZrXY$R+^?dI5Uh}9YM$(5cBu{xcv z%ji&u)oFgXB^?B@IvqE;(+we3r|E1Dx-!J-)EFYi8bGYhTR(5C62$6Uw)4fF`S{U? z^xI%rHvU-dQ-5r?ULbZbGZ0&TCkTt&-j?2(9*j+0*p6xt+(qP(fL?+hQCLs>T^#*}+tN zM&{3;ZJ`ZJEU^EU?W>#LMZ_n%M?HOHDiy;bShU)R6mmpG!aRwJ?p*mjJn61=YR?&O z09SP;VtDC@x_ya{(W{I&F zs75pt_x<_+?q>iEmO+iiUK-5T?coL5-cWlboQE>1?OHnJ^IGajWF$4?%sOi9v?zXG zLNwK-A4@%)A46UCT2GDsWdmcE#oD&g4yet&8bAD?)b>KA>4pSS8L&#y`5M}{5a`-C3n+e55^zUN6^3b6_+ zTArr1hNMt8FQ-t><<3yV^E3Q_+h_Ssd(*fLkJGrebUMHOS~}lsc?Q|`LjW;T$(~>p5;_ClwX5QNIVdvbZ5G+0=|#+5E{KIsD#0^?DC++)14$fQU5| z?BUrDE~ESa?95&2`~d8bCF=YD$PPyN0n~Od|m51Ky3#@egL%{4EX_& z9gOk=AUhc42OyUIs?HC$Jwa!1F&87)cFCh`ddu??KvzEzkDU1 zi*x8#Er_eNp-k6)HvyH#7=YC)r1uYeE7+~@vapEq3&}0bG!Fp?(_+<0B5B z=_CyAK1n#AXg`dV69A_GQUEdlUI4rVh=z;*XV2ce@U!jN|M`|6r_2xdmeLISSfV+f z1%52k7}FW0qKb{KE#pk2?%}&bwS=2N^VeR8LxSq7B92q-G5b9q(`Xo@lK^UlVVqSM zhWkQ|)}NEMt)Gc}PG7xyrdT3xi?fjY^l*Pq#Y!um5lOjv(rJcadVEJ0X*#@85Z zM(fYmFL?>n`rIv;LRf!B`I^xBGs@S5)}K+nCN$suZR^ic@8Ujw<>>#q^=HJNh&CGc zWC@({6;o<|UZg6O^%eXU;-bX#qxkx4G<9|%OZA-|qt=N~tU?Jf3Sa3&Z{r1B=crqeuG6k=3cv7m3VGvo z8o75xx>~1!xGS>JhI3@@0u^aGBa2#1W|PkcFrFM${QCSzRN$>0lsx*Oa#zo~^<-tcLsBKf4f>!{Cj zqo~VKg|RMFi{9%g$KVZo^O42Jvu3{)pB)_=&SBaI+fd zQ%x-^Qnp40lvzy))$EFdss7fGu5{dpd2`X2eimcGx{wjbR z;Dv`!`@n^=1dU&S>id;n0PU?K%NzZ)^>O4oM1FyPv%g2ApX1qm-BA1poQ9?r^c4+? z{VVIRu88sw<*Eaxi_o+9kg&NDak8VN}Jk`_!tG{ z=oC>_Abx9tm>r7PhU)Lhk5RyH=K(GO@4bK;b#WeS%dzmH9lTDl?zeXG3y*d0p4N{V z=Jqz~UH6&M4@Ty)$d4x9IFy6FL!qoW z8s_w$TB|5)oITPdP(k=ZF60XOAZ#QC70VS9IYs3$i#^F!#I$_UnJe0@Fg*?Y!_`ksKw0Mc1cX)-L zs`;AX@i%xy=eJBY|MuS&A2ibT=~zV1R`BS5Vr~}=3-ugd9T^5tbjN5(wkCY1&<
Rh17B>-gG%>Vyn&fpx1>!{qV4yymg`2z8cSP+eVoPX463CtNk zV0OR{BHyGqAHd7PBJv#?|Ke*@BM|jWaqS)23iwqwD=b0dF-JP0pE=l`BOSOGLx z4R9Xd63`?M>gGV@&vOn$eO@>-dTN_+_VXWU?2YGn+sHvXQWb*-6te|TtR^*=`6>3m zpI!$}YF8L*j<2iT91nAG#ixC8WtLgVaG%31nUJfk#PNfkPY?cSRQTfaW@#EcbbxgB z^`-2eLhXqE(U?F*92>gxrmmj`zNa1^*$^xH0r21Sci0o~yD(>7g>i8m-~qs2wa+PU zVZX=UVxL0{3OCf)fN$w1;Q}8?sP2u8c(*ho%B`{q^5yW{-Ac%pLw(9n`*Nt8+p16> zJO69)ub?>)?JG^6k@UCQ=X*+t@%`Rd?E^f~A0QFn5b#Jg)N;7*zjG}b+2vRY=7jd7 z>hAX-V}$)4Eh zl+wnnsORdgOWy}NI84QG*;I@RLf6M?{3Z)36th)1S@gM|7E{r9fjy#&;@rvlWagd* zik-0yN#(Les?*2S=O?2xz~n;*NmZ;6CnN5~DJCELUzafxKe&lOFld%~h$K7UnG5T%1ajQW-OrD)D{>jJhdofpd#KIC|uIRokI-`BW;+T`1-1pUf z;2YJSR(!MMOoC#hMKYVLn z7Q{rV<(_TkzHUhVncq1v77YVE!68wm;Uk{GaIFSh2nEf7VvSyx7ON)eiK1^>oCndK zku!kLHvk_1w~}eX89Cxw*uTZD6LGgJ`a&0ky8+|6{)Ti6b-YrU6m(6#bEH&2(Z!p! z29LUUg6|dT(*)qg51{Qd4DSYYGw3J1QI9AwhL381#RNl~FSl2js#tltnC`}@nd-WLF~VFRM&_RGN|| z<8kT+Q-yrmxhj=RRU;3ys!kmUs6puKP zRcK=w6kUAl;!~T4PXiu506qfj z!d&@uxG0Y`;<%XXsHm?U$td6`A2~;%=<@LQWQMMs7U#1JkQuW8Ut0in0PYS#4WW&t z#$Dr<)Ox0u?}n0aEAETL{ibE1ybow!T;U#MO}+=-LD>8KpUzn#(!sgk*YVLpe&sSv zkfP7Cs0MN5*a#hf*7+(5(JsCD+ z19fg|s;YjE;`3x{>Az;4)YacbJzd1NZ~E8zG@3s_pVKdAphjb{{lVh4;G!D72O|ZE z@}yGcPh~au5K5@V7xHJv#(5YU&4Cuf07e5{euvr<`n}fX^{=e?A|^&pbb`C_V@X`zOU5{gy3T+I%lLA;>+HA6DZ(C~>8< zNG+m0{%ex9?n#R`fJ73K}B5Z+OcTfp9c7g1K0w%+y^yU2R#DgDj$Fcuti-C zuX$E|u4VAsG_3RS^#Am{E!ws8L*5qIwX-XpSLZcAx)dtNzAf8+IKjSEA3y`wyw}7X z=;HZ%e$Q;c+eLs62!AtxOfv-egiwbH%BN|oY17W3>ZECld^>fn^7?(LaQ6ubXr3%r zUXz=|N8JS`=K2)#dx|o#G4#pRBol)d}Y(C0(EID_pPp`!nFW zIdJ`4s8KlUD*b75LF z+z{Wn&5&Nt8!<7QF?RH_2{R+P5*BlyGR|%`#b&I=@jvEP!3IyRiVqrA4fF3&9d8p@ z19NgS!yTP!(th>KaU(+u+M&E9WBKAAahkANJedpHEw) zDXNid*Y)*4dtp9pGobnCnHWA>Lwh!0QxsF4tAMt?HPlSKsXS{y=7s6>3hMR_JZf1n5Q%$CGJ#)g`(1K}R-jZ$h!jh?Z+ln>IuEo4NR+}x@Y0X@XsY5iFNHB+| z*Ci@-tA}41ZbLk4Zi^=c*%4Va?D44j4(yZ94mfS(#Gbq1gb#RFpWS(+0W&qHA-goH z5ku~7%ubl<%y=)A5=(|QVQj~_5aa!uG8H>FBf2>>XYyTK37J6)T)&o#u*{R;c^}+} zkEdJWXRfwl&6V!>mP4)C_lrF61#3OoYoq1N=9ymXkq+L>{6Rh}>+H*n^7SKfUi#tl z{+aUz#2nzLE{XooUP%AtK=)@r|BAB&c~Au=<9YxnefGbLe=wPnF%68=K z-`lhEKegv7P3pjX9-=_=HkyCwd#PQu<+~xY3!X5rVBrJg_obEa2TDL+O}uNt09=FR z@7kjbnbUD+=)JIA4DFD6 zh|9l|l>cV?VeagSBl)=tk8)c#BuOwJNOg3!7uP^$M$X7HBLnK1lY>*t$@=9iN&h%Y(&UyE=`^Pn`82sUX*|@L zRIzo)Cv6CF7hRV#l-A=ihuLtCOl`?>jqNz^^7iDNN)DXuZ3pty6GyJ%aVIh^qdsY~ zr2#p2TSHQRej{?kg2rUtaA&gJC@Fa+s0lZ$n+v(6ep9ZkYcq0zQFE@5nJc&Xr7LIp zrUf@YN5(zB;Kq&G-IA<)v=!H3sXGZtkGUq}Jjm>+o@D#pa&k{!FH-96O|J0pA*)uOOH3T8N#>-2guZ zB{8O`M(2N__lV!b-1ew0jsM^?3YI0+XFd7@zqJF{0k9kRF9T|1Q;@Dc>HNqB+4QBT zE~5VK*hyH^V`87E;||3!gZQ;PhqI7ZV~9^ zyH%)zcNf*A@fduE0xyZ0$0V~c&KRH*K=;{jHW1W^$LxW&=&;RT0Qj$##e3{srWW|JX%0PMfWS6db$_7LQc?S=DWhJblJjvKV`Rt~FyxM1pGV7?J{PlGs z>C<>)`K7}qQdM{*`GIwnrMp5+lP}E1rON`UB<~+mRXWkJTJq{P)s;)C)JUFUZ>Ajo z+$_0IMRR4hEc0Z~`xZ*sPD}a!tL{v|YTEw)zsPt^+Z-8|y5{K^Ql{&Wt|=Vz%r@QY z#$_As#l2*gkV@^6423OZD0L!+4|jsoq<^zn!B|c z(VkVY_ZKa;ApC8dkJn)wZ2<2urfRGr3R{8@ee$Kh>DA>r37IGBntsZ(N;n!)&rlFl zKVgeo1H<({8|vd`Qp1sPjr5xbSQ~=7+US?H{NCVV)mT5dLK6f3u8H2^VN=tR>}L8Q zuFXw-b6e;;Om4~gMf`JHyJ*#h-+SVg%0Q04;(rAAiM zd6j9)!tDBH+6X%rtt_U@_b@*c`gU;9b&U2780~sSyN)S7M~{U4F<=tPnha%rYTWpN z{bWXAIUYsjux;&m$fB>VlfGqlE^N&Q3t@LLlzmT-5LJDXQoCy>{_V9+e8=zY`5TAq zl~z>;@KquP@OdYll%Dej@~I(%l*GD&`3N_I68hGlB+ndb`Xh5Fe}DLJ#reo^{#?hx zbwJGCKl|6*w+Xwj6Q8fon_u5^uybbja)ehfMpmJYL8$9CsMhxP6~Fw?X7Tx}6wbrN z?Q73p_9O2h*f?BdLv-2^V@R}Yz>W{I$$o^K9eWaP9@E+w*50k79s5(re+G8WL0P$_ z`Wga?m%pUw-8tGjbhLa|k^UO;Wk6YZY_JRgEU$Nm!2zru+NZd^7weD!A8jla{~wLJ zu$2QI!tUcDyE@qH4YX^B)YG?XurcY>`b&Rd_vi7_v6H#I(W?rJ`R2U;2DaY=3lGAT z_AsAI*qZY8UgE=+ZAfDE9s0gT?(%EGmOI zo6FS7(B3^%-2d!gy9?-na(Wh(W3XEJN&mA~C#`KA>veK5+b?0BJMd_OeYE4Hjq~Dm zhrrfwFba0Z6xpo|gSLR#Wo0BBUC>G^gIaz$cC7zcdAMIHoKKWsRvIDNeDZa<#ry7O zl;sS51@lq%Z%{VYSb17mVvSBNEUe8ZqKplEzP4MuJu6|y19-vanj)KhoeZDHbn)?Q zztr6CGyX8E<{v@Gw-x!fLD|?X)$;!KzQ?0e1Vb;=*-~CrS-Z6l+mCNeEZ9BglA`u& z*S^|yy4LTS{V>=)0Q(1_tbM$#!wvi71)SDyr{RAeFIxXb^X7VL_n~spwl;4U?}t;c zodi-)&Uq-Sr}(<(jTy;R%8$-CSbj!Mm62L`9<{$5Q}gvazDhy^3(u=xoqxolZLMwE zy+`q~Z=$?A;6BREgW?v2EJ%FmZ#a@uIU#Oj6+>_mr+;EsRUII=7kXQE(E5@oOItKw z7mneIMSZFrbEd`5fA5+7)r9+QwYiPA?z)N)*8vb>l;?5Q^(Y>T>Pm9b?jVg!@38xd9qK*56QnMguu_Tf+^X`cOH=wUK4LcGmQPvyJ6P?t7Ztzp1?R;*jq+@}Gcebxo~iK4!&_SH}<-$LGuZV!k^{LB5N~e+kO`N$NHKoT<+{ zJJZrMdqcTWUG%Z@x)}2AcGYhh+D)?`Th?r!&12gABMbN4hd=lTMXFuHF=c*OyzN;i z?=HBHvh$#t?bKrDjK9^t$hW_)|6An!1REthzu4Ga?w{=+U35?Sb^Z#-SH+WXRg3Z$ ze@~$m;sVhgrA3rzs0iwHa$n#>+nZZ-;$N{`)1xFT~HZz~5h)@3z)7a$bNkV#+#`{m?+g zuGe}~-S!)lI@TKvc2=ACP8EU-b>0Q>mJfps?=m;@ZW#=8HV^eo3M~8))wmR%mwshESa<$o`h}HL+rdot4Q=W&J9PfrJz0>v?rldwF zO%6mFdWRc%hu|nf6Yu?e<0S_Sh+e~9@IFZ+%FYp zN`4WioXb9H3cqqp2}_JO`9vRA*6c_y2>~bYK>eg)&C*lKkZFmAITKFvvj-*_hIBu} z8(N<=bf|xhZ(k|dQ1e4FU*mC#;nj^)z999ysd~}{rCQ8I)61PE<;A*7rfVxME9t+b znGR3CqQs84Y6@~pS2o#RGsL#Jt}LmUVc1kTli&C;)378zi~sZ14a39>H~9(iw+#A- zzxWkCa_Wj}51f=ktk?PYk=Zs(h&LQ^V?I&v=hH&kZvtz2Kb(zcdW&QNTO3eP#Nk z*=xQ{l{cmV<=!g&U%xfAe(+9db^X1m%GnP}<=Bs=r@KBW>Uv^ITUA22ys)G}6)gBC zd?~|aLuvk!zKkJSSC+4^rmR7epxQ=p%3H!h{C@P zfm86mheiIU-M_H!*54KRAL$b%s?E2#lIDJHY6aKjq{3Wxp_%gvvFX^A!gu{wiRHU^ z2#=bt79ZB}6fTta63@T!5{$XtVr0e|HTANO=y%vxjo2@dh!8(j^7ki_+gf$ryZ|z9 z$~txU&_FW0*Lt;6`wgU%^+sWs)h2Ohg&@K9U69!EVX#m;YqMA@#r$sS*L%(Hrq1*X zQC}_JE*^E>p=M0oNiv3os&NjxNL+{A>SmigWOMbs>N1Nkvg~=7I{9umnVhyya7m3I z4hJFyKHMly3XT$bdG8l{E;%54KPy_a8GleH;}j#7?siCc&@xuMZ*^ELRr3fbRXR@1 zc@al)vX81~uN)(16XVsr(Z|W&9SN#;zzO2*ep1-8^c0yrEm82Aa9Z>nm?Zq#{fs!P z^;uzX{d3}=O36aI56PnLaf(p=W~x~2{CTx)(go5s=Av3P)I_QVUQ(a0xJ;h^mZn~v zeuZ2eaaBF!m`)DaUK6ggxlT6L%n)KKXNm_uW(phfv&8kcZU}!|xG64K^IVCr52ycb_z9`amVMb1@3?)H?-vr0-K<=dx$wjycbTRg+$bD+j+6e(6yl&S?8eUD52d*uTmf z_2+VL|EqU_2iyMRUErGkk>zIpQ>UB#k4!iFpW5f&=YN|2F#VSQA^x-f;Rj5W^6w%|f{p^LwxJ_L|>&o$48) zzBYSQpXz&+xfWrn@H|Wzb~judnzoM@QX|xk z2O{~Q;YMLda1`Isd%w_O$pOCBtZ1R;_=EiG0Wrd>u7~){ma#&H)nTQe#u4>psW|2O zi#YXK_EF`?m1FAR#CRn*`nVdjBSCQqIH4|eKgkCzJ*7^XmdG!ia9UV0Fo~bk{fscN z^;y1W{d0o8QZjGzAz83~oWhsBnJSbze_m;nbU~#t7Zr<8lUg$Hl5!8ftD5~=nsR3P z6*XzZRb`K3y1Lu;8lTkWy6RaIzs+7bQ`q$}llRQe5?0^3!OyyIQH%YL%uBlxMYa)u(0hlq&^!YFf@iB_{om zdNAoRpLRT7xE%R}Ke$yDqJ5w8>z6$f0_QyE7f*U2EE@chAJ?Nm7~A%hvas1}p<9(V z%9wI*|Eu?m``G^DJ>#1HsSC{hr;IZDpE}a)e@f?npZ{t8!}MGJhxpI_r@+4!dgHf+ zy>a~yW&WpK-!uP&E}ckvM4HeW5hspBc$DDNd@z3~#`bG@Zw8EZ(^WgltlVPA4=zr-C4@grOP{kbh} zYl-W;08X5;j!YdI$W7_Bo;bGO!1cD?C{DK8B=Hr3M2B}lQm==>V&kmM()TImwKHYH z%xh;Jc!rQN?%Sng=N;t1)ScY@VWA}1VHbCZr#P+kIrFP>FiZz^Kr0U%ci3KfVrI%KRN%fjX zxN4>2$jcXT+>7j^ETzXS$Z5Ws& z{@MME^hfKn;)MF=r16!K#U3A$r5_%rh>dQhO7#4B@<-4Rzwl4Ck|+V+}wr_FV4SIrDDv2vz#>SLxDnx7@@ymdqLxNuWi6@N=~ zj`&OZWs4#@`P`NUxZEMXEW9hVo|sJrjJn75?~_AX+ui3{HGM#;)XwE9m(3$j3-UNM z=OIZ;f5cr*dMrLUo-gG`J`pc%RV9<}Q}MvEXVU&T&&73{%(Wy})_v1EK>geajHFI4~o6dEYdONR>9mcMd zn)F{KH}2vgm20tDE?d`A$}8_B=f3fhQgglKl#Df8?qwf&-(g=aWxqs|L;SdX{{A%F zZ7t_JFM#??S;x&C8c2m+>$zd=H_)Nh8>Kl`o8;LQf}|nuf@H(PV5vjaX1RTedF@h- zF!S1_0?!bxhWmE;y7LaMVCqi#a#$#L-C-BK)?qhy#AXjYTzxMWY!OC-o`-QRcf;w@ zw0+X1)CfB1K%}%J+$jGU93@Tk-Y-vBazN70ik5qfKPXu{#mJ4i9g<45ij^(u9p)O< zJVI&dIL_i_94&e8D0lD5F`Ati&z*@rPLp;daC-ty(B1AQrPE7KQO{|K(yj@o<5r(A^jP|EJYRkv`9%5)@7=oP`&2ry?3tV}=ee|f(hE6c@Jne$j{@1f?JF*% z*=zZyDsMRVa&P~uwPLZh|5z)g`5xVB_C3zc?0eMJ?0ej_FTTg_3I7fLr}+=lZ}}hM zKl|Sf_*YjStXK9S+#D$LKkfS{=6}l&$NWz>H%g?#x4G(u`MJ?fuFG|{bKT{k&MS;V z#;%k*_FrY}(8WWp)nc`=W?fJDb$Ku2t2bV9X0Ep}BV!GHb=k)lci5L^?3Z-cL;Pr* zzrXH?+giGLUVtum$~wAiXrRue*Lpg+{RSOxy-{9jwaK`oLXbS^U666&!(h2*)@GwV zWs7VRx7BDJCd;LRwi!!#g-~nv?ZzDE9kkT6ojQx*p)|)~m+oGN-Sn)@9^IMhd+A<_ zFx{T#VbuF>xXvqWpS(LYLig)|NZB*oXj~l}CC~ESZ=AX0fIMhcv~l40gR;&k#@M#o zA-P(sSYy?ChiTiIM|5pU$I+@U<8<7;qxAWeW4dRF@$_o+aov?23G`6F30;i)NjYul zDcy!?iSoe-r;X7AljQZ?&lm$+pOqKaKWAK2DOn!(A=xWjm=&g7gTve{mZ@8`MrKi7d&{Un}7X19eMVHZba-yYQOuF z&Ta#tbv;Vx>MSZLcbaQqw4Gc^wj5I0Si5H#`K_+3ambpoa*}O%-T8gx<#_cw<1wWI z&HC~@Mz_!Ge^fI2pU&6pe{|lz&;K<4VfroqL;Pp|bBBLf`C@&cFX0A5o59!qfB!v8 z?b#SpR^R{hNf-N0qWFjP&DY=MWB=#hJD7z2@It=?LVv@=G^qp;W&%CZVBLVw4K%PM zbSBUt98sh!jPJ>W?~61M@hywCnJ%nDXqCEzP5~?(gXLkcJdcXvSz1PQD?%GV+5V9T zYqsVgtd+r3OV7eS*w+BcVEJ}nI|)+Z<2sMEQO$oIFtV}29L1_18gbD!fJ`x;&Kf=4gxaNc|0x`h41)=W1vL&JG z0BeIyD?)z)OTjg4_iRn*a_9=^D`4LS>DvJ)!Zy zx&xte!46OW26r^u-4C_2CA1&tjdGHqOFI!--VSxcHtQRTa6j+~U}X8V24{SRV`Xjbupm#vqE`-hkM}cQoLZd;~ZiHS(n!@@c9NC@FCO@EG!As!LgV1Vv zLbrfyKziaB0S~Yjyasi95qb(X2193nOz?vPp({Wp=+YbQ0Ics>KORJQyd$ALpzn`_ zO5j(-*Xm=ge}leX`cv!IVTk(`>;{ec;kbg({^oSk2ADMyy4H!%S_27P4Ay~tARhD{ zMCfRMwa#KC~iq>_kG>fTQ3Ms5*(zKR_aQ1Dtr&6I4gq9^f^?btl6Xu)+3K zr~@<~I&q4*yd-FwsW>*k2&zvbQ~?90!>2$57>YcPpy|-)pU{?{(O-bgKii-)5pOet z(Ba@FVB7pJm}@{R=;ci4G{pS|O$Xy=n$t`|oP_W==vYu=7Um%6bT9*q2j@^mX($`p zM!>f56=UJNIS1)4AUp*;LAVpri3r~WCjj#)0kAZgfW_SaX8^u17F?lhp1p>A9e%|e z1`Yvso;ZQHiwOHd)1g^F0rx;2cmiI4H{c_%m`!LoPzkU+)u6ROJQwDa$TZUxg8;&>t7;6;Syg4v4+eF_p0_tPJQmiUv<)u0Ks z^PpZ!%<1!?!7@xTObfoGti2hJG)>*0j{P#(B|01yhWE=Gulrh}KD>S{t; zfgiwd;0*LgBSNDA*6#@{PZGlE;5op$ZJ~@O=4`;ik5Ts&&>7eQtR)oepbfBJ1s{RQ z3v~oWZ`2u_0s(6X4FL;$Fpq-azUKKe0(rZkAK0}7>l@~;>{wy>fxz0u&a1Nl>p#|C x3|7ZTS3nT#vF*~to&1P}1eCNOb(<1NYEGnUwQ;V)_mw++iO8-o{|CRb=Rg1e literal 0 HcmV?d00001 diff --git a/deps/icu-small/source/i18n/affixpatternparser.cpp b/deps/icu-small/source/i18n/affixpatternparser.cpp index fc98f7bf45684d..2ca22a15003657 100644 --- a/deps/icu-small/source/i18n/affixpatternparser.cpp +++ b/deps/icu-small/source/i18n/affixpatternparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -44,7 +46,8 @@ nextToken(const UChar *buffer, int32_t idx, int32_t len, UChar *token) { *token = buffer[idx + 1]; if (buffer[idx + 1] == 0xA4) { int32_t i = 2; - for (; idx + i < len && i < 4 && buffer[idx + i] == buffer[idx + 1]; ++i); + for (; idx + i < len && i < 4 && buffer[idx + i] == buffer[idx + 1]; ++i) + ; return i; } return 2; @@ -66,7 +69,8 @@ nextUserToken(const UChar *buffer, int32_t idx, int32_t len, UChar *token) { break; } int32_t i = 1; - for (; idx + i < len && i < max && buffer[idx + i] == buffer[idx]; ++i); + for (; idx + i < len && i < max && buffer[idx + i] == buffer[idx]; ++i) + ; return i; } @@ -192,7 +196,7 @@ AffixPattern::add(ETokenType t, uint8_t count) { U_ASSERT(t != kLiteral); char32Count += count; switch (t) { - case kCurrency: + case kCurrency: hasCurrencyToken = TRUE; break; case kPercent: @@ -434,7 +438,7 @@ class AffixPatternAppender : public UMemory { AffixPattern & AffixPattern::parseUserAffixString( const UnicodeString &affixStr, - AffixPattern &appendTo, + AffixPattern &appendTo, UErrorCode &status) { if (U_FAILURE(status)) { return appendTo; @@ -503,7 +507,7 @@ AffixPattern::parseUserAffixString( AffixPattern & AffixPattern::parseAffixString( const UnicodeString &affixStr, - AffixPattern &appendTo, + AffixPattern &appendTo, UErrorCode &status) { if (U_FAILURE(status)) { return appendTo; @@ -635,7 +639,7 @@ PluralAffix & AffixPatternParser::parse( const AffixPattern &affixPattern, const CurrencyAffixInfo ¤cyAffixInfo, - PluralAffix &appendTo, + PluralAffix &appendTo, UErrorCode &status) const { if (U_FAILURE(status)) { return appendTo; diff --git a/deps/icu-small/source/i18n/affixpatternparser.h b/deps/icu-small/source/i18n/affixpatternparser.h index 2105540a1aa7ba..1e534c9f3ac214 100644 --- a/deps/icu-small/source/i18n/affixpatternparser.h +++ b/deps/icu-small/source/i18n/affixpatternparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -29,7 +31,7 @@ class DecimalFormatSymbols; /** * A representation of the various forms of a particular currency according * to some locale and usage context. - * + * * Includes the symbol, ISO code form, and long form(s) of the currency name * for each plural variation. */ @@ -64,7 +66,7 @@ class U_I18N_API CurrencyAffixInfo : public UMemory { * Intializes this instance. * * @param locale the locale for the currency forms. - * @param rules The plural rules for the locale. + * @param rules The plural rules for the locale. * @param currency the null terminated, 3 character ISO code of the * currency. If NULL, resets this instance as if it were just created. * In this case, the first 2 parameters may be NULL as well. @@ -149,7 +151,7 @@ class U_I18N_API AffixPattern : public UMemory { /** * Adds a token to this affix pattern. t must not be kLiteral as - * the addLiteral() method adds literals. + * the addLiteral() method adds literals. * @param t the token type to add */ void add(ETokenType t); @@ -324,7 +326,7 @@ class U_I18N_API AffixPatternIterator : public UMemory { * Advances this iterator to the next token. Returns FALSE when there * are no more tokens. Calling the other methods after nextToken() * returns FALSE results in undefined behavior. - */ + */ UBool nextToken(); /** diff --git a/deps/icu-small/source/i18n/alphaindex.cpp b/deps/icu-small/source/i18n/alphaindex.cpp index 9159014f800596..2981e2c41b89c0 100644 --- a/deps/icu-small/source/i18n/alphaindex.cpp +++ b/deps/icu-small/source/i18n/alphaindex.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2014, International Business Machines Corporation and @@ -1086,7 +1088,7 @@ AlphabeticIndex & AlphabeticIndex::addRecord(const UnicodeString &name, const vo clearBuckets(); //std::string ss; //std::string ss2; - //std::cout << "added record: name = \"" << r->name_.toUTF8String(ss) << "\"" << + //std::cout << "added record: name = \"" << r->name_.toUTF8String(ss) << "\"" << // " sortingName = \"" << r->sortingName_.toUTF8String(ss2) << "\"" << std::endl; return *this; } diff --git a/deps/icu-small/source/i18n/anytrans.cpp b/deps/icu-small/source/i18n/anytrans.cpp index 695a9390b681c0..8ec6f837cfdffa 100644 --- a/deps/icu-small/source/i18n/anytrans.cpp +++ b/deps/icu-small/source/i18n/anytrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************** * Copyright (c) 2002-2014, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/anytrans.h b/deps/icu-small/source/i18n/anytrans.h index 228ccbe03affcc..d06d2baa57e202 100644 --- a/deps/icu-small/source/i18n/anytrans.h +++ b/deps/icu-small/source/i18n/anytrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *********************************************************************** * Copyright (c) 2002-2007, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/astro.cpp b/deps/icu-small/source/i18n/astro.cpp index 1b3bf58964b548..22890ad5b5a7bc 100644 --- a/deps/icu-small/source/i18n/astro.cpp +++ b/deps/icu-small/source/i18n/astro.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************ * Copyright (C) 1996-2012, International Business Machines Corporation * and others. All Rights Reserved. @@ -19,7 +21,7 @@ #include "putilimp.h" #include // for toString() -#if defined (PI) +#if defined (PI) #undef PI #endif diff --git a/deps/icu-small/source/i18n/astro.h b/deps/icu-small/source/i18n/astro.h index cd20b6cf2578b0..e8546617634e36 100644 --- a/deps/icu-small/source/i18n/astro.h +++ b/deps/icu-small/source/i18n/astro.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************ * Copyright (C) 1996-2008, International Business Machines Corporation * * and others. All Rights Reserved. * diff --git a/deps/icu-small/source/i18n/basictz.cpp b/deps/icu-small/source/i18n/basictz.cpp index 7fea290f169d06..bfaef620a44faa 100644 --- a/deps/icu-small/source/i18n/basictz.cpp +++ b/deps/icu-small/source/i18n/basictz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and @@ -61,7 +63,7 @@ BasicTimeZone::hasEquivalentTransitions(const BasicTimeZone& tz, UDate start, UD } else { if (raw1 != raw2 || dst1 != dst2) { return FALSE; - } + } } // Check transitions in the range UDate time = start; @@ -157,7 +159,7 @@ BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, if (((tr.getFrom()->getDSTSavings() == 0 && tr.getTo()->getDSTSavings() != 0) || (tr.getFrom()->getDSTSavings() != 0 && tr.getTo()->getDSTSavings() == 0)) && (date + MILLIS_PER_YEAR > nextTransitionTime)) { - + int32_t year, month, dom, dow, doy, mid; UDate d; @@ -373,13 +375,13 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UDate updatedTime = tzt.getTime(); if (updatedTime == time) { // Can get here if rules for start & end of daylight time have exactly - // the same time. + // the same time. // TODO: fix getNextTransition() to prevent it? status = U_INVALID_STATE_ERROR; goto error; } time = updatedTime; - + const TimeZoneRule *toRule = tzt.getTo(); for (i = 0; i < ruleCount; i++) { r = (TimeZoneRule*)orgRules->elementAt(i); diff --git a/deps/icu-small/source/i18n/bocsu.cpp b/deps/icu-small/source/i18n/bocsu.cpp index cfc9816693bc9e..a2f94f239efcf7 100644 --- a/deps/icu-small/source/i18n/bocsu.cpp +++ b/deps/icu-small/source/i18n/bocsu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/bocsu.h b/deps/icu-small/source/i18n/bocsu.h index 0f89a0fbeb06da..56b03500b143d2 100644 --- a/deps/icu-small/source/i18n/bocsu.h +++ b/deps/icu-small/source/i18n/bocsu.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/brktrans.cpp b/deps/icu-small/source/i18n/brktrans.cpp index dafac399f855e3..714a0a8720ad3f 100644 --- a/deps/icu-small/source/i18n/brktrans.cpp +++ b/deps/icu-small/source/i18n/brktrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/brktrans.h b/deps/icu-small/source/i18n/brktrans.h index 5a4c4b6d6b249a..229d6ed6da13c2 100644 --- a/deps/icu-small/source/i18n/brktrans.h +++ b/deps/icu-small/source/i18n/brktrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2015, International Business Machines @@ -26,7 +28,7 @@ class UVector32; /** * A transliterator that pInserts the specified characters at word breaks. * To restrict it to particular characters, use a filter. - * TODO: this is an internal class, and only temporary. + * TODO: this is an internal class, and only temporary. * Remove it once we have \b notation in Transliterator. */ class BreakTransliterator : public Transliterator { diff --git a/deps/icu-small/source/i18n/buddhcal.cpp b/deps/icu-small/source/i18n/buddhcal.cpp index 5c9f80ed0ca092..adabb0a52b0837 100644 --- a/deps/icu-small/source/i18n/buddhcal.cpp +++ b/deps/icu-small/source/i18n/buddhcal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines Corporation and * @@ -69,7 +71,7 @@ int32_t BuddhistCalendar::handleGetExtendedYear() if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR) { year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); } else { - // extended year is a gregorian year, where 1 = 1AD, 0 = 1BC, -1 = 2BC, etc + // extended year is a gregorian year, where 1 = 1AD, 0 = 1BC, -1 = 2BC, etc year = internalGet(UCAL_YEAR, kGregorianEpoch - kBuddhistEraStart) + kBuddhistEraStart; } @@ -168,7 +170,7 @@ UDate BuddhistCalendar::defaultCenturyStart() const int32_t BuddhistCalendar::defaultCenturyStartYear() const { - // lazy-evaluate systemDefaultCenturyStartYear and systemDefaultCenturyStart + // lazy-evaluate systemDefaultCenturyStartYear and systemDefaultCenturyStart umtx_initOnce(gBCInitOnce, &initializeSystemDefaultCentury); return gSystemDefaultCenturyStartYear; } diff --git a/deps/icu-small/source/i18n/buddhcal.h b/deps/icu-small/source/i18n/buddhcal.h index 441156d3d8fd52..3af9ba568597c8 100644 --- a/deps/icu-small/source/i18n/buddhcal.h +++ b/deps/icu-small/source/i18n/buddhcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -143,7 +145,7 @@ class BuddhistCalendar : public GregorianCalendar { virtual int32_t handleGetExtendedYear(); /** * Subclasses may override this method to compute several fields - * specific to each calendar system. + * specific to each calendar system. * @internal */ virtual void handleComputeFields(int32_t julianDay, UErrorCode& status); @@ -197,3 +199,4 @@ U_NAMESPACE_END #endif // _GREGOCAL //eof + diff --git a/deps/icu-small/source/i18n/calendar.cpp b/deps/icu-small/source/i18n/calendar.cpp index 5a1bef805f656f..ffa1e1da0be508 100644 --- a/deps/icu-small/source/i18n/calendar.cpp +++ b/deps/icu-small/source/i18n/calendar.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -6,12 +8,12 @@ * * File CALENDAR.CPP * -* Modification History: +* Modification History: * * Date Name Description * 02/03/97 clhuang Creation. -* 04/22/97 aliu Cleaned up, fixed memory leak, made -* setWeekCountData() more robust. +* 04/22/97 aliu Cleaned up, fixed memory leak, made +* setWeekCountData() more robust. * Moved platform code to TPlatformUtilities. * 05/01/97 aliu Made equals(), before(), after() arguments const. * 05/20/97 aliu Changed logic of when to compute fields and time @@ -24,7 +26,7 @@ ******************************************************************************* */ -#include "utypeinfo.h" // for 'typeid' to work +#include "utypeinfo.h" // for 'typeid' to work #include "unicode/utypes.h" @@ -91,9 +93,9 @@ U_CDECL_END #if defined( U_DEBUG_CALSVC ) || defined (U_DEBUG_CAL) -/** - * fldName was removed as a duplicate implementation. - * use udbg_ services instead, +/** + * fldName was removed as a duplicate implementation. + * use udbg_ services instead, * which depend on include files and library from ../tools/toolutil, the following circular link: * CPPFLAGS+=-I$(top_srcdir)/tools/toolutil * LIBS+=$(LIBICUTOOLUTIL) @@ -121,7 +123,7 @@ void ucal_dump(const Calendar &cal) { void Calendar::dump() const { int i; fprintf(stderr, "@calendar=%s, timeset=%c, fieldset=%c, allfields=%c, virtualset=%c, t=%.2f", - getType(), fIsTimeSet?'y':'n', fAreFieldsSet?'y':'n', fAreAllFieldsSet?'y':'n', + getType(), fIsTimeSet?'y':'n', fAreFieldsSet?'y':'n', fAreAllFieldsSet?'y':'n', fAreFieldsVirtuallySet?'y':'n', fTime); @@ -133,9 +135,9 @@ void Calendar::dump() const { fprintf(stderr, " %25s: %-11ld", f, fFields[i]); if(fStamp[i] == kUnset) { fprintf(stderr, " (unset) "); - } else if(fStamp[i] == kInternallySet) { + } else if(fStamp[i] == kInternallySet) { fprintf(stderr, " (internally set) "); - //} else if(fStamp[i] == kInternalDefault) { + //} else if(fStamp[i] == kInternalDefault) { // fprintf(stderr, " (internal default) "); } else { fprintf(stderr, " %%%d ", fStamp[i]); @@ -211,7 +213,7 @@ const SharedCalendar *LocaleCacheKey::createObject( const void * /*unusedCreationContext*/, UErrorCode &status) const { Calendar *calendar = Calendar::makeInstance(fLoc, status); if (U_FAILURE(status)) { - return NULL; + return NULL; } SharedCalendar *shared = new SharedCalendar(calendar); if (shared == NULL) { @@ -232,7 +234,7 @@ static ECalType getCalendarType(const char *s) { return CALTYPE_UNKNOWN; } -static UBool isStandardSupportedKeyword(const char *keyword, UErrorCode& status) { +static UBool isStandardSupportedKeyword(const char *keyword, UErrorCode& status) { if(U_FAILURE(status)) { return FALSE; } @@ -289,7 +291,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) { if (U_FAILURE(status)) { return CALTYPE_GREGORIAN; } - + // Read preferred calendar values from supplementalData calendarPreference UResourceBundle *rb = ures_openDirect(NULL, "supplementalData", &status); ures_getByKey(rb, "calendarPreferenceData", rb, &status); @@ -392,7 +394,7 @@ static Calendar *createStandardCalendar(ECalType calType, const Locale &loc, UEr // ------------------------------------- /** -* a Calendar Factory which creates the "basic" calendar types, that is, those +* a Calendar Factory which creates the "basic" calendar types, that is, those * shipped with ICU. */ class BasicCalendarFactory : public LocaleKeyFactory { @@ -406,7 +408,7 @@ class BasicCalendarFactory : public LocaleKeyFactory { virtual ~BasicCalendarFactory(); protected: - //virtual UBool isSupportedID( const UnicodeString& id, UErrorCode& status) const { + //virtual UBool isSupportedID( const UnicodeString& id, UErrorCode& status) const { // if(U_FAILURE(status)) { // return FALSE; // } @@ -464,7 +466,7 @@ class BasicCalendarFactory : public LocaleKeyFactory { BasicCalendarFactory::~BasicCalendarFactory() {} -/** +/** * A factory which looks up the DefaultCalendar resource to determine which class of calendar to use */ @@ -508,7 +510,7 @@ class CalendarService : public ICULocaleService { virtual UObject* cloneInstance(UObject* instance) const { UnicodeString *s = dynamic_cast(instance); if(s != NULL) { - return s->clone(); + return s->clone(); } else { #ifdef U_DEBUG_CALSVC_F UErrorCode status2 = U_ZERO_ERROR; @@ -571,7 +573,7 @@ initCalendarService(UErrorCode &status) fprintf(stderr, "Registering classes..\n"); #endif - // Register all basic instances. + // Register all basic instances. gService->registerFactory(new BasicCalendarFactory(),status); #ifdef U_DEBUG_CALSVC @@ -587,7 +589,7 @@ initCalendarService(UErrorCode &status) } } -static ICULocaleService* +static ICULocaleService* getCalendarService(UErrorCode &status) { umtx_initOnce(gServiceInitOnce, &initCalendarService, status); @@ -634,7 +636,9 @@ static const int32_t kCalendarLimits[UCAL_FIELD_COUNT][4] = { }; // Resource bundle tags read by this class +static const char gCalendar[] = "calendar"; static const char gMonthNames[] = "monthNames"; +static const char gGregorian[] = "gregorian"; // Data flow in Calendar // --------------------- @@ -739,7 +743,7 @@ fSkippedWallTime(UCAL_WALLTIME_LAST) return; } - clear(); + clear(); fZone = zone; setWeekData(aLocale, NULL, success); } @@ -846,7 +850,7 @@ Calendar::createInstance(const Locale& aLocale, UErrorCode& success) return createInstance(TimeZone::createDefault(), aLocale, success); } -// ------------------------------------- Adopting +// ------------------------------------- Adopting // Note: this is the bottleneck that actually calls the service routines. @@ -899,7 +903,7 @@ Calendar::makeInstance(const Locale& aLocale, UErrorCode& success) { c = (Calendar*)getCalendarService(success)->get(l, LocaleKey::KIND_ANY, &actualLoc2, success); if(U_FAILURE(success) || !c) { - if(U_SUCCESS(success)) { + if(U_SUCCESS(success)) { success = U_INTERNAL_PROGRAM_ERROR; // Propagate some err } return NULL; @@ -907,7 +911,7 @@ Calendar::makeInstance(const Locale& aLocale, UErrorCode& success) { str = dynamic_cast(c); if(str != NULL) { - // recursed! Second lookup returned a UnicodeString. + // recursed! Second lookup returned a UnicodeString. // Perhaps DefaultCalendar{} was set to another locale. #ifdef U_DEBUG_CALSVC char tmp[200]; @@ -981,7 +985,7 @@ Calendar::createInstance(const TimeZone& zone, const Locale& aLocale, UErrorCode if(U_SUCCESS(success) && c) { c->setTimeZone(zone); } - return c; + return c; } // ------------------------------------- @@ -1013,7 +1017,7 @@ Calendar::operator==(const Calendar& that) const U_SUCCESS(status); } -UBool +UBool Calendar::isEquivalentTo(const Calendar& other) const { return typeid(*this) == typeid(other) && @@ -1095,13 +1099,13 @@ Calendar::getNow() * Gets this Calendar's current time as a long. * @return the current time as UTC milliseconds from the epoch. */ -double +double Calendar::getTimeInMillis(UErrorCode& status) const { - if(U_FAILURE(status)) + if(U_FAILURE(status)) return 0.0; - if ( ! fIsTimeSet) + if ( ! fIsTimeSet) ((Calendar*)this)->updateTime(status); /* Test for buffer overflows */ @@ -1120,9 +1124,9 @@ Calendar::getTimeInMillis(UErrorCode& status) const * when in lenient mode the out of range values are pinned to their respective min/max. * @param date the new time in UTC milliseconds from the epoch. */ -void +void Calendar::setTimeInMillis( double millis, UErrorCode& status ) { - if(U_FAILURE(status)) + if(U_FAILURE(status)) return; if (millis > MAX_MILLIS) { @@ -1136,8 +1140,8 @@ Calendar::setTimeInMillis( double millis, UErrorCode& status ) { if(isLenient()) { millis = MIN_MILLIS; } else { - status = U_ILLEGAL_ARGUMENT_ERROR; - return; + status = U_ILLEGAL_ARGUMENT_ERROR; + return; } } @@ -1150,7 +1154,7 @@ Calendar::setTimeInMillis( double millis, UErrorCode& status ) { fStamp[i] = kUnset; fIsSet[i] = FALSE; } - + } @@ -1475,7 +1479,7 @@ void Calendar::computeFields(UErrorCode &ec) double localMillis = internalGetTime(); int32_t rawOffset, dstOffset; getTimeZone().getOffset(localMillis, FALSE, rawOffset, dstOffset, ec); - localMillis += (rawOffset + dstOffset); + localMillis += (rawOffset + dstOffset); // Mark fields as set. Do this before calling handleComputeFields(). uint32_t mask = //fInternalSetMask; @@ -1484,7 +1488,7 @@ void Calendar::computeFields(UErrorCode &ec) (1 << UCAL_MONTH) | (1 << UCAL_DAY_OF_MONTH) | // = UCAL_DATE (1 << UCAL_DAY_OF_YEAR) | - (1 << UCAL_EXTENDED_YEAR); + (1 << UCAL_EXTENDED_YEAR); for (int32_t i=0; iset(field, fieldValue); if (work->get(field, status) != fieldValue) { break; - } + } else { result = fieldValue; fieldValue--; @@ -2796,7 +2800,7 @@ void Calendar::validateField(UCalendarDateFields field, UErrorCode &status) { case UCAL_DAY_OF_WEEK_IN_MONTH: if (internalGet(field) == 0) { #if defined (U_DEBUG_CAL) - fprintf(stderr, "%s:%d: ILLEGAL ARG because DOW in month cannot be 0\n", + fprintf(stderr, "%s:%d: ILLEGAL ARG because DOW in month cannot be 0\n", __FILE__, __LINE__); #endif status = U_ILLEGAL_ARGUMENT_ERROR; // "DAY_OF_WEEK_IN_MONTH cannot be zero" @@ -2822,7 +2826,7 @@ void Calendar::validateField(UCalendarDateFields field, int32_t min, int32_t max int32_t value = fFields[field]; if (value < min || value > max) { #if defined (U_DEBUG_CAL) - fprintf(stderr, "%s:%d: ILLEGAL ARG because of field %s out of range %d..%d at %d\n", + fprintf(stderr, "%s:%d: ILLEGAL ARG because of field %s out of range %d..%d at %d\n", __FILE__, __LINE__,fldName(field),min,max,value); #endif status = U_ILLEGAL_ARGUMENT_ERROR; @@ -2888,7 +2892,7 @@ UCalendarDateFields Calendar::resolveFields(const UFieldResolutionTable* precede } const UFieldResolutionTable Calendar::kDatePrecedence[] = -{ +{ { { UCAL_DAY_OF_MONTH, kResolveSTOP }, { UCAL_WEEK_OF_YEAR, UCAL_DAY_OF_WEEK, kResolveSTOP }, @@ -2909,12 +2913,12 @@ const UFieldResolutionTable Calendar::kDatePrecedence[] = { kResolveRemap | UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DAY_OF_WEEK, kResolveSTOP }, { kResolveRemap | UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DOW_LOCAL, kResolveSTOP }, { kResolveSTOP } - }, + }, {{kResolveSTOP}} }; -const UFieldResolutionTable Calendar::kDOWPrecedence[] = +const UFieldResolutionTable Calendar::kDOWPrecedence[] = { { { UCAL_DAY_OF_WEEK,kResolveSTOP, kResolveSTOP }, @@ -2925,7 +2929,7 @@ const UFieldResolutionTable Calendar::kDOWPrecedence[] = }; // precedence for calculating a year -const UFieldResolutionTable Calendar::kYearPrecedence[] = +const UFieldResolutionTable Calendar::kYearPrecedence[] = { { { UCAL_YEAR, kResolveSTOP }, @@ -3174,7 +3178,7 @@ int32_t Calendar::computeZoneOffset(double millis, int32_t millisInDay, UErrorCo return rawOffset + dstOffset; } -int32_t Calendar::computeJulianDay() +int32_t Calendar::computeJulianDay() { // We want to see if any of the date fields is newer than the // JULIAN_DAY. If not, then we use JULIAN_DAY. If so, then we do @@ -3216,9 +3220,9 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { internalSet(UCAL_EXTENDED_YEAR, year); } -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "%s:%d: bestField= %s - y=%d\n", __FILE__, __LINE__, fldName(bestField), year); -#endif +#endif // Get the Julian day of the day BEFORE the start of this year. // If useMonth is true, get the day before the start of the month. @@ -3300,9 +3304,9 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { date += ((monthLength - date) / 7 + dim + 1) * 7; } } else { -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "%s:%d - bf= %s\n", __FILE__, __LINE__, fldName(bestField)); -#endif +#endif if(bestField == UCAL_WEEK_OF_YEAR) { // ------------------------------------- WOY ------------- if(!isSet(UCAL_YEAR_WOY) || // YWOY not set at all or @@ -3313,30 +3317,30 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { int32_t woy = internalGet(bestField); int32_t nextJulianDay = handleComputeMonthStart(year+1, 0, FALSE); // jd of day before jan 1 - int32_t nextFirst = julianDayToDayOfWeek(nextJulianDay + 1) - firstDayOfWeek; + int32_t nextFirst = julianDayToDayOfWeek(nextJulianDay + 1) - firstDayOfWeek; if (nextFirst < 0) { // 0..6 ldow of Jan 1 nextFirst += 7; } if(woy==1) { // FIRST WEEK --------------------------------- -#if defined (U_DEBUG_CAL) - fprintf(stderr, "%s:%d - woy=%d, yp=%d, nj(%d)=%d, nf=%d", __FILE__, __LINE__, - internalGet(bestField), resolveFields(kYearPrecedence), year+1, +#if defined (U_DEBUG_CAL) + fprintf(stderr, "%s:%d - woy=%d, yp=%d, nj(%d)=%d, nf=%d", __FILE__, __LINE__, + internalGet(bestField), resolveFields(kYearPrecedence), year+1, nextJulianDay, nextFirst); fprintf(stderr, " next: %d DFW, min=%d \n", (7-nextFirst), getMinimalDaysInFirstWeek() ); -#endif +#endif // nextFirst is now the localized DOW of Jan 1 of y-woy+1 if((nextFirst > 0) && // Jan 1 starts on FDOW (7-nextFirst) >= getMinimalDaysInFirstWeek()) // or enough days in the week { // Jan 1 of (yearWoy+1) is in yearWoy+1 - recalculate JD to next year -#if defined (U_DEBUG_CAL) - fprintf(stderr, "%s:%d - was going to move JD from %d to %d [d%d]\n", __FILE__, __LINE__, +#if defined (U_DEBUG_CAL) + fprintf(stderr, "%s:%d - was going to move JD from %d to %d [d%d]\n", __FILE__, __LINE__, julianDay, nextJulianDay, (nextJulianDay-julianDay)); -#endif +#endif julianDay = nextJulianDay; // recalculate 'first' [0-based local dow of jan 1] @@ -3347,7 +3351,7 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { // recalculate date. date = 1 - first + dowLocal; } - } else if(woy>=getLeastMaximum(bestField)) { + } else if(woy>=getLeastMaximum(bestField)) { // could be in the last week- find out if this JD would overstep int32_t testDate = date; if ((7 - first) < getMinimalDaysInFirstWeek()) { @@ -3357,7 +3361,7 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { // Now adjust for the week number. testDate += 7 * (woy - 1); -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "%s:%d - y=%d, y-1=%d doy%d, njd%d (C.F. %d)\n", __FILE__, __LINE__, year, year-1, testDate, julianDay+testDate, nextJulianDay); #endif @@ -3371,7 +3375,7 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { } date = 1 - first + dowLocal; -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "%s:%d - date now %d, jd%d, ywoy%d\n", __FILE__, __LINE__, date, julianDay, year-1); #endif @@ -3396,13 +3400,13 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { } int32_t -Calendar::getDefaultMonthInYear(int32_t /*eyear*/) +Calendar::getDefaultMonthInYear(int32_t /*eyear*/) { return 0; } int32_t -Calendar::getDefaultDayInMonth(int32_t /*eyear*/, int32_t /*month*/) +Calendar::getDefaultDayInMonth(int32_t /*eyear*/, int32_t /*month*/) { return 1; } @@ -3432,13 +3436,13 @@ int32_t Calendar::getLocalDOW() int32_t Calendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy) { - // We have UCAL_YEAR_WOY and UCAL_WEEK_OF_YEAR - from those, determine + // We have UCAL_YEAR_WOY and UCAL_WEEK_OF_YEAR - from those, determine // what year we fall in, so that other code can set it properly. // (code borrowed from computeWeekFields and handleComputeJulianDay) //return yearWoy; // First, we need a reliable DOW. - UCalendarDateFields bestField = resolveFields(kDatePrecedence); // !! Note: if subclasses have a different table, they should override handleGetExtendedYearFromWeekFields + UCalendarDateFields bestField = resolveFields(kDatePrecedence); // !! Note: if subclasses have a different table, they should override handleGetExtendedYearFromWeekFields // Now, a local DOW int32_t dowLocal = getLocalDOW(); // 0..6 @@ -3471,9 +3475,9 @@ int32_t Calendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t w int32_t minDays = getMinimalDaysInFirstWeek(); UBool jan1InPrevYear = FALSE; // January 1st in the year of WOY is the 1st week? (i.e. first week is < minimal ) - //UBool nextJan1InPrevYear = FALSE; // January 1st of Year of WOY + 1 is in the first week? + //UBool nextJan1InPrevYear = FALSE; // January 1st of Year of WOY + 1 is in the first week? - if((7 - first) < minDays) { + if((7 - first) < minDays) { jan1InPrevYear = TRUE; } @@ -3496,8 +3500,8 @@ int32_t Calendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t w return yearWoy; // in this year } } - } else if(woy >= getLeastMaximum(bestField)) { - // we _might_ be in the last week.. + } else if(woy >= getLeastMaximum(bestField)) { + // we _might_ be in the last week.. int32_t jd = // Calculate JD of our target day: jan1Start + // JD of Jan 1 (7-first) + // days in the first week (Jan 1.. ) @@ -3534,7 +3538,7 @@ int32_t Calendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t w } //(internalGet(UCAL_DATE) <= (7-first)) /* && in minDow */ ) { - //within 1st week and in this month.. + //within 1st week and in this month.. //return yearWoy+1; return yearWoy; @@ -3667,7 +3671,7 @@ void Calendar::prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErr dow += 7; } } -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "prepareGetActualHelper(WOM/WOY) - dow=%d\n", dow); #endif set(UCAL_DAY_OF_WEEK, dow); @@ -3683,7 +3687,7 @@ void Calendar::prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErr int32_t Calendar::getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const { -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "getActualHelper(%d,%d .. %d, %s)\n", field, startValue, endValue, u_errorName(status)); #endif if (startValue == endValue) { @@ -3719,7 +3723,7 @@ int32_t Calendar::getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t result = startValue; if ((work->get(field, status) != startValue && field != UCAL_WEEK_OF_MONTH && delta > 0 ) || U_FAILURE(status)) { -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "getActualHelper(fld %d) - got %d (not %d) - %s\n", field, work->get(field,status), startValue, u_errorName(status)); #endif } else { @@ -3736,7 +3740,7 @@ int32_t Calendar::getActualHelper(UCalendarDateFields field, int32_t startValue, } while (startValue != endValue); } delete work; -#if defined (U_DEBUG_CAL) +#if defined (U_DEBUG_CAL) fprintf(stderr, "getActualHelper(%d) = %d\n", field, result); #endif return result; @@ -3763,18 +3767,18 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& // Since week and weekend data is territory based instead of language based, // we may need to tweak the locale that we are using to try to get the appropriate // values, using the following logic: - // 1). If the locale has a language but no territory, use the territory as defined by + // 1). If the locale has a language but no territory, use the territory as defined by // the likely subtags. // 2). If the locale has a script designation then we ignore it, // then remove it ( i.e. "en_Latn_US" becomes "en_US" ) - + char minLocaleID[ULOC_FULLNAME_CAPACITY] = { 0 }; UErrorCode myStatus = U_ZERO_ERROR; uloc_minimizeSubtags(desiredLocale.getName(),minLocaleID,ULOC_FULLNAME_CAPACITY,&myStatus); Locale min = Locale::createFromName(minLocaleID); Locale useLocale; - if ( uprv_strlen(desiredLocale.getCountry()) == 0 || + if ( uprv_strlen(desiredLocale.getCountry()) == 0 || (uprv_strlen(desiredLocale.getScript()) > 0 && uprv_strlen(min.getScript()) == 0) ) { char maxLocaleID[ULOC_FULLNAME_CAPACITY] = { 0 }; myStatus = U_ZERO_ERROR; @@ -3784,19 +3788,37 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& } else { useLocale = Locale(desiredLocale); } - - /* The code here is somewhat of a hack, since week data and weekend data aren't really tied to + + /* The code here is somewhat of a hack, since week data and weekend data aren't really tied to a specific calendar, they aren't truly locale data. But this is the only place where valid and actual locale can be set, so we take a shot at it here by loading a representative resource from the calendar data. The code used to use the dateTimeElements resource to get first day of week data, but this was moved to supplemental data under ticket 7755. (JCE) */ - CalendarData calData(useLocale,type,status); - UResourceBundle *monthNames = calData.getByKey(gMonthNames,status); + // Get the monthNames resource bundle for the calendar 'type'. Fallback to gregorian if the resource is not + // found. + LocalUResourceBundlePointer calData(ures_open(NULL, useLocale.getBaseName(), &status)); + ures_getByKey(calData.getAlias(), gCalendar, calData.getAlias(), &status); + + LocalUResourceBundlePointer monthNames; + if (type != NULL && *type != '\0' && uprv_strcmp(type, gGregorian) != 0) { + monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), type, NULL, &status)); + ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames, + monthNames.getAlias(), &status); + } + + if (monthNames.isNull() || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), gGregorian, + monthNames.orphan(), &status)); + ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames, + monthNames.getAlias(), &status); + } + if (U_SUCCESS(status)) { U_LOCALE_BASED(locBased,*this); - locBased.setLocaleIDs(ures_getLocaleByType(monthNames, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(monthNames, ULOC_ACTUAL_LOCALE, &status)); + locBased.setLocaleIDs(ures_getLocaleByType(monthNames.getAlias(), ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(monthNames.getAlias(), ULOC_ACTUAL_LOCALE, &status)); } else { status = U_USING_FALLBACK_WARNING; return; @@ -3815,9 +3837,6 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& } if (U_FAILURE(status)) { -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, " Failure loading weekData from supplemental = %s\n", u_errorName(status)); -#endif status = U_USING_FALLBACK_WARNING; } else { int32_t arrLen; @@ -3846,8 +3865,8 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& * and areFieldsSet. Callers should check isTimeSet and only * call this method if isTimeSet is false. */ -void -Calendar::updateTime(UErrorCode& status) +void +Calendar::updateTime(UErrorCode& status) { computeTime(status); if(U_FAILURE(status)) @@ -3856,14 +3875,14 @@ Calendar::updateTime(UErrorCode& status) // If we are lenient, we need to recompute the fields to normalize // the values. Also, if we haven't set all the fields yet (i.e., // in a newly-created object), we need to fill in the fields. [LIU] - if (isLenient() || ! fAreAllFieldsSet) + if (isLenient() || ! fAreAllFieldsSet) fAreFieldsSet = FALSE; fIsTimeSet = TRUE; fAreFieldsVirtuallySet = FALSE; } -Locale +Locale Calendar::getLocale(ULocDataLocaleType type, UErrorCode& status) const { U_LOCALE_BASED(locBased, *this); return locBased.getLocale(type, status); @@ -3926,3 +3945,4 @@ U_NAMESPACE_END //eof + diff --git a/deps/icu-small/source/i18n/casetrn.cpp b/deps/icu-small/source/i18n/casetrn.cpp index 602c22914f913f..9c8c8b947c9113 100644 --- a/deps/icu-small/source/i18n/casetrn.cpp +++ b/deps/icu-small/source/i18n/casetrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -88,7 +90,7 @@ UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(CaseMapTransliterator) /** * Constructs a transliterator. */ -CaseMapTransliterator::CaseMapTransliterator(const UnicodeString &id, UCaseMapFull *map) : +CaseMapTransliterator::CaseMapTransliterator(const UnicodeString &id, UCaseMapFull *map) : Transliterator(id, 0), fCsp(ucase_getSingleton()), fMap(map) @@ -133,7 +135,7 @@ CaseMapTransliterator::CaseMapTransliterator(const CaseMapTransliterator& o) : * Implements {@link Transliterator#handleTransliterate}. */ void CaseMapTransliterator::handleTransliterate(Replaceable& text, - UTransPosition& offsets, + UTransPosition& offsets, UBool isIncremental) const { if (offsets.start >= offsets.limit) { diff --git a/deps/icu-small/source/i18n/casetrn.h b/deps/icu-small/source/i18n/casetrn.h index b20cb8e9692c19..df8076073f02f6 100644 --- a/deps/icu-small/source/i18n/casetrn.h +++ b/deps/icu-small/source/i18n/casetrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -79,7 +81,7 @@ class CaseMapTransliterator : public Transliterator { * pos.contextLimit. Otherwise, assume the text is complete. */ virtual void handleTransliterate(Replaceable& text, - UTransPosition& offsets, + UTransPosition& offsets, UBool isIncremental) const; const UCaseProps *fCsp; diff --git a/deps/icu-small/source/i18n/cecal.cpp b/deps/icu-small/source/i18n/cecal.cpp index 9c2759ba757566..17bf816e72d953 100644 --- a/deps/icu-small/source/i18n/cecal.cpp +++ b/deps/icu-small/source/i18n/cecal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2009, International Business Machines Corporation and * @@ -52,7 +54,7 @@ CECalendar::CECalendar(const Locale& aLocale, UErrorCode& success) setTimeInMillis(getNow(), success); } -CECalendar::CECalendar (const CECalendar& other) +CECalendar::CECalendar (const CECalendar& other) : Calendar(other) { } diff --git a/deps/icu-small/source/i18n/cecal.h b/deps/icu-small/source/i18n/cecal.h index 471d88933e83f8..ce6f4209ca5c74 100644 --- a/deps/icu-small/source/i18n/cecal.h +++ b/deps/icu-small/source/i18n/cecal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2008, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/chnsecal.cpp b/deps/icu-small/source/i18n/chnsecal.cpp index d2c9e9ea0bec33..4de390abcefd64 100644 --- a/deps/icu-small/source/i18n/chnsecal.cpp +++ b/deps/icu-small/source/i18n/chnsecal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2007-2014, International Business Machines Corporation @@ -149,7 +151,7 @@ ChineseCalendar::~ChineseCalendar() { } -const char *ChineseCalendar::getType() const { +const char *ChineseCalendar::getType() const { return "chinese"; } @@ -253,7 +255,7 @@ int32_t ChineseCalendar::handleGetMonthLength(int32_t extendedYear, int32_t mont *
  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -308,7 +310,7 @@ const UFieldResolutionTable* ChineseCalendar::getFieldResolutionTable() const { /** * Return the Julian day number of day before the first day of the * given month in the given extended year. - * + * *

    Note: This method reads the IS_LEAP_MONTH field to determine * whether the given month is a leap month. * @param eyear the extended year @@ -333,7 +335,7 @@ int32_t ChineseCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, U int32_t gyear = eyear + fEpochYear - 1; // Gregorian year int32_t theNewYear = newYear(gyear); int32_t newMoon = newMoonNear(theNewYear + month * 29, TRUE); - + int32_t julianDay = newMoon + kEpochStartAsJulianDay; // Save fields for later restoration @@ -347,10 +349,10 @@ int32_t ChineseCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, U nonConstThis->computeGregorianFields(julianDay, status); if (U_FAILURE(status)) return 0; - + // This will modify the MONTH and IS_LEAP_MONTH fields (only) nonConstThis->computeChineseFields(newMoon, getGregorianYear(), - getGregorianMonth(), FALSE); + getGregorianMonth(), FALSE); if (month != internalGet(UCAL_MONTH) || isLeapMonth != internalGet(UCAL_IS_LEAP_MONTH)) { @@ -377,7 +379,7 @@ void ChineseCalendar::add(UCalendarDateFields field, int32_t amount, UErrorCode& if (U_FAILURE(status)) break; int32_t day = get(UCAL_JULIAN_DAY, status) - kEpochStartAsJulianDay; // Get local day if (U_FAILURE(status)) break; - int32_t moon = day - dom + 1; // New moon + int32_t moon = day - dom + 1; // New moon offsetMonth(moon, dom, amount); } break; @@ -468,13 +470,13 @@ void ChineseCalendar::roll(EDateFields field, int32_t amount, UErrorCode& status /** * Convert local days to UTC epoch milliseconds. - * This is not an accurate conversion in that getTimezoneOffset - * takes the milliseconds in GMT (not local time). In theory, more - * accurate algorithm can be implemented but practically we do not need - * to go through that complication as long as the historical timezone - * changes did not happen around the 'tricky' new moon (new moon around - * midnight). - * + * This is not an accurate conversion in that getTimezoneOffset + * takes the milliseconds in GMT (not local time). In theory, more + * accurate algorithm can be implemented but practically we do not need + * to go through that complication as long as the historical timezone + * changes did not happen around the 'tricky' new moon (new moon around + * midnight). + * * @param days days after January 1, 1970 0:00 in the astronomical base zone * @return milliseconds after January 1, 1970 0:00 GMT */ @@ -485,7 +487,7 @@ double ChineseCalendar::daysToMillis(double days) const { UErrorCode status = U_ZERO_ERROR; fZoneAstroCalc->getOffset(millis, FALSE, rawOffset, dstOffset, status); if (U_SUCCESS(status)) { - return millis - (double)(rawOffset + dstOffset); + return millis - (double)(rawOffset + dstOffset); } } return millis - (double)CHINA_OFFSET; @@ -502,7 +504,7 @@ double ChineseCalendar::millisToDays(double millis) const { UErrorCode status = U_ZERO_ERROR; fZoneAstroCalc->getOffset(millis, FALSE, rawOffset, dstOffset, status); if (U_SUCCESS(status)) { - return ClockMath::floorDivide(millis + (double)(rawOffset + dstOffset), kOneDay); + return ClockMath::floorDivide(millis + (double)(rawOffset + dstOffset), kOneDay); } } return ClockMath::floorDivide(millis + (double)CHINA_OFFSET, kOneDay); @@ -562,7 +564,7 @@ int32_t ChineseCalendar::winterSolstice(int32_t gyear) const { * new moon after or before days */ int32_t ChineseCalendar::newMoonNear(double days, UBool after) const { - + umtx_lock(&astroLock); if(gChineseCalendarAstro == NULL) { gChineseCalendarAstro = new CalendarAstronomer(); @@ -571,7 +573,7 @@ int32_t ChineseCalendar::newMoonNear(double days, UBool after) const { gChineseCalendarAstro->setTime(daysToMillis(days)); UDate newMoon = gChineseCalendarAstro->getMoonTime(CalendarAstronomer::NEW_MOON(), after); umtx_unlock(&astroLock); - + return (int32_t) millisToDays(newMoon); } @@ -594,7 +596,7 @@ int32_t ChineseCalendar::synodicMonthsBetween(int32_t day1, int32_t day2) const * @param days days after January 1, 1970 0:00 Asia/Shanghai */ int32_t ChineseCalendar::majorSolarTerm(int32_t days) const { - + umtx_lock(&astroLock); if(gChineseCalendarAstro == NULL) { gChineseCalendarAstro = new CalendarAstronomer(); @@ -711,7 +713,7 @@ void ChineseCalendar::computeChineseFields(int32_t days, int32_t gyear, int32_t if (setAllFields) { // Extended year and cycle year is based on the epoch year - + int32_t extended_year = gyear - fEpochYear; int cycle_year = gyear - CHINESE_EPOCH_YEAR; if (month < 11 || @@ -765,7 +767,7 @@ int32_t ChineseCalendar::newYear(int32_t gyear) const { int32_t newMoon1 = newMoonNear(solsticeBefore + 1, TRUE); int32_t newMoon2 = newMoonNear(newMoon1 + SYNODIC_GAP, TRUE); int32_t newMoon11 = newMoonNear(solsticeAfter + 1, FALSE); - + if (synodicMonthsBetween(newMoon1, newMoon11) == 12 && (hasNoMajorSolarTerm(newMoon1) || hasNoMajorSolarTerm(newMoon2))) { cacheValue = newMoonNear(newMoon2 + SYNODIC_GAP, TRUE); @@ -828,7 +830,7 @@ UBool ChineseCalendar::inDaylightTime(UErrorCode& status) const { // copied from GregorianCalendar - if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) + if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) return FALSE; // Force an update of the state of the Calendar. @@ -897,3 +899,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ChineseCalendar) U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/chnsecal.h b/deps/icu-small/source/i18n/chnsecal.h index ba3f943066584c..e9e9515b4638d2 100644 --- a/deps/icu-small/source/i18n/chnsecal.h +++ b/deps/icu-small/source/i18n/chnsecal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2007-2013, International Business Machines Corporation @@ -69,10 +71,10 @@ U_NAMESPACE_BEGIN * obtain a formatter for this calendar. * *

    References:

      - * + * *
    • Dershowitz and Reingold, Calendrical Calculations, * Cambridge University Press, 1997
    • - * + * *
    • Helmer Aslaksen's * * Chinese Calendar page
    • @@ -85,7 +87,7 @@ U_NAMESPACE_BEGIN *

      * This class should only be subclassed to implement variants of the Chinese lunar calendar.

      *

      - * ChineseCalendar usually should be instantiated using + * ChineseCalendar usually should be instantiated using * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a ULocale * with the tag "@calendar=chinese".

      * @@ -112,7 +114,7 @@ class U_I18N_API ChineseCalendar : public Calendar { ChineseCalendar(const Locale& aLocale, UErrorCode &success); protected: - + /** * Constructs a ChineseCalendar based on the current time in the default time zone * with the given locale, using the specified epoch year and time zone for @@ -149,7 +151,7 @@ class U_I18N_API ChineseCalendar : public Calendar { //------------------------------------------------------------------------- // Internal data.... //------------------------------------------------------------------------- - + UBool isLeapYear; int32_t fEpochYear; // Start year of this Chinese calendar instance. const TimeZone* fZoneAstroCalc; // Zone used for the astronomical calculation @@ -196,7 +198,7 @@ class U_I18N_API ChineseCalendar : public Calendar { const TimeZone* getChineseCalZoneAstroCalc(void) const; // UObject stuff - public: + public: /** * @return The class ID for this object. All objects of a given class have the * same class ID. Objects of other classes have different class IDs. @@ -261,13 +263,13 @@ class U_I18N_API ChineseCalendar : public Calendar { private: // default century stuff. /** - * Returns the beginning date of the 100-year window that dates + * Returns the beginning date of the 100-year window that dates * with 2-digit years are considered to fall within. */ UDate internalGetDefaultCenturyStart(void) const; /** - * Returns the first year of the 100-year window that dates with + * Returns the first year of the 100-year window that dates with * 2-digit years are considered to fall within. */ int32_t internalGetDefaultCenturyStartYear(void) const; diff --git a/deps/icu-small/source/i18n/choicfmt.cpp b/deps/icu-small/source/i18n/choicfmt.cpp index e739adde0ce628..f6e36a6b4898b6 100644 --- a/deps/icu-small/source/i18n/choicfmt.cpp +++ b/deps/icu-small/source/i18n/choicfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2013, International Business Machines Corporation and * @@ -10,11 +12,11 @@ * * Date Name Description * 02/19/97 aliu Converted from java. -* 03/20/97 helena Finished first cut of implementation and got rid +* 03/20/97 helena Finished first cut of implementation and got rid * of nextDouble/previousDouble and replaced with * boolean array. * 4/10/97 aliu Clean up. Modified to work on AIX. -* 06/04/97 helena Fixed applyPattern(), toPattern() and not to include +* 06/04/97 helena Fixed applyPattern(), toPattern() and not to include * wchar.h. * 07/09/97 helena Made ParsePosition into a class. * 08/06/97 nos removed overloaded constructor, fixed 'format(array)' @@ -81,11 +83,11 @@ ChoiceFormat::ChoiceFormat(const UnicodeString& newPattern, } // ------------------------------------- -// Creates a ChoiceFormat instance with the limit array and +// Creates a ChoiceFormat instance with the limit array and // format strings for each limit. -ChoiceFormat::ChoiceFormat(const double* limits, - const UnicodeString* formats, +ChoiceFormat::ChoiceFormat(const double* limits, + const UnicodeString* formats, int32_t cnt ) : constructorErrorCode(U_ZERO_ERROR), msgPattern(constructorErrorCode) @@ -95,9 +97,9 @@ ChoiceFormat::ChoiceFormat(const double* limits, // ------------------------------------- -ChoiceFormat::ChoiceFormat(const double* limits, +ChoiceFormat::ChoiceFormat(const double* limits, const UBool* closures, - const UnicodeString* formats, + const UnicodeString* formats, int32_t cnt ) : constructorErrorCode(U_ZERO_ERROR), msgPattern(constructorErrorCode) @@ -108,7 +110,7 @@ ChoiceFormat::ChoiceFormat(const double* limits, // ------------------------------------- // copy constructor -ChoiceFormat::ChoiceFormat(const ChoiceFormat& that) +ChoiceFormat::ChoiceFormat(const ChoiceFormat& that) : NumberFormat(that), constructorErrorCode(that.constructorErrorCode), msgPattern(that.msgPattern) @@ -116,8 +118,8 @@ ChoiceFormat::ChoiceFormat(const ChoiceFormat& that) } // ------------------------------------- -// Private constructor that creates a -// ChoiceFormat instance based on the +// Private constructor that creates a +// ChoiceFormat instance based on the // pattern and populates UParseError ChoiceFormat::ChoiceFormat(const UnicodeString& newPattern, @@ -248,10 +250,10 @@ ChoiceFormat::toPattern(UnicodeString& result) const } // ------------------------------------- -// Sets the limit and format arrays. +// Sets the limit and format arrays. void -ChoiceFormat::setChoices( const double* limits, - const UnicodeString* formats, +ChoiceFormat::setChoices( const double* limits, + const UnicodeString* formats, int32_t cnt ) { UErrorCode errorCode = U_ZERO_ERROR; @@ -259,11 +261,11 @@ ChoiceFormat::setChoices( const double* limits, } // ------------------------------------- -// Sets the limit and format arrays. +// Sets the limit and format arrays. void -ChoiceFormat::setChoices( const double* limits, +ChoiceFormat::setChoices( const double* limits, const UBool* closures, - const UnicodeString* formats, + const UnicodeString* formats, int32_t cnt ) { UErrorCode errorCode = U_ZERO_ERROR; @@ -342,7 +344,7 @@ ChoiceFormat::setChoices(const double* limits, // Gets the limit array. const double* -ChoiceFormat::getLimits(int32_t& cnt) const +ChoiceFormat::getLimits(int32_t& cnt) const { cnt = 0; return NULL; @@ -352,7 +354,7 @@ ChoiceFormat::getLimits(int32_t& cnt) const // Gets the closures array. const UBool* -ChoiceFormat::getClosures(int32_t& cnt) const +ChoiceFormat::getClosures(int32_t& cnt) const { cnt = 0; return NULL; @@ -374,8 +376,8 @@ ChoiceFormat::getFormats(int32_t& cnt) const // from the input number because of this. UnicodeString& -ChoiceFormat::format(int64_t number, - UnicodeString& appendTo, +ChoiceFormat::format(int64_t number, + UnicodeString& appendTo, FieldPosition& status) const { return format((double) number, appendTo, status); @@ -386,8 +388,8 @@ ChoiceFormat::format(int64_t number, // a double. UnicodeString& -ChoiceFormat::format(int32_t number, - UnicodeString& appendTo, +ChoiceFormat::format(int32_t number, + UnicodeString& appendTo, FieldPosition& status) const { return format((double) number, appendTo, status); @@ -397,8 +399,8 @@ ChoiceFormat::format(int32_t number, // Formats a double number. UnicodeString& -ChoiceFormat::format(double number, - UnicodeString& appendTo, +ChoiceFormat::format(double number, + UnicodeString& appendTo, FieldPosition& /*pos*/) const { if (msgPattern.countParts() == 0) { @@ -462,7 +464,7 @@ ChoiceFormat::findSubMessage(const MessagePattern &pattern, int32_t partIndex, d // ------------------------------------- // Formats an array of objects. Checks if the data type of the objects -// to get the right value for formatting. +// to get the right value for formatting. UnicodeString& ChoiceFormat::format(const Formattable* objs, @@ -493,7 +495,7 @@ ChoiceFormat::format(const Formattable* objs, // ------------------------------------- void -ChoiceFormat::parse(const UnicodeString& text, +ChoiceFormat::parse(const UnicodeString& text, Formattable& result, ParsePosition& pos) const { diff --git a/deps/icu-small/source/i18n/coleitr.cpp b/deps/icu-small/source/i18n/coleitr.cpp index c842663ba183cf..d99f191c5ddd3b 100644 --- a/deps/icu-small/source/i18n/coleitr.cpp +++ b/deps/icu-small/source/i18n/coleitr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and @@ -18,7 +20,7 @@ * 08/03/98 erm Synched with 1.2 version of CollationElementIterator.java * 12/10/99 aliu Ported Thai collation support from Java. * 01/25/01 swquek Modified to a C++ wrapper calling C APIs (ucoliter.h) -* 02/19/01 swquek Removed CollationElementIterator() since it is +* 02/19/01 swquek Removed CollationElementIterator() since it is * private constructor and no calls are made to it * 2012-2014 markus Rewritten in C++ again. */ @@ -50,7 +52,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CollationElementIterator) /* CollationElementIterator public constructor/destructor ------------------ */ CollationElementIterator::CollationElementIterator( - const CollationElementIterator& other) + const CollationElementIterator& other) : UObject(other), iter_(NULL), rbc_(NULL), otherHalf_(0), dir_(0), offsets_(NULL) { *this = other; } @@ -95,7 +97,7 @@ int32_t CollationElementIterator::getOffset() const /** * Get the ordering priority of the next character in the string. -* @return the next character's ordering. Returns NULLORDER if an error has +* @return the next character's ordering. Returns NULLORDER if an error has * occured or if the end of string has been reached */ int32_t CollationElementIterator::next(UErrorCode& status) @@ -158,7 +160,7 @@ UBool CollationElementIterator::operator==( /** * Get the ordering priority of the previous collation element in the string. * @param status the error code status. -* @return the previous element's ordering. Returns NULLORDER if an error has +* @return the previous element's ordering. Returns NULLORDER if an error has * occured or if the start of string has been reached. */ int32_t CollationElementIterator::previous(UErrorCode& status) @@ -224,7 +226,7 @@ void CollationElementIterator::reset() dir_ = 0; } -void CollationElementIterator::setOffset(int32_t newOffset, +void CollationElementIterator::setOffset(int32_t newOffset, UErrorCode& status) { if (U_FAILURE(status)) { return; } @@ -294,10 +296,10 @@ void CollationElementIterator::setText(const UnicodeString& source, } // Sets the source to the new character iterator. -void CollationElementIterator::setText(CharacterIterator& source, +void CollationElementIterator::setText(CharacterIterator& source, UErrorCode& status) { - if (U_FAILURE(status)) + if (U_FAILURE(status)) return; source.getText(string_); @@ -320,7 +322,7 @@ int32_t CollationElementIterator::strengthOrder(int32_t order) const /* CollationElementIterator private constructors/destructors --------------- */ -/** +/** * This is the "real" constructor for this class; it constructs an iterator * over the source text using the specified collator */ @@ -332,8 +334,8 @@ CollationElementIterator::CollationElementIterator( setText(source, status); } -/** -* This is the "real" constructor for this class; it constructs an iterator over +/** +* This is the "real" constructor for this class; it constructs an iterator over * the source text using the specified collator */ CollationElementIterator::CollationElementIterator( diff --git a/deps/icu-small/source/i18n/coll.cpp b/deps/icu-small/source/i18n/coll.cpp index 6a8dc1c0d06b3f..90a6a4709d3803 100644 --- a/deps/icu-small/source/i18n/coll.cpp +++ b/deps/icu-small/source/i18n/coll.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2014, International Business Machines Corporation and @@ -31,14 +33,14 @@ * 05/06/97 helena Added memory allocation error detection. * 05/08/97 helena Added createInstance(). * 6/20/97 helena Java class name change. - * 04/23/99 stephen Removed EDecompositionMode, merged with + * 04/23/99 stephen Removed EDecompositionMode, merged with * Normalizer::EMode * 11/23/9 srl Inlining of some critical functions * 01/29/01 synwee Modified into a C++ wrapper calling C APIs (ucol.h) * 2012-2014 markus Rewritten in C++ again. */ -#include "utypeinfo.h" // for 'typeid' to work +#include "utypeinfo.h" // for 'typeid' to work #include "unicode/utypes.h" @@ -110,8 +112,8 @@ CollatorFactory::visible(void) const { //------------------------------------------- -UnicodeString& -CollatorFactory::getDisplayName(const Locale& objectLocale, +UnicodeString& +CollatorFactory::getDisplayName(const Locale& objectLocale, const Locale& displayLocale, UnicodeString& result) { @@ -139,7 +141,7 @@ ICUCollatorFactory::create(const ICUServiceKey& key, const ICUService* /* servic // default LocaleFactory uses currentLocale since that's the one vetted by handlesKey // but for ICU rb resources we use the actual one since it will fallback again lkey.canonicalLocale(loc); - + return Collator::makeInstance(loc, status); } return NULL; @@ -161,7 +163,7 @@ class ICUCollatorService : public ICULocaleService { virtual UObject* cloneInstance(UObject* instance) const { return ((Collator*)instance)->clone(); } - + virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* actualID, UErrorCode& status) const { LocaleKey& lkey = (LocaleKey&)key; if (actualID) { @@ -174,7 +176,7 @@ class ICUCollatorService : public ICULocaleService { lkey.canonicalLocale(loc); return Collator::makeInstance(loc, status); } - + virtual UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const { UnicodeString ar; if (actualReturn == NULL) { @@ -198,7 +200,7 @@ static void U_CALLCONV initService() { } -static ICULocaleService* +static ICULocaleService* getService(void) { umtx_initOnce(gServiceInitOnce, &initService); @@ -208,7 +210,7 @@ getService(void) // ------------------------------------- static inline UBool -hasService(void) +hasService(void) { UBool retVal = !gServiceInitOnce.isReset() && (getService() != NULL); return retVal; @@ -216,7 +218,7 @@ hasService(void) #endif /* UCONFIG_NO_SERVICE */ -static void U_CALLCONV +static void U_CALLCONV initAvailableLocaleList(UErrorCode &status) { U_ASSERT(availableLocaleListCount == 0); U_ASSERT(availableLocaleList == NULL); @@ -224,15 +226,15 @@ initAvailableLocaleList(UErrorCode &status) { UResourceBundle *index = NULL; UResourceBundle installed; int32_t i = 0; - + ures_initStackObject(&installed); index = ures_openDirect(U_ICUDATA_COLL, "res_index", &status); ures_getByKey(index, "InstalledLocales", &installed, &status); - + if(U_SUCCESS(status)) { availableLocaleListCount = ures_getSize(&installed); availableLocaleList = new Locale[availableLocaleListCount]; - + if (availableLocaleList != NULL) { ures_resetIterator(&installed); while(ures_hasNext(&installed)) { @@ -419,7 +421,7 @@ void setAttributesFromKeywords(const Locale &loc, Collator &coll, UErrorCode &er } // namespace -Collator* U_EXPORT2 Collator::createInstance(UErrorCode& success) +Collator* U_EXPORT2 Collator::createInstance(UErrorCode& success) { return createInstance(Locale::getDefault(), success); } @@ -427,7 +429,7 @@ Collator* U_EXPORT2 Collator::createInstance(UErrorCode& success) Collator* U_EXPORT2 Collator::createInstance(const Locale& desiredLocale, UErrorCode& status) { - if (U_FAILURE(status)) + if (U_FAILURE(status)) return 0; if (desiredLocale.isBogus()) { // Locale constructed from malformed locale ID or language tag. @@ -479,7 +481,7 @@ Collator::safeClone() const { } // implement deprecated, previously abstract method -Collator::EComparisonResult Collator::compare(const UnicodeString& source, +Collator::EComparisonResult Collator::compare(const UnicodeString& source, const UnicodeString& target) const { UErrorCode ec = U_ZERO_ERROR; @@ -497,7 +499,7 @@ Collator::EComparisonResult Collator::compare(const UnicodeString& source, // implement deprecated, previously abstract method Collator::EComparisonResult Collator::compare(const UChar* source, int32_t sourceLength, - const UChar* target, int32_t targetLength) + const UChar* target, int32_t targetLength) const { UErrorCode ec = U_ZERO_ERROR; @@ -526,21 +528,21 @@ UCollationResult Collator::compareUTF8(const StringPiece &source, return compare(sIter, tIter, status); } -UBool Collator::equals(const UnicodeString& source, +UBool Collator::equals(const UnicodeString& source, const UnicodeString& target) const { UErrorCode ec = U_ZERO_ERROR; return (compare(source, target, ec) == UCOL_EQUAL); } -UBool Collator::greaterOrEqual(const UnicodeString& source, +UBool Collator::greaterOrEqual(const UnicodeString& source, const UnicodeString& target) const { UErrorCode ec = U_ZERO_ERROR; return (compare(source, target, ec) != UCOL_LESS); } -UBool Collator::greater(const UnicodeString& source, +UBool Collator::greater(const UnicodeString& source, const UnicodeString& target) const { UErrorCode ec = U_ZERO_ERROR; @@ -549,7 +551,7 @@ UBool Collator::greater(const UnicodeString& source, // this API ignores registered collators, since it returns an // array of indefinite lifetime -const Locale* U_EXPORT2 Collator::getAvailableLocales(int32_t& count) +const Locale* U_EXPORT2 Collator::getAvailableLocales(int32_t& count) { UErrorCode status = U_ZERO_ERROR; Locale *result = NULL; @@ -578,7 +580,7 @@ UnicodeString& U_EXPORT2 Collator::getDisplayName(const Locale& objectLocale, UnicodeString& U_EXPORT2 Collator::getDisplayName(const Locale& objectLocale, UnicodeString& name) -{ +{ return getDisplayName(objectLocale, Locale::getDefault(), name); } @@ -607,7 +609,7 @@ Collator::Collator() * Constructor. * Empty constructor, does not handle the arguments. * This constructor is done for backward compatibility with 1.7 and 1.8. -* The task for handling the argument collation strength and normalization +* The task for handling the argument collation strength and normalization * mode is left to the child class. * @param collationStrength collation strength * @param decompositionMode @@ -666,7 +668,7 @@ UnicodeSet *Collator::getTailoredSet(UErrorCode &status) const #if !UCONFIG_NO_SERVICE URegistryKey U_EXPORT2 -Collator::registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status) +Collator::registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status) { if (U_SUCCESS(status)) { // Set the collator locales while registering so that createInstance() @@ -684,9 +686,9 @@ class CFactory : public LocaleKeyFactory { private: CollatorFactory* _delegate; Hashtable* _ids; - + public: - CFactory(CollatorFactory* delegate, UErrorCode& status) + CFactory(CollatorFactory* delegate, UErrorCode& status) : LocaleKeyFactory(delegate->visible() ? VISIBLE : INVISIBLE) , _delegate(delegate) , _ids(NULL) @@ -713,7 +715,7 @@ class CFactory : public LocaleKeyFactory { virtual ~CFactory(); virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; - + protected: virtual const Hashtable* getSupportedIDs(UErrorCode& status) const { @@ -722,7 +724,7 @@ class CFactory : public LocaleKeyFactory { } return NULL; } - + virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const; }; @@ -733,7 +735,7 @@ CFactory::~CFactory() delete _ids; } -UObject* +UObject* CFactory::create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& status) const { if (handlesKey(key, status)) { @@ -746,7 +748,7 @@ CFactory::create(const ICUServiceKey& key, const ICUService* /* service */, UErr } UnicodeString& -CFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const +CFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const { if ((_coverage & 0x1) == 0) { UErrorCode status = U_ZERO_ERROR; @@ -777,7 +779,7 @@ Collator::registerFactory(CollatorFactory* toAdopt, UErrorCode& status) // ------------------------------------- UBool U_EXPORT2 -Collator::unregister(URegistryKey key, UErrorCode& status) +Collator::unregister(URegistryKey key, UErrorCode& status) { if (U_SUCCESS(status)) { if (hasService()) { diff --git a/deps/icu-small/source/i18n/collation.cpp b/deps/icu-small/source/i18n/collation.cpp index c01457e7386289..bac7498dfc35f7 100644 --- a/deps/icu-small/source/i18n/collation.cpp +++ b/deps/icu-small/source/i18n/collation.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collation.h b/deps/icu-small/source/i18n/collation.h index 53cffa983c1fae..c82d9a4778aa5f 100644 --- a/deps/icu-small/source/i18n/collation.h +++ b/deps/icu-small/source/i18n/collation.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationbuilder.cpp b/deps/icu-small/source/i18n/collationbuilder.cpp index 3465832d5a240b..0025cfc34fb39c 100644 --- a/deps/icu-small/source/i18n/collationbuilder.cpp +++ b/deps/icu-small/source/i18n/collationbuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationbuilder.h b/deps/icu-small/source/i18n/collationbuilder.h index cd499a4e927c02..7dda928a51a785 100644 --- a/deps/icu-small/source/i18n/collationbuilder.h +++ b/deps/icu-small/source/i18n/collationbuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationcompare.cpp b/deps/icu-small/source/i18n/collationcompare.cpp index 3b72d05d718a0f..5d8bd90d6c4781 100644 --- a/deps/icu-small/source/i18n/collationcompare.cpp +++ b/deps/icu-small/source/i18n/collationcompare.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationcompare.h b/deps/icu-small/source/i18n/collationcompare.h index 0185226d62fb4f..630b90b5564a7a 100644 --- a/deps/icu-small/source/i18n/collationcompare.h +++ b/deps/icu-small/source/i18n/collationcompare.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdata.cpp b/deps/icu-small/source/i18n/collationdata.cpp index 7f781f50f19737..d3a62e4fd0384f 100644 --- a/deps/icu-small/source/i18n/collationdata.cpp +++ b/deps/icu-small/source/i18n/collationdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdata.h b/deps/icu-small/source/i18n/collationdata.h index dd7fcebea46138..ab40bbd89e5a8f 100644 --- a/deps/icu-small/source/i18n/collationdata.h +++ b/deps/icu-small/source/i18n/collationdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatabuilder.cpp b/deps/icu-small/source/i18n/collationdatabuilder.cpp index 7bdf184cc01375..2059b56b324154 100644 --- a/deps/icu-small/source/i18n/collationdatabuilder.cpp +++ b/deps/icu-small/source/i18n/collationdatabuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines @@ -500,7 +502,7 @@ CollationDataBuilder::addCE32(uint32_t ce32, UErrorCode &errorCode) { for(int32_t i = 0; i < length; ++i) { if(ce32 == (uint32_t)ce32s.elementAti(i)) { return i; } } - ce32s.addElement((int32_t)ce32, errorCode); + ce32s.addElement((int32_t)ce32, errorCode); return length; } diff --git a/deps/icu-small/source/i18n/collationdatabuilder.h b/deps/icu-small/source/i18n/collationdatabuilder.h index cfa46fd5506a0c..f2c9a820ad1ac8 100644 --- a/deps/icu-small/source/i18n/collationdatabuilder.h +++ b/deps/icu-small/source/i18n/collationdatabuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatareader.cpp b/deps/icu-small/source/i18n/collationdatareader.cpp index f7098f984199dd..df0b2a36809272 100644 --- a/deps/icu-small/source/i18n/collationdatareader.cpp +++ b/deps/icu-small/source/i18n/collationdatareader.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatareader.h b/deps/icu-small/source/i18n/collationdatareader.h index 4a9fa5eecadada..ff8ec3d406a8c0 100644 --- a/deps/icu-small/source/i18n/collationdatareader.h +++ b/deps/icu-small/source/i18n/collationdatareader.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatawriter.cpp b/deps/icu-small/source/i18n/collationdatawriter.cpp index 6943ed2c61f0b5..596236bc61b005 100644 --- a/deps/icu-small/source/i18n/collationdatawriter.cpp +++ b/deps/icu-small/source/i18n/collationdatawriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatawriter.h b/deps/icu-small/source/i18n/collationdatawriter.h index 50e26524cec866..6169e0fd2640ed 100644 --- a/deps/icu-small/source/i18n/collationdatawriter.h +++ b/deps/icu-small/source/i18n/collationdatawriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatin.cpp b/deps/icu-small/source/i18n/collationfastlatin.cpp index 70e393c4dfeaec..c3e8c98b3adb1a 100644 --- a/deps/icu-small/source/i18n/collationfastlatin.cpp +++ b/deps/icu-small/source/i18n/collationfastlatin.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatin.h b/deps/icu-small/source/i18n/collationfastlatin.h index 6a25c6692c901d..00a2d1b5105faf 100644 --- a/deps/icu-small/source/i18n/collationfastlatin.h +++ b/deps/icu-small/source/i18n/collationfastlatin.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp b/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp index d5acda15b01755..032e5e82aaef15 100644 --- a/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp +++ b/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines @@ -147,7 +149,7 @@ CollationFastLatinBuilder::loadGroups(const CollationData &data, UErrorCode &err // missing data return FALSE; } - result.append(0); // reserve a slot for this group + result.append((UChar)0); // reserve a slot for this group } firstDigitPrimary = data.getFirstPrimaryForGroup(UCOL_REORDER_CODE_DIGIT); @@ -564,7 +566,7 @@ CollationFastLatinBuilder::encodeCharCEs(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return FALSE; } int32_t miniCEsStart = result.length(); for(int32_t i = 0; i < CollationFastLatin::NUM_FAST_CHARS; ++i) { - result.append(0); // initialize to completely ignorable + result.append((UChar)0); // initialize to completely ignorable } int32_t indexBase = result.length(); for(int32_t i = 0; i < CollationFastLatin::NUM_FAST_CHARS; ++i) { diff --git a/deps/icu-small/source/i18n/collationfastlatinbuilder.h b/deps/icu-small/source/i18n/collationfastlatinbuilder.h index b9eedf985af515..9d380380b4e58c 100644 --- a/deps/icu-small/source/i18n/collationfastlatinbuilder.h +++ b/deps/icu-small/source/i18n/collationfastlatinbuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfcd.cpp b/deps/icu-small/source/i18n/collationfcd.cpp index 153953cfc8671b..de1d9a2d1d8c5b 100644 --- a/deps/icu-small/source/i18n/collationfcd.cpp +++ b/deps/icu-small/source/i18n/collationfcd.cpp @@ -1,5 +1,7 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* - * Copyright (C) 1999-2015, International Business Machines + * Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. * * file name: collationfcd.cpp @@ -20,27 +22,27 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,1,1,2,3,0,0,0,0, 0,0,0,0,4,0,0,0,0,0,0,0,5,6,7,0, 8,0,9,0xa,0,0,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0x10, -0x11,0x12,0x13,0,0,0,0,0x14,0,0x15,0x16,0,0,0x15,0x17,0, -0,0x15,0x17,0,0,0x15,0x17,0,0,0x15,0x17,0,0,0,0x17,0, -0,0,0x18,0,0,0x15,0x17,0,0,0,0x17,0,0,0,0x19,0, -0,0x1a,0x1b,0,0,0x1c,0x1b,0,0x1c,0x1d,0,0x1e,0x1f,0,0x20,0, -0,0x21,0,0,0x17,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x22,0,0,0,0,0, +0x11,0x12,0x13,0,0,0,0x14,0x15,0,0x16,0x17,0,0,0x16,0x18,0, +0,0x16,0x18,0,0,0x16,0x18,0,0,0x16,0x18,0,0,0,0x18,0, +0,0,0x19,0,0,0x16,0x18,0,0,0,0x18,0,0,0,0x1a,0, +0,0x1b,0x1c,0,0,0x1d,0x1c,0,0x1d,0x1e,0,0x1f,0x20,0,0x21,0, +0,0x22,0,0,0x18,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x23,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x23,0x23,0,0,0,0,0x24,0, -0,0,0,0,0,0x25,0,0,0,0x13,0,0,0,0,0,0, -0x26,0,0,0x27,0,0x28,0,0,0,0x23,0x29,0x10,0,0x2a,0,0x2b, -0,0x2c,0,0,0,0,0x2d,0x2e,0,0,0,0,0,0,1,0x2f, +0,0,0,0,0,0,0,0,0x24,0x24,0,0,0,0,0x25,0, +0,0,0,0,0,0x26,0,0,0,0x13,0,0,0,0,0,0, +0x27,0,0,0x28,0,0x29,0,0,0,0x24,0x2a,0x10,0,0x2b,0,0x2c, +0,0x2d,0,0,0,0,0x2e,0x2f,0,0,0,0,0,0,1,0x30, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x30,0x31,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x31,0x32,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x32,0,0,0,0x33,0,0,0,1, +0,0,0,0,0,0,0,0x33,0,0,0,0x34,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x34,0,0,0x35,0,0,0,0,0,0,0,0,0,0,0, +0,0x35,0,0,0x36,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -99,9 +101,9 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x36,0x37,0,0,0x38,0,0,0,0,0,0,0,0, -0x20,0,0,0,0,0,0x29,0x39,0,0x3a,0x3b,0,0,0x3b,0x3c,0, -0,0,0,0,0,0x3d,0x3e,0x3f,0,0,0,0,0,0,0,0x17, +0,0,0,0x37,0x38,0,0,0x39,0,0,0,0,0,0,0,0, +0x21,0,0,0,0,0,0x2a,0x3a,0,0x3b,0x3c,0,0,0x3c,0x3d,0, +0,0,0,0,0,0x3e,0x3f,0x40,0,0,0,0,0,0,0,0x18, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -124,7 +126,7 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x40,0x41,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x41,0x42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, @@ -141,17 +143,17 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x42,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x43,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -const uint32_t CollationFCD::lcccBits[67]={ +const uint32_t CollationFCD::lcccBits[68]={ 0,0xffffffff,0xffff7fff,0xffff,0xf8,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0xfffff800,0x10000,0x9fc00000,0x3d9f,0x20000,0xffff0000,0x7ff, -0xff800,0xfbc00000,0x3eef,0xe000000,0xfffffff8,0x10000000,0x1e2000,0x2000,0x602000,0x400,0x7000000,0xf00,0x3000000,0x2a00000,0x3c3e0000,0xdf, -0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf03fffff, -0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000, -0x4000035,0x4108000,0x40000000 +0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10000000,0x1e2000,0x2000,0x602000,0x400,0x7000000,0xf00,0x3000000,0x2a00000,0x3c3e0000, +0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd, +0xf83fffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2, +0x400000,0x40000b5,0x5108000,0x40000000 }; const uint8_t CollationFCD::tcccIndex[2048]={ @@ -159,27 +161,27 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0xb,0xc,0,0,0,0,0,0,1,1,0xd,0xe,0xf,0x10,0x11,0, 0x12,0x13,0x14,0x15,0x16,0,0x17,0x18,0,0,0,0,0x19,0x1a,0x1b,0, 0x1c,0x1d,0x1e,0x1f,0,0,0x20,0x21,0x22,0x23,0x24,0,0,0,0,0x25, -0x26,0x27,0x28,0,0,0,0,0x29,0,0x2a,0x2b,0,0,0x2c,0x2d,0, -0,0x2e,0x2f,0,0,0x2c,0x30,0,0,0x2c,0x31,0,0,0,0x30,0, -0,0,0x32,0,0,0x2c,0x30,0,0,0,0x30,0,0,0,0x33,0, -0,0x34,0x35,0,0,0x36,0x35,0,0x36,0x37,0,0x38,0x39,0,0x3a,0, -0,0x3b,0,0,0x30,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x3c,0,0,0,0,0, +0x26,0x27,0x28,0,0,0,0x29,0x2a,0,0x2b,0x2c,0,0,0x2d,0x2e,0, +0,0x2f,0x30,0,0,0x2d,0x31,0,0,0x2d,0x32,0,0,0,0x31,0, +0,0,0x33,0,0,0x2d,0x31,0,0,0,0x31,0,0,0,0x34,0, +0,0x35,0x36,0,0,0x37,0x36,0,0x37,0x38,0,0x39,0x3a,0,0x3b,0, +0,0x3c,0,0,0x31,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x3d,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x3d,0x3d,0,0,0,0,0x3e,0, -0,0,0,0,0,0x3f,0,0,0,0x28,0,0,0,0,0,0, -0x40,0,0,0x41,0,0x42,0,0,0,0x3d,0x43,0x25,0,0x44,0,0x45, -0,0x46,0,0,0,0,0x47,0x48,0,0,0,0,0,0,1,0x49, -1,1,1,1,0x4a,1,1,0x4b,0x4c,1,0x4d,0x4e,1,0x4f,0x50,0x51, -0,0,0,0,0,0,0x52,0x53,0,0x54,0,0,0x55,0x56,0x57,0, -0x58,0x59,0x5a,0x5b,0x5c,0x5d,0,0x5e,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x3e,0x3e,0,0,0,0,0x3f,0, +0,0,0,0,0,0x40,0,0,0,0x28,0,0,0,0,0,0, +0x41,0,0,0x42,0,0x43,0,0,0,0x3e,0x44,0x25,0,0x45,0,0x46, +0,0x47,0,0,0,0,0x48,0x49,0,0,0,0,0,0,1,0x4a, +1,1,1,1,0x4b,1,1,0x4c,0x4d,1,0x4e,0x4f,1,0x50,0x51,0x52, +0,0,0,0,0,0,0x53,0x54,0,0x55,0,0,0x56,0x57,0x58,0, +0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0,0x5f,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x2c,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x5f,0,0,0,0x60,0,0,0,1, +0,0,0,0,0,0,0x2d,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x60,0,0,0,0x61,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x61,0x62,0x63,0x64,0x62,0x63,0x65,0,0,0,0,0,0,0,0, +0,0x62,0x63,0x64,0x65,0x63,0x64,0x66,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -238,9 +240,9 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x66,0x67,0,0,0x68,0,0,0,0,0,0,0,0, -0x3a,0,0,0,0,0,0x43,0x69,0,0x6a,0x6b,0,0,0x6b,0x6c,0, -0,0,0,0,0,0x6d,0x6e,0x6f,0,0,0,0,0,0,0,0x30, +0,0,0,0x67,0x68,0,0,0x69,0,0,0,0,0,0,0,0, +0x3b,0,0,0,0,0,0x44,0x6a,0,0x6b,0x6c,0,0,0x6c,0x6d,0, +0,0,0,0,0,0x6e,0x6f,0x70,0,0,0,0,0,0,0,0x31, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -263,7 +265,7 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x70,0x71,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x71,0x72,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -280,20 +282,20 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x3c,0x72,0x73,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x3d,0x73,0x74,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xe,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -const uint32_t CollationFCD::tcccBits[116]={ +const uint32_t CollationFCD::tcccBits[117]={ 0,0xffffffff,0x3e7effbf,0xbe7effbf,0xfffcffff,0x7ef1ff3f,0xfff3f1f8,0x7fffff3f,0x18003,0xdfffe000,0xff31ffcf,0xcfffffff,0xfffc0,0xffff7fff,0xffff,0x1d760, 0x1fc00,0x187c00,0x200708b,0x2000000,0x708b0000,0xc00000,0xf8,0xfccf0006,0x33ffcfc,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0x7c,0xfffff800,0x10000, -0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0xff800,0xfbc00000,0x3eef,0xe000000,0xfffffff8,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x10480000,0x4e002000, -0x2000,0x30002000,0x602100,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200, -0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf03fffff,0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff, -0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,0x333,0xf000,0x3c0f,0x38000, -0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000, -0x4000035,0x4108000,0x5f7ffc00,0x7fdb +0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x10480000, +0x4e002000,0x2000,0x30002000,0x602100,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000, +0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf83fffff,0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff, +0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,0x333,0xf000,0x3c0f, +0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2, +0x400000,0x40000b5,0x5108000,0x5f7ffc00,0x7fdb }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/collationfcd.h b/deps/icu-small/source/i18n/collationfcd.h index f4cc8a170e8ed5..150f4880c90046 100644 --- a/deps/icu-small/source/i18n/collationfcd.h +++ b/deps/icu-small/source/i18n/collationfcd.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationiterator.cpp b/deps/icu-small/source/i18n/collationiterator.cpp index 86199bcd177216..e6e8f27e2f6b9d 100644 --- a/deps/icu-small/source/i18n/collationiterator.cpp +++ b/deps/icu-small/source/i18n/collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationiterator.h b/deps/icu-small/source/i18n/collationiterator.h index a7b2cbfbce76e0..0161f5a7b16e9a 100644 --- a/deps/icu-small/source/i18n/collationiterator.h +++ b/deps/icu-small/source/i18n/collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationkeys.cpp b/deps/icu-small/source/i18n/collationkeys.cpp index 3fb1af1b36768d..91302285d6b78f 100644 --- a/deps/icu-small/source/i18n/collationkeys.cpp +++ b/deps/icu-small/source/i18n/collationkeys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationkeys.h b/deps/icu-small/source/i18n/collationkeys.h index d1cc76f0283ac0..74b370e710991e 100644 --- a/deps/icu-small/source/i18n/collationkeys.h +++ b/deps/icu-small/source/i18n/collationkeys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationroot.cpp b/deps/icu-small/source/i18n/collationroot.cpp index 749f05c51c3a2f..f862e410b81cd5 100644 --- a/deps/icu-small/source/i18n/collationroot.cpp +++ b/deps/icu-small/source/i18n/collationroot.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines @@ -45,7 +47,7 @@ static UBool U_CALLCONV uprv_collation_root_cleanup() { U_CDECL_END -void +void U_CALLCONV CollationRoot::load(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } LocalPointer t(new CollationTailoring(NULL)); diff --git a/deps/icu-small/source/i18n/collationroot.h b/deps/icu-small/source/i18n/collationroot.h index 345fbe77eb4128..26e5071fff8b7a 100644 --- a/deps/icu-small/source/i18n/collationroot.h +++ b/deps/icu-small/source/i18n/collationroot.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines @@ -34,7 +36,7 @@ class U_I18N_API CollationRoot { // purely static static const CollationSettings *getSettings(UErrorCode &errorCode); private: - static void load(UErrorCode &errorCode); + static void U_CALLCONV load(UErrorCode &errorCode); }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/collationrootelements.cpp b/deps/icu-small/source/i18n/collationrootelements.cpp index c8fd0a09ffd37e..638a2456c82958 100644 --- a/deps/icu-small/source/i18n/collationrootelements.cpp +++ b/deps/icu-small/source/i18n/collationrootelements.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationrootelements.h b/deps/icu-small/source/i18n/collationrootelements.h index df2a13df243cef..518a24fe4e0e5f 100644 --- a/deps/icu-small/source/i18n/collationrootelements.h +++ b/deps/icu-small/source/i18n/collationrootelements.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationruleparser.cpp b/deps/icu-small/source/i18n/collationruleparser.cpp index 2d2e25fcb0e1d4..ea3ea66bc08cf5 100644 --- a/deps/icu-small/source/i18n/collationruleparser.cpp +++ b/deps/icu-small/source/i18n/collationruleparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines @@ -788,7 +790,7 @@ CollationRuleParser::readWords(int32_t i, UnicodeString &raw) const { return i; } if(PatternProps::isWhiteSpace(c)) { - raw.append(0x20); + raw.append(sp); i = skipWhiteSpace(i + 1); } else { raw.append(c); diff --git a/deps/icu-small/source/i18n/collationruleparser.h b/deps/icu-small/source/i18n/collationruleparser.h index 3c2b22c9dc455d..bd393c2b6ad143 100644 --- a/deps/icu-small/source/i18n/collationruleparser.h +++ b/deps/icu-small/source/i18n/collationruleparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsets.cpp b/deps/icu-small/source/i18n/collationsets.cpp index ab282d89c6a95c..1188f310620e84 100644 --- a/deps/icu-small/source/i18n/collationsets.cpp +++ b/deps/icu-small/source/i18n/collationsets.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsets.h b/deps/icu-small/source/i18n/collationsets.h index 4f0a2b6dceac13..070d507ebdc318 100644 --- a/deps/icu-small/source/i18n/collationsets.h +++ b/deps/icu-small/source/i18n/collationsets.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsettings.cpp b/deps/icu-small/source/i18n/collationsettings.cpp index e3e76a476588b9..bc1d4e63f8a2a7 100644 --- a/deps/icu-small/source/i18n/collationsettings.cpp +++ b/deps/icu-small/source/i18n/collationsettings.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsettings.h b/deps/icu-small/source/i18n/collationsettings.h index d839de7e541e3f..1522dd58be6603 100644 --- a/deps/icu-small/source/i18n/collationsettings.h +++ b/deps/icu-small/source/i18n/collationsettings.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationtailoring.cpp b/deps/icu-small/source/i18n/collationtailoring.cpp index ba20cc871ac57e..d1ffa306f1290d 100644 --- a/deps/icu-small/source/i18n/collationtailoring.cpp +++ b/deps/icu-small/source/i18n/collationtailoring.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationtailoring.h b/deps/icu-small/source/i18n/collationtailoring.h index 2a9b3d566f687a..e463005e08f54a 100644 --- a/deps/icu-small/source/i18n/collationtailoring.h +++ b/deps/icu-small/source/i18n/collationtailoring.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationweights.cpp b/deps/icu-small/source/i18n/collationweights.cpp index dba362255e4850..8b1122aff5d4de 100644 --- a/deps/icu-small/source/i18n/collationweights.cpp +++ b/deps/icu-small/source/i18n/collationweights.cpp @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ******************************************************************************* * * Copyright (C) 1999-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationweights.h b/deps/icu-small/source/i18n/collationweights.h index a32274b876b7b8..4a6a7e82b82775 100644 --- a/deps/icu-small/source/i18n/collationweights.h +++ b/deps/icu-small/source/i18n/collationweights.h @@ -1,4 +1,6 @@ -/* +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* ******************************************************************************* * * Copyright (C) 1999-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collunsafe.h b/deps/icu-small/source/i18n/collunsafe.h index 97a766db26f729..7a69b688449e76 100644 --- a/deps/icu-small/source/i18n/collunsafe.h +++ b/deps/icu-small/source/i18n/collunsafe.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // collunsafe.h // Copyright (C) 2015-2016, International Business Machines Corporation and others. // All Rights Reserved. @@ -14,7 +16,7 @@ #define COLLUNSAFE_COLL_VERSION "9.64" #define COLLUNSAFE_SERIALIZE 1 static const int32_t unsafe_serializedCount = 850; -static const uint16_t unsafe_serializedData[850] = { +static const uint16_t unsafe_serializedData[850] = { 0x8350, 0x01B8, 0x0034, 0x0035, 0x004C, 0x004D, 0x00A0, 0x00A1, // 8 0x0300, 0x034F, 0x0350, 0x0370, 0x03A9, 0x03AA, 0x03E2, 0x03E3, // 16 0x042F, 0x0430, 0x0483, 0x0488, 0x0531, 0x0532, 0x0591, 0x05BE, // 24 diff --git a/deps/icu-small/source/i18n/compactdecimalformat.cpp b/deps/icu-small/source/i18n/compactdecimalformat.cpp index 2004356e700b8a..385b3a513f2632 100644 --- a/deps/icu-small/source/i18n/compactdecimalformat.cpp +++ b/deps/icu-small/source/i18n/compactdecimalformat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -39,7 +41,7 @@ static const char gNumberElementsTag[] = "NumberElements"; static const char gDecimalFormatTag[] = "decimalFormat"; static const char gPatternsShort[] = "patternsShort"; static const char gPatternsLong[] = "patternsLong"; -static const char gRoot[] = "root"; +static const char gLatnPath[] = "NumberElements/latn"; static const UChar u_0 = 0x30; static const UChar u_apos = 0x27; @@ -94,7 +96,13 @@ class CDFLocaleStyleData : public UMemory { // Compute cdfUnits = unitsByVariant[pluralVariant]. // Prefix and suffix to use at cdfUnits[log10(x)] UHashtable* unitsByVariant; - inline CDFLocaleStyleData() : unitsByVariant(NULL) {} + // A flag for whether or not this CDFLocaleStyleData was loaded from the + // Latin numbering system as a fallback from the locale numbering system. + // This value is meaningless if the object is bogus or empty. + UBool fromFallback; + inline CDFLocaleStyleData() : unitsByVariant(NULL), fromFallback(FALSE) { + uprv_memset(divisors, 0, sizeof(divisors)); + } ~CDFLocaleStyleData(); // Init initializes this object. void Init(UErrorCode& status); @@ -102,6 +110,9 @@ class CDFLocaleStyleData : public UMemory { return unitsByVariant == NULL; } void setToBogus(); + UBool isEmpty() { + return unitsByVariant == NULL || unitsByVariant->count == 0; + } private: CDFLocaleStyleData(const CDFLocaleStyleData&); CDFLocaleStyleData& operator=(const CDFLocaleStyleData&); @@ -146,15 +157,12 @@ static const CDFLocaleStyleData* getCDFLocaleStyleData(const Locale& inLocale, U static const CDFLocaleStyleData* extractDataByStyleEnum(const CDFLocaleData& data, UNumberCompactStyle style, UErrorCode& status); static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& status); -static void initCDFLocaleData(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status); -static UResourceBundle* tryGetDecimalFallback(const UResourceBundle* numberSystemResource, const char* style, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status); -static UResourceBundle* tryGetByKeyWithFallback(const UResourceBundle* rb, const char* path, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status); -static UBool isRoot(const UResourceBundle* rb, UErrorCode& status); -static void initCDFLocaleStyleData(const UResourceBundle* decimalFormatBundle, CDFLocaleStyleData* result, UErrorCode& status); -static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyleData* result, UErrorCode& status); -static int32_t populatePrefixSuffix(const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UErrorCode& status); +static void load(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status); +static int32_t populatePrefixSuffix(const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UBool overwrite, UErrorCode& status); +static double calculateDivisor(double power10, int32_t numZeros); static UBool onlySpaces(UnicodeString u); static void fixQuotes(UnicodeString& s); +static void checkForOtherVariants(CDFLocaleStyleData* result, UErrorCode& status); static void fillInMissing(CDFLocaleStyleData* result); static int32_t computeLog10(double x, UBool inRange); static CDFUnit* createCDFUnit(const char* variant, int32_t log10Value, UHashtable* table, UErrorCode& status); @@ -345,7 +353,7 @@ CompactDecimalFormat::format( UnicodeString& CompactDecimalFormat::format( - const StringPiece& /* number */, + StringPiece /* number */, UnicodeString& appendTo, FieldPositionIterator* /* posIter */, UErrorCode& status) const { @@ -435,7 +443,7 @@ static UBool divisors_equal(const double* lhs, const double* rhs) { return TRUE; } -// getCDFLocaleStyleData returns pointer to formatting data for given locale and +// getCDFLocaleStyleData returns pointer to formatting data for given locale and // style within the global cache. On cache miss, getCDFLocaleStyleData loads // the data from CLDR into the global cache before returning the pointer. If a // UNUM_LONG data is requested for a locale, and that locale does not have @@ -518,7 +526,8 @@ static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& stat return NULL; } - initCDFLocaleData(inLocale, result, status); + load(inLocale, result, status); + if (U_FAILURE(status)) { delete result; return NULL; @@ -526,278 +535,226 @@ static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& stat return result; } -// initCDFLocaleData initializes result with data from CLDR. -// inLocale is the locale, the CLDR data is stored in result. -// We load the UNUM_SHORT and UNUM_LONG data looking first in local numbering -// system and not including root locale in fallback. Next we try in the latn -// numbering system where we fallback all the way to root. If we don't find -// UNUM_SHORT data in these three places, we report an error. If we find -// UNUM_SHORT data before finding UNUM_LONG data we make UNUM_LONG data fall -// back to UNUM_SHORT data. -static void initCDFLocaleData(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status) { - LocalPointer ns(NumberingSystem::createInstance(inLocale, status)); - if (U_FAILURE(status)) { - return; - } - const char* numberingSystemName = ns->getName(); - UResourceBundle* rb = ures_open(NULL, inLocale.getName(), &status); - rb = ures_getByKeyWithFallback(rb, gNumberElementsTag, rb, &status); - if (U_FAILURE(status)) { - ures_close(rb); - return; - } - UResourceBundle* shortDataFillIn = NULL; - UResourceBundle* longDataFillIn = NULL; - UResourceBundle* shortData = NULL; - UResourceBundle* longData = NULL; +namespace { - if (uprv_strcmp(numberingSystemName, gLatnTag) != 0) { - LocalUResourceBundlePointer localResource( - tryGetByKeyWithFallback(rb, numberingSystemName, NULL, NOT_ROOT, status)); - shortData = tryGetDecimalFallback( - localResource.getAlias(), gPatternsShort, &shortDataFillIn, NOT_ROOT, status); - longData = tryGetDecimalFallback( - localResource.getAlias(), gPatternsLong, &longDataFillIn, NOT_ROOT, status); - } - if (U_FAILURE(status)) { - ures_close(shortDataFillIn); - ures_close(longDataFillIn); - ures_close(rb); - return; - } +struct CmptDecDataSink : public ResourceSink { + + CDFLocaleData& dataBundle; // Where to save values when they are read + UBool isLatin; // Whether or not we are traversing the Latin tree + UBool isFallback; // Whether or not we are traversing the Latin tree as fallback + + enum EPatternsTableKey { PATTERNS_SHORT, PATTERNS_LONG }; + enum EFormatsTableKey { DECIMAL_FORMAT, CURRENCY_FORMAT }; - // If we haven't found UNUM_SHORT look in latn numbering system. We must - // succeed at finding UNUM_SHORT here. - if (shortData == NULL) { - LocalUResourceBundlePointer latnResource(tryGetByKeyWithFallback(rb, gLatnTag, NULL, MUST, status)); - shortData = tryGetDecimalFallback(latnResource.getAlias(), gPatternsShort, &shortDataFillIn, MUST, status); - if (longData == NULL) { - longData = tryGetDecimalFallback(latnResource.getAlias(), gPatternsLong, &longDataFillIn, ANY, status); - if (longData != NULL && isRoot(longData, status) && !isRoot(shortData, status)) { - longData = NULL; + /* + * NumberElements{ <-- top (numbering system table) + * latn{ <-- patternsTable (one per numbering system) + * patternsLong{ <-- formatsTable (one per pattern) + * decimalFormat{ <-- powersOfTenTable (one per format) + * 1000{ <-- pluralVariantsTable (one per power of ten) + * one{"0 thousand"} <-- plural variant and template + */ + + CmptDecDataSink(CDFLocaleData& _dataBundle) + : dataBundle(_dataBundle), isLatin(FALSE), isFallback(FALSE) {} + virtual ~CmptDecDataSink(); + + virtual void put(const char *key, ResourceValue &value, UBool isRoot, UErrorCode &errorCode) { + // SPECIAL CASE: Don't consume root in the non-Latin numbering system + if (isRoot && !isLatin) { return; } + + ResourceTable patternsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i1 = 0; patternsTable.getKeyAndValue(i1, key, value); ++i1) { + + // Check for patternsShort or patternsLong + EPatternsTableKey patternsTableKey; + if (uprv_strcmp(key, gPatternsShort) == 0) { + patternsTableKey = PATTERNS_SHORT; + } else if (uprv_strcmp(key, gPatternsLong) == 0) { + patternsTableKey = PATTERNS_LONG; + } else { + continue; } - } - } - initCDFLocaleStyleData(shortData, &result->shortData, status); - ures_close(shortDataFillIn); - if (U_FAILURE(status)) { - ures_close(longDataFillIn); - ures_close(rb); - } - if (longData == NULL) { - result->longData.setToBogus(); - } else { - initCDFLocaleStyleData(longData, &result->longData, status); - } - ures_close(longDataFillIn); - ures_close(rb); -} - -/** - * tryGetDecimalFallback attempts to fetch the "decimalFormat" resource bundle - * with a particular style. style is either "patternsShort" or "patternsLong." - * FillIn, flags, and status work in the same way as in tryGetByKeyWithFallback. - */ -static UResourceBundle* tryGetDecimalFallback(const UResourceBundle* numberSystemResource, const char* style, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status) { - UResourceBundle* first = tryGetByKeyWithFallback(numberSystemResource, style, fillIn, flags, status); - UResourceBundle* second = tryGetByKeyWithFallback(first, gDecimalFormatTag, fillIn, flags, status); - if (fillIn == NULL) { - ures_close(first); - } - return second; -} - -// tryGetByKeyWithFallback returns a sub-resource bundle that matches given -// criteria or NULL if none found. rb is the resource bundle that we are -// searching. If rb == NULL then this function behaves as if no sub-resource -// is found; path is the key of the sub-resource, -// (i.e "foo" but not "foo/bar"); If fillIn is NULL, caller must always call -// ures_close() on returned resource. See below for example when fillIn is -// not NULL. flags is ANY or NOT_ROOT. Optionally, these values -// can be ored with MUST. MUST by itself is the same as ANY | MUST. -// The locale of the returned sub-resource will either match the -// flags or the returned sub-resouce will be NULL. If MUST is included in -// flags, and not suitable sub-resource is found then in addition to returning -// NULL, this function also sets status to U_MISSING_RESOURCE_ERROR. If MUST -// is not included in flags, then this function just returns NULL if no -// such sub-resource is found and will never set status to -// U_MISSING_RESOURCE_ERROR. -// -// Example: This code first searches for "foo/bar" sub-resource without falling -// back to ROOT. Then searches for "baz" sub-resource as last resort. -// -// UResourcebundle* fillIn = NULL; -// UResourceBundle* data = tryGetByKeyWithFallback(rb, "foo", &fillIn, NON_ROOT, status); -// data = tryGetByKeyWithFallback(data, "bar", &fillIn, NON_ROOT, status); -// if (!data) { -// data = tryGetbyKeyWithFallback(rb, "baz", &fillIn, MUST, status); -// } -// if (U_FAILURE(status)) { -// ures_close(fillIn); -// return; -// } -// doStuffWithNonNullSubresource(data); -// -// /* Wrong! don't do the following as it can leak memory if fillIn gets set -// to NULL. */ -// fillIn = tryGetByKeyWithFallback(rb, "wrong", &fillIn, ANY, status); -// -// ures_close(fillIn); -// -static UResourceBundle* tryGetByKeyWithFallback(const UResourceBundle* rb, const char* path, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status) { - if (U_FAILURE(status)) { - return NULL; - } - UBool must = (flags & MUST); - if (rb == NULL) { - if (must) { - status = U_MISSING_RESOURCE_ERROR; - } - return NULL; - } - UResourceBundle* result = NULL; - UResourceBundle* ownedByUs = NULL; - if (fillIn == NULL) { - ownedByUs = ures_getByKeyWithFallback(rb, path, NULL, &status); - result = ownedByUs; - } else { - *fillIn = ures_getByKeyWithFallback(rb, path, *fillIn, &status); - result = *fillIn; - } - if (U_FAILURE(status)) { - ures_close(ownedByUs); - if (status == U_MISSING_RESOURCE_ERROR && !must) { - status = U_ZERO_ERROR; - } - return NULL; - } - flags = (FallbackFlags) (flags & ~MUST); - switch (flags) { - case NOT_ROOT: - { - UBool bRoot = isRoot(result, status); - if (bRoot || U_FAILURE(status)) { - ures_close(ownedByUs); - if (must && (status == U_ZERO_ERROR)) { - status = U_MISSING_RESOURCE_ERROR; + // Traverse into the formats table + ResourceTable formatsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i2 = 0; formatsTable.getKeyAndValue(i2, key, value); ++i2) { + + // Check for decimalFormat or currencyFormat + EFormatsTableKey formatsTableKey; + if (uprv_strcmp(key, gDecimalFormatTag) == 0) { + formatsTableKey = DECIMAL_FORMAT; + // TODO: Enable this statement when currency support is added + // } else if (uprv_strcmp(key, gCurrencyFormat) == 0) { + // formatsTableKey = CURRENCY_FORMAT; + } else { + continue; + } + + // Set the current style and destination based on the two keys + UNumberCompactStyle style; + CDFLocaleStyleData* destination = NULL; + if (patternsTableKey == PATTERNS_LONG + && formatsTableKey == DECIMAL_FORMAT) { + style = UNUM_LONG; + destination = &dataBundle.longData; + } else if (patternsTableKey == PATTERNS_SHORT + && formatsTableKey == DECIMAL_FORMAT) { + style = UNUM_SHORT; + destination = &dataBundle.shortData; + // TODO: Enable the following statements when currency support is added + // } else if (patternsTableKey == PATTERNS_SHORT + // && formatsTableKey == CURRENCY_FORMAT) { + // style = UNUM_SHORT_CURRENCY; // or whatever the enum gets named + // destination = &dataBundle.shortCurrencyData; + // } else { + // // Silently ignore this case + // continue; + } + + // SPECIAL CASE: RULES FOR WHETHER OR NOT TO CONSUME THIS TABLE: + // 1) Don't consume longData if shortData was consumed from the non-Latin + // locale numbering system + // 2) Don't consume longData for the first time if this is the root bundle and + // shortData is already populated from a more specific locale. Note that if + // both longData and shortData are both only in root, longData will be + // consumed since it is alphabetically before shortData in the bundle. + if (isFallback + && style == UNUM_LONG + && !dataBundle.shortData.isEmpty() + && !dataBundle.shortData.fromFallback) { + continue; + } + if (isRoot + && style == UNUM_LONG + && dataBundle.longData.isEmpty() + && !dataBundle.shortData.isEmpty()) { + continue; + } + + // Set the "fromFallback" flag on the data object + destination->fromFallback = isFallback; + + // Traverse into the powers of ten table + ResourceTable powersOfTenTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i3 = 0; powersOfTenTable.getKeyAndValue(i3, key, value); ++i3) { + + // The key will always be some even power of 10. e.g 10000. + char* endPtr = NULL; + double power10 = uprv_strtod(key, &endPtr); + if (*endPtr != 0) { + errorCode = U_INTERNAL_PROGRAM_ERROR; + return; + } + int32_t log10Value = computeLog10(power10, FALSE); + + // Silently ignore divisors that are too big. + if (log10Value >= MAX_DIGITS) continue; + + // Iterate over the plural variants ("one", "other", etc) + ResourceTable pluralVariantsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i4 = 0; pluralVariantsTable.getKeyAndValue(i4, key, value); ++i4) { + const char* pluralVariant = key; + const UnicodeString formatStr = value.getUnicodeString(errorCode); + + // Copy the data into the in-memory data bundle (do not overwrite + // existing values) + int32_t numZeros = populatePrefixSuffix( + pluralVariant, log10Value, formatStr, + destination->unitsByVariant, FALSE, errorCode); + + // If populatePrefixSuffix returns -1, it means that this key has been + // encountered already. + if (numZeros < 0) { + continue; + } + + // Set the divisor, which is based on the number of zeros in the template + // string. If the divisor from here is different from the one previously + // stored, it means that the number of zeros in different plural variants + // differs; throw an exception. + // TODO: How should I check for floating-point errors here? + // Is there a good reason why "divisor" is double and not long like Java? + double divisor = calculateDivisor(power10, numZeros); + if (destination->divisors[log10Value] != 0.0 + && destination->divisors[log10Value] != divisor) { + errorCode = U_INTERNAL_PROGRAM_ERROR; + return; + } + destination->divisors[log10Value] = divisor; } - return NULL; } - return result; } - case ANY: - return result; - default: - ures_close(ownedByUs); - status = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; + } } -} +}; -static UBool isRoot(const UResourceBundle* rb, UErrorCode& status) { - const char* actualLocale = ures_getLocaleByType( - rb, ULOC_ACTUAL_LOCALE, &status); - if (U_FAILURE(status)) { - return FALSE; - } - return uprv_strcmp(actualLocale, gRoot) == 0; -} +// Virtual destructors must be defined out of line. +CmptDecDataSink::~CmptDecDataSink() {} +} // namespace -// initCDFLocaleStyleData loads formatting data for a particular style. -// decimalFormatBundle is the "decimalFormat" resource bundle in CLDR. -// Loaded data stored in result. -static void initCDFLocaleStyleData(const UResourceBundle* decimalFormatBundle, CDFLocaleStyleData* result, UErrorCode& status) { +static void load(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status) { + LocalPointer ns(NumberingSystem::createInstance(inLocale, status)); if (U_FAILURE(status)) { return; } - // Iterate through all the powers of 10. - int32_t size = ures_getSize(decimalFormatBundle); - UResourceBundle* power10 = NULL; - for (int32_t i = 0; i < size; ++i) { - power10 = ures_getByIndex(decimalFormatBundle, i, power10, &status); - if (U_FAILURE(status)) { - ures_close(power10); - return; - } - populatePower10(power10, result, status); - if (U_FAILURE(status)) { - ures_close(power10); - return; - } - } - ures_close(power10); - fillInMissing(result); -} + const char* nsName = ns->getName(); -// populatePower10 grabs data for a particular power of 10 from CLDR. -// The loaded data is stored in result. -static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyleData* result, UErrorCode& status) { + LocalUResourceBundlePointer resource(ures_open(NULL, inLocale.getName(), &status)); if (U_FAILURE(status)) { return; } - char* endPtr = NULL; - double power10 = uprv_strtod(ures_getKey(power10Bundle), &endPtr); - if (*endPtr != 0) { - status = U_INTERNAL_PROGRAM_ERROR; - return; - } - int32_t log10Value = computeLog10(power10, FALSE); - // Silently ignore divisors that are too big. - if (log10Value == MAX_DIGITS) { - return; - } - int32_t size = ures_getSize(power10Bundle); - int32_t numZeros = 0; - UBool otherVariantDefined = FALSE; - UResourceBundle* variantBundle = NULL; - // Iterate over all the plural variants for the power of 10 - for (int32_t i = 0; i < size; ++i) { - variantBundle = ures_getByIndex(power10Bundle, i, variantBundle, &status); - if (U_FAILURE(status)) { - ures_close(variantBundle); - return; - } - const char* variant = ures_getKey(variantBundle); - int32_t resLen; - const UChar* formatStrP = ures_getString(variantBundle, &resLen, &status); - if (U_FAILURE(status)) { - ures_close(variantBundle); - return; - } - UnicodeString formatStr(false, formatStrP, resLen); - if (uprv_strcmp(variant, gOther) == 0) { - otherVariantDefined = TRUE; - } - int32_t nz = populatePrefixSuffix( - variant, log10Value, formatStr, result->unitsByVariant, status); - if (U_FAILURE(status)) { - ures_close(variantBundle); + CmptDecDataSink sink(*result); + sink.isFallback = FALSE; + + // First load the number elements data if nsName is not Latin. + if (uprv_strcmp(nsName, gLatnTag) != 0) { + sink.isLatin = FALSE; + CharString path; + path.append(gNumberElementsTag, status) + .append('/', status) + .append(nsName, status); + ures_getAllItemsWithFallback(resource.getAlias(), path.data(), sink, status); + if (status == U_MISSING_RESOURCE_ERROR) { + // Silently ignore and use Latin + status = U_ZERO_ERROR; + } else if (U_FAILURE(status)) { return; } - if (nz != numZeros) { - // We expect all format strings to have the same number of 0's - // left of the decimal point. - if (numZeros != 0) { - status = U_INTERNAL_PROGRAM_ERROR; - ures_close(variantBundle); - return; - } - numZeros = nz; - } + sink.isFallback = TRUE; } - ures_close(variantBundle); - // We expect to find an OTHER variant for each power of 10. - if (!otherVariantDefined) { - status = U_INTERNAL_PROGRAM_ERROR; - return; + + // Now load Latin. + sink.isLatin = TRUE; + ures_getAllItemsWithFallback(resource.getAlias(), gLatnPath, sink, status); + if (U_FAILURE(status)) return; + + // If longData is empty, default it to be equal to shortData + if (result->longData.isEmpty()) { + result->longData.setToBogus(); } - double divisor = power10; - for (int32_t i = 1; i < numZeros; ++i) { - divisor /= 10.0; + + // Check for "other" variants in each of the three data classes, and resolve missing elements. + + if (!result->longData.isBogus()) { + checkForOtherVariants(&result->longData, status); + if (U_FAILURE(status)) return; + fillInMissing(&result->longData); } - result->divisors[log10Value] = divisor; + + checkForOtherVariants(&result->shortData, status); + if (U_FAILURE(status)) return; + fillInMissing(&result->shortData); + + // TODO: Enable this statement when currency support is added + // checkForOtherVariants(&result->shortCurrencyData, status); + // if (U_FAILURE(status)) return; + // fillInMissing(&result->shortCurrencyData); } // populatePrefixSuffix Adds a specific prefix-suffix pair to result for a @@ -810,7 +767,7 @@ static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyle // In the special case that formatStr contains only spaces for prefix // and suffix, populatePrefixSuffix returns log10Value + 1. static int32_t populatePrefixSuffix( - const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UErrorCode& status) { + const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UBool overwrite, UErrorCode& status) { if (U_FAILURE(status)) { return 0; } @@ -825,6 +782,13 @@ static int32_t populatePrefixSuffix( if (U_FAILURE(status)) { return 0; } + + // Return -1 if we are not overwriting an existing value + if (unit->isSet() && !overwrite) { + return -1; + } + unit->markAsSet(); + // Everything up to first 0 is the prefix unit->prefix = formatStr.tempSubString(0, firstIdx); fixQuotes(unit->prefix); @@ -846,6 +810,16 @@ static int32_t populatePrefixSuffix( return (idx - firstIdx); } +// Calculate a divisor based on the magnitude and number of zeros in the +// template string. +static double calculateDivisor(double power10, int32_t numZeros) { + double divisor = power10; + for (int32_t i = 1; i < numZeros; ++i) { + divisor /= 10.0; + } + return divisor; +} + static UBool onlySpaces(UnicodeString u) { return u.trim().length() == 0; } @@ -884,6 +858,38 @@ static void fixQuotes(UnicodeString& s) { s.truncate(dest); } +// Checks to make sure that an "other" variant is present in all +// powers of 10. +static void checkForOtherVariants(CDFLocaleStyleData* result, + UErrorCode& status) { + if (result == NULL || result->unitsByVariant == NULL) { + return; + } + + const CDFUnit* otherByBase = + (const CDFUnit*) uhash_get(result->unitsByVariant, gOther); + if (otherByBase == NULL) { + status = U_INTERNAL_PROGRAM_ERROR; + return; + } + + // Check all other plural variants, and make sure that if + // any of them are populated, then other is also populated + int32_t pos = UHASH_FIRST; + const UHashElement* element; + while ((element = uhash_nextElement(result->unitsByVariant, &pos)) != NULL) { + CDFUnit* variantsByBase = (CDFUnit*) element->value.pointer; + if (variantsByBase == otherByBase) continue; + for (int32_t log10Value = 0; log10Value < MAX_DIGITS; ++log10Value) { + if (variantsByBase[log10Value].isSet() + && !otherByBase[log10Value].isSet()) { + status = U_INTERNAL_PROGRAM_ERROR; + return; + } + } + } +} + // fillInMissing ensures that the data in result is complete. // result data is complete if for each variant in result, there exists // a prefix-suffix pair for each log10 value and there also exists @@ -891,7 +897,7 @@ static void fixQuotes(UnicodeString& s) { // // First this function figures out for which log10 values, the other // variant already had data. These are the same log10 values defined -// in CLDR. +// in CLDR. // // For each log10 value not defined in CLDR, it uses the divisor for // the last defined log10 value or 1. @@ -973,7 +979,6 @@ static CDFUnit* createCDFUnit(const char* variant, int32_t log10Value, UHashtabl } } CDFUnit* result = &cdfUnit[log10Value]; - result->markAsSet(); return result; } diff --git a/deps/icu-small/source/i18n/coptccal.cpp b/deps/icu-small/source/i18n/coptccal.cpp index 1996327a6f21a8..bcbd8be566cf5d 100644 --- a/deps/icu-small/source/i18n/coptccal.cpp +++ b/deps/icu-small/source/i18n/coptccal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2013, International Business Machines Corporation and @@ -29,7 +31,7 @@ CopticCalendar::CopticCalendar(const Locale& aLocale, UErrorCode& success) { } -CopticCalendar::CopticCalendar (const CopticCalendar& other) +CopticCalendar::CopticCalendar (const CopticCalendar& other) : CECalendar(other) { } @@ -96,7 +98,7 @@ CopticCalendar::handleComputeFields(int32_t julianDay, UErrorCode &/*status*/) /** * The system maintains a static default century start date and Year. They are - * initialized the first time they are used. Once the system default century date + * initialized the first time they are used. Once the system default century date * and year are set, they do not change. */ static UDate gSystemDefaultCenturyStart = DBL_MIN; diff --git a/deps/icu-small/source/i18n/coptccal.h b/deps/icu-small/source/i18n/coptccal.h index 47c952868b10ae..afca9b997dfcf2 100644 --- a/deps/icu-small/source/i18n/coptccal.h +++ b/deps/icu-small/source/i18n/coptccal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2013, International Business Machines Corporation and * @@ -22,90 +24,90 @@ U_NAMESPACE_BEGIN * @internal */ class CopticCalendar : public CECalendar { - + public: /** * Useful constants for CopticCalendar. * @internal */ enum EMonths { - /** + /** * Constant for ωογτ/تﻮﺗ, - * the 1st month of the Coptic year. + * the 1st month of the Coptic year. */ TOUT, - - /** + + /** * Constant for Παοπι/ﻪﺑﺎﺑ, - * the 2nd month of the Coptic year. + * the 2nd month of the Coptic year. */ BABA, - /** + /** * Constant for Αθορ/رﻮﺗﺎﻫ, - * the 3rd month of the Coptic year. + * the 3rd month of the Coptic year. */ HATOR, - /** + /** * Constant for Χοιακ/ﻚﻬﻴﻛ, - * the 4th month of the Coptic year. + * the 4th month of the Coptic year. */ KIAHK, - /** + /** * Constant for Τωβι/طﻮﺒﻫ, - * the 5th month of the Coptic year. + * the 5th month of the Coptic year. */ TOBA, - /** + /** * Constant for Μεϣιρ/ﺮﻴﺸﻣأ, - * the 6th month of the Coptic year. + * the 6th month of the Coptic year. */ AMSHIR, - /** + /** * Constant for Παρεμϩατ/تﺎﻬﻣﺮﺑ, - * the 7th month of the Coptic year. + * the 7th month of the Coptic year. */ BARAMHAT, - /** - * Constant for Φαρμοθι/هدﻮﻣﺮﺑ, - * the 8th month of the Coptic year. + /** + * Constant for Φαρμοθι/هدﻮﻣﺮﺑ, + * the 8th month of the Coptic year. */ BARAMOUDA, - /** + /** * Constant for Παϣαν/ﺲﻨﺸﺑ, - * the 9th month of the Coptic year. + * the 9th month of the Coptic year. */ BASHANS, - /** + /** * Constant for Παωνι/ﻪﻧؤﻮﺑ, - * the 10th month of the Coptic year. + * the 10th month of the Coptic year. */ PAONA, - /** + /** * Constant for Επηπ/ﺐﻴﺑأ, - * the 11th month of the Coptic year. + * the 11th month of the Coptic year. */ EPEP, - /** + /** * Constant for Μεϲωρη/ىﺮﺴﻣ, - * the 12th month of the Coptic year. + * the 12th month of the Coptic year. */ MESRA, - /** + /** * Constant for Πικογϫι * μαβοτ/ﺮﻴﻐﺼﻟا * ﺮﻬﺸﻟا, - * the 13th month of the Coptic year. + * the 13th month of the Coptic year. */ NASIE }; @@ -213,7 +215,7 @@ class CopticCalendar : public CECalendar { * @return The class ID for all objects of this class. * @internal */ - U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); + U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); #if 0 // We do not want to introduce this API in ICU4C. diff --git a/deps/icu-small/source/i18n/cpdtrans.cpp b/deps/icu-small/source/i18n/cpdtrans.cpp index 3798a6de021df9..bacd4203517906 100644 --- a/deps/icu-small/source/i18n/cpdtrans.cpp +++ b/deps/icu-small/source/i18n/cpdtrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -57,7 +59,7 @@ CompoundTransliterator::CompoundTransliterator( /** * Splits an ID of the form "ID;ID;..." into a compound using each - * of the IDs. + * of the IDs. * @param id of above form * @param forward if false, does the list in reverse order, and * takes the inverse of each ID. @@ -497,7 +499,7 @@ void CompoundTransliterator::handleTransliterate(Replaceable& text, UTransPositi * - start' is the value of start after calling handleKT * - limit' is the value of limit after calling handleKT */ - + /** * Example: 3 transliterators. This example illustrates the * mechanics we need to implement. C, S, and L are the contextStart, @@ -507,25 +509,25 @@ void CompoundTransliterator::handleTransliterate(Replaceable& text, UTransPositi * 1. h-u, changes hex to Unicode * * 4 7 a d 0 4 7 a - * abc/u0061/u => abca/u + * abc/u0061/u => abca/u * C S L C S L gl=f->a * * 2. upup, changes "x" to "XX" * * 4 7 a 4 7 a - * abca/u => abcAA/u - * C SL C S + * abca/u => abcAA/u + * C SL C S * L gl=a->b * 3. u-h, changes Unicode to hex * * 4 7 a 4 7 a d 0 3 - * abcAA/u => abc/u0041/u0041/u + * abcAA/u => abc/u0041/u0041/u * C S L C S * L gl=b->15 * 4. return * * 4 7 a d 0 3 - * abc/u0041/u0041/u + * abc/u0041/u0041/u * C S L */ @@ -543,7 +545,7 @@ void CompoundTransliterator::handleTransliterate(Replaceable& text, UTransPositi // compoundStart is the start for the entire compound // operation. int32_t compoundStart = index.start; - + int32_t delta = 0; // delta in length // Give each transliterator a crack at the run of characters. @@ -551,14 +553,14 @@ void CompoundTransliterator::handleTransliterate(Replaceable& text, UTransPositi for (int32_t i=0; ifilteredTransliterate(text, index, incremental); - + // In a properly written transliterator, start == limit after // handleTransliterate() returns when incremental is false. // Catch cases where the subclass doesn't do this, and throw @@ -573,7 +575,7 @@ void CompoundTransliterator::handleTransliterate(Replaceable& text, UTransPositi // Cumulative delta for insertions/deletions delta += index.limit - limit; - + if (incremental) { // In the incremental case, only allow subsequent // transliterators to modify what has already been diff --git a/deps/icu-small/source/i18n/cpdtrans.h b/deps/icu-small/source/i18n/cpdtrans.h index 004f04fd63c305..ecf23e599864fc 100644 --- a/deps/icu-small/source/i18n/cpdtrans.h +++ b/deps/icu-small/source/i18n/cpdtrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -190,7 +192,7 @@ class U_I18N_API CompoundTransliterator : public Transliterator { int32_t numAnonymousRBTs, UParseError& parseError, UErrorCode& status); - + CompoundTransliterator(UVector& list, UParseError& parseError, UErrorCode& status); diff --git a/deps/icu-small/source/i18n/csdetect.cpp b/deps/icu-small/source/i18n/csdetect.cpp index 94d440090cd14a..5dadf3774a14e7 100644 --- a/deps/icu-small/source/i18n/csdetect.cpp +++ b/deps/icu-small/source/i18n/csdetect.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -124,7 +126,7 @@ static void U_CALLCONV initRecognizers(UErrorCode &status) { if (fCSRecognizers == NULL) { status = U_MEMORY_ALLOCATION_ERROR; - } + } else { fCSRecognizers_size = rCount; for (int32_t r = 0; r < rCount; r += 1) { @@ -222,7 +224,7 @@ int32_t CharsetDetector::getDetectableCount() setRecognizers(status); - return fCSRecognizers_size; + return fCSRecognizers_size; } const CharsetMatch *CharsetDetector::detect(UErrorCode &status) diff --git a/deps/icu-small/source/i18n/csdetect.h b/deps/icu-small/source/i18n/csdetect.h index bbe81c801669b5..d0dc0d20777d44 100644 --- a/deps/icu-small/source/i18n/csdetect.h +++ b/deps/icu-small/source/i18n/csdetect.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csmatch.cpp b/deps/icu-small/source/i18n/csmatch.cpp index b2c8544fc559ac..844fc43daeb280 100644 --- a/deps/icu-small/source/i18n/csmatch.cpp +++ b/deps/icu-small/source/i18n/csmatch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines @@ -28,7 +30,7 @@ void CharsetMatch::set(InputText *input, const CharsetRecognizer *cr, int32_t co const char *csName, const char *lang) { textIn = input; - confidence = conf; + confidence = conf; fCharsetName = csName; fLang = lang; if (cr != NULL) { @@ -43,12 +45,12 @@ void CharsetMatch::set(InputText *input, const CharsetRecognizer *cr, int32_t co const char* CharsetMatch::getName()const { - return fCharsetName; + return fCharsetName; } const char* CharsetMatch::getLanguage()const { - return fLang; + return fLang; } int32_t CharsetMatch::getConfidence()const diff --git a/deps/icu-small/source/i18n/csmatch.h b/deps/icu-small/source/i18n/csmatch.h index 19a285262d399d..0931ff7774b58a 100644 --- a/deps/icu-small/source/i18n/csmatch.h +++ b/deps/icu-small/source/i18n/csmatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines @@ -45,10 +47,10 @@ class CharsetMatch : public UMemory * Default (NULL) parameters for names will be filled by calling the * corresponding getters on the recognizer. */ - void set(InputText *input, - const CharsetRecognizer *cr, - int32_t conf, - const char *csName=NULL, + void set(InputText *input, + const CharsetRecognizer *cr, + int32_t conf, + const char *csName=NULL, const char *lang=NULL); /** diff --git a/deps/icu-small/source/i18n/csr2022.cpp b/deps/icu-small/source/i18n/csr2022.cpp index 5ba30d53c44994..66289ee6fba1be 100644 --- a/deps/icu-small/source/i18n/csr2022.cpp +++ b/deps/icu-small/source/i18n/csr2022.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -22,8 +24,8 @@ U_NAMESPACE_BEGIN * Counts up the number of legal and unrecognized escape sequences in * the sample of text, and computes a score based on the total number & * the proportion that fit the encoding. - * - * + * + * * @param text the byte buffer containing text to analyse * @param textLen the size of the text in the byte. * @param escapeSequences the byte escape sequences to test for. @@ -82,7 +84,7 @@ int32_t CharsetRecog_2022::match_2022(const uint8_t *text, int32_t textLen, cons // // Initial quality is based on relative proportion of recongized vs. - // unrecognized escape sequences. + // unrecognized escape sequences. // All good: quality = 100; // half or less good: quality = 0; // linear inbetween. @@ -120,7 +122,7 @@ static const uint8_t escapeSequences_2022JP[][5] = { #if !UCONFIG_ONLY_HTML_CONVERSION static const uint8_t escapeSequences_2022KR[][5] = { - {0x1b, 0x24, 0x29, 0x43, 0x00} + {0x1b, 0x24, 0x29, 0x43, 0x00} }; static const uint8_t escapeSequences_2022CN[][5] = { @@ -145,9 +147,9 @@ const char *CharsetRecog_2022JP::getName() const { } UBool CharsetRecog_2022JP::match(InputText *textIn, CharsetMatch *results) const { - int32_t confidence = match_2022(textIn->fInputBytes, - textIn->fInputLen, - escapeSequences_2022JP, + int32_t confidence = match_2022(textIn->fInputBytes, + textIn->fInputLen, + escapeSequences_2022JP, UPRV_LENGTHOF(escapeSequences_2022JP)); results->set(textIn, this, confidence); return (confidence > 0); @@ -161,9 +163,9 @@ const char *CharsetRecog_2022KR::getName() const { } UBool CharsetRecog_2022KR::match(InputText *textIn, CharsetMatch *results) const { - int32_t confidence = match_2022(textIn->fInputBytes, - textIn->fInputLen, - escapeSequences_2022KR, + int32_t confidence = match_2022(textIn->fInputBytes, + textIn->fInputLen, + escapeSequences_2022KR, UPRV_LENGTHOF(escapeSequences_2022KR)); results->set(textIn, this, confidence); return (confidence > 0); diff --git a/deps/icu-small/source/i18n/csr2022.h b/deps/icu-small/source/i18n/csr2022.h index ba5e5e011e59e0..c0c3318caf7fb5 100644 --- a/deps/icu-small/source/i18n/csr2022.h +++ b/deps/icu-small/source/i18n/csr2022.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2015, International Business Machines @@ -23,15 +25,15 @@ class CharsetMatch; * This is a superclass for the individual detectors for * each of the detectable members of the ISO 2022 family * of encodings. - * + * * The separate classes are nested within this class. - * + * * @internal */ class CharsetRecog_2022 : public CharsetRecognizer { -public: +public: virtual ~CharsetRecog_2022() = 0; protected: @@ -41,8 +43,8 @@ class CharsetRecog_2022 : public CharsetRecognizer * Counts up the number of legal an unrecognized escape sequences in * the sample of text, and computes a score based on the total number & * the proportion that fit the encoding. - * - * + * + * * @param text the byte buffer containing text to analyse * @param textLen the size of the text in the byte. * @param escapeSequences the byte escape sequences to test for. diff --git a/deps/icu-small/source/i18n/csrecog.cpp b/deps/icu-small/source/i18n/csrecog.cpp index 7535e9aa66016e..503a5a544087e4 100644 --- a/deps/icu-small/source/i18n/csrecog.cpp +++ b/deps/icu-small/source/i18n/csrecog.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2006, International Business Machines @@ -23,6 +25,6 @@ const char *CharsetRecognizer::getLanguage() const return ""; } -U_NAMESPACE_END +U_NAMESPACE_END #endif diff --git a/deps/icu-small/source/i18n/csrecog.h b/deps/icu-small/source/i18n/csrecog.h index 97d3af7ad1a528..4d0918ba96a245 100644 --- a/deps/icu-small/source/i18n/csrecog.h +++ b/deps/icu-small/source/i18n/csrecog.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines @@ -30,13 +32,13 @@ class CharsetRecognizer : public UMemory * @return the charset name. */ virtual const char *getName() const = 0; - + /** * Get the ISO language code for this charset. * @return the language code, or null if the language cannot be determined. */ virtual const char *getLanguage() const; - + /* * Try the given input text against this Charset, and fill in the results object * with the quality of the match plus other information related to the match. diff --git a/deps/icu-small/source/i18n/csrmbcs.cpp b/deps/icu-small/source/i18n/csrmbcs.cpp index 1963bf85abe649..fef61bab2168c7 100644 --- a/deps/icu-small/source/i18n/csrmbcs.cpp +++ b/deps/icu-small/source/i18n/csrmbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -112,7 +114,7 @@ static int32_t binarySearch(const uint16_t *array, int32_t len, uint16_t value) return -1; } -IteratedChar::IteratedChar() : +IteratedChar::IteratedChar() : charValue(0), index(-1), nextIndex(0), error(FALSE), done(FALSE) { // nothing else to do. diff --git a/deps/icu-small/source/i18n/csrmbcs.h b/deps/icu-small/source/i18n/csrmbcs.h index 9ea9d8f8ee0338..6a49a859724be8 100644 --- a/deps/icu-small/source/i18n/csrmbcs.h +++ b/deps/icu-small/source/i18n/csrmbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csrsbcs.cpp b/deps/icu-small/source/i18n/csrsbcs.cpp index 803105c24a7da0..10bd9c9d54676c 100644 --- a/deps/icu-small/source/i18n/csrsbcs.cpp +++ b/deps/icu-small/source/i18n/csrsbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -143,22 +145,22 @@ int32_t NGramParser::parse(InputText *det) #if !UCONFIG_ONLY_HTML_CONVERSION static const uint8_t unshapeMap_IBM420[] = { /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */ -/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 4- */ 0x40, 0x40, 0x42, 0x42, 0x44, 0x45, 0x46, 0x47, 0x47, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, -/* 5- */ 0x50, 0x49, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, -/* 6- */ 0x60, 0x61, 0x62, 0x63, 0x63, 0x65, 0x65, 0x67, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, -/* 7- */ 0x69, 0x71, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x77, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, -/* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x80, 0x8B, 0x8B, 0x8D, 0x8D, 0x8F, -/* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0x9E, -/* A- */ 0x9E, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x9E, 0xAB, 0xAB, 0xAD, 0xAD, 0xAF, -/* B- */ 0xAF, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xB1, 0xBB, 0xBB, 0xBD, 0xBD, 0xBF, -/* C- */ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xBF, 0xCC, 0xBF, 0xCE, 0xCF, -/* D- */ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDA, 0xDC, 0xDC, 0xDC, 0xDF, -/* E- */ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, -/* F- */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, +/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 4- */ 0x40, 0x40, 0x42, 0x42, 0x44, 0x45, 0x46, 0x47, 0x47, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, +/* 5- */ 0x50, 0x49, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, +/* 6- */ 0x60, 0x61, 0x62, 0x63, 0x63, 0x65, 0x65, 0x67, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, +/* 7- */ 0x69, 0x71, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x77, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, +/* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x80, 0x8B, 0x8B, 0x8D, 0x8D, 0x8F, +/* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0x9E, +/* A- */ 0x9E, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x9E, 0xAB, 0xAB, 0xAD, 0xAD, 0xAF, +/* B- */ 0xAF, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xB1, 0xBB, 0xBB, 0xBD, 0xBD, 0xBF, +/* C- */ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xBF, 0xCC, 0xBF, 0xCE, 0xCF, +/* D- */ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDA, 0xDC, 0xDC, 0xDC, 0xDF, +/* E- */ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, +/* F- */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, }; NGramParser_IBM420::NGramParser_IBM420(const int32_t *theNgramList, const uint8_t *theCharMap):NGramParser(theNgramList, theCharMap) @@ -171,13 +173,13 @@ NGramParser_IBM420::~NGramParser_IBM420() {} int32_t NGramParser_IBM420::isLamAlef(int32_t b) { if(b == 0xB2 || b == 0xB3){ - return 0x47; + return 0x47; }else if(b == 0xB4 || b == 0xB5){ - return 0x49; + return 0x49; }else if(b == 0xB8 || b == 0xB9){ - return 0x56; + return 0x56; }else - return 0x00; + return 0x00; } /* @@ -186,23 +188,23 @@ int32_t NGramParser_IBM420::isLamAlef(int32_t b) * convert the bytes to Unicode code points but that would leave us dependent * on CharsetICU which we try to avoid. IBM420 converter amongst different versions * of JDK can produce different results and therefore is also avoided. -*/ +*/ int32_t NGramParser_IBM420::nextByte(InputText *det) { - + if (byteIndex >= det->fInputLen || det->fInputBytes[byteIndex] == 0) { return -1; - } + } int next; - + alef = isLamAlef(det->fInputBytes[byteIndex]); if(alef != 0x00) next = 0xB1 & 0xFF; else next = unshapeMap_IBM420[det->fInputBytes[byteIndex]& 0xFF] & 0xFF; - + byteIndex++; - + return next; } @@ -221,19 +223,19 @@ void NGramParser_IBM420::parseCharacters(InputText *det) } ignoreSpace = (mb == 0x20); } - + if(alef != 0x00){ mb = charMap[alef & 0xFF]; - + // TODO: 0x20 might not be a space in all character sets... if (mb != 0) { if (!(mb == 0x20 && ignoreSpace)) { - addByte(mb); + addByte(mb); } - + ignoreSpace = (mb == 0x20); } - + } } } @@ -260,382 +262,382 @@ int32_t CharsetRecog_sbcs::match_sbcs(InputText *det, const int32_t ngrams[], c } static const uint8_t charMap_8859_1[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 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, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 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, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, }; static const uint8_t charMap_8859_2[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 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, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 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, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, }; static const uint8_t charMap_8859_5[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, }; static const uint8_t charMap_8859_6[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, }; static const uint8_t charMap_8859_7[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, - 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, - 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 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, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, + 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, + 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 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, 0x20, }; static const uint8_t charMap_8859_8[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 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, 0x20, 0x20, 0x20, 0x20, 0x20, }; static const uint8_t charMap_8859_9[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 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, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 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, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, }; static const int32_t ngrams_windows_1251[] = { - 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, - 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, - 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, - 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520, + 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, + 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, + 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, + 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520, }; static const uint8_t charMap_windows_1251[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, - 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, - 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, - 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, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, + 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, + 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, + 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, }; static const int32_t ngrams_windows_1256[] = { - 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, - 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, - 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, - 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420, + 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, + 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, + 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, + 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420, }; static const uint8_t charMap_windows_1256[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, - 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, + 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF, }; static const int32_t ngrams_KOI8_R[] = { - 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, - 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, - 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, - 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF, + 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, + 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, + 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, + 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF, }; static const uint8_t charMap_KOI8_R[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, }; #if !UCONFIG_ONLY_HTML_CONVERSION static const int32_t ngrams_IBM424_he_rtl[] = { - 0x404146, 0x404148, 0x404151, 0x404171, 0x404251, 0x404256, 0x404541, 0x404546, 0x404551, 0x404556, 0x404562, 0x404569, 0x404571, 0x405441, 0x405445, 0x405641, - 0x406254, 0x406954, 0x417140, 0x454041, 0x454042, 0x454045, 0x454054, 0x454056, 0x454069, 0x454641, 0x464140, 0x465540, 0x465740, 0x466840, 0x467140, 0x514045, - 0x514540, 0x514671, 0x515155, 0x515540, 0x515740, 0x516840, 0x517140, 0x544041, 0x544045, 0x544140, 0x544540, 0x554041, 0x554042, 0x554045, 0x554054, 0x554056, - 0x554069, 0x564540, 0x574045, 0x584540, 0x585140, 0x585155, 0x625440, 0x684045, 0x685155, 0x695440, 0x714041, 0x714042, 0x714045, 0x714054, 0x714056, 0x714069, + 0x404146, 0x404148, 0x404151, 0x404171, 0x404251, 0x404256, 0x404541, 0x404546, 0x404551, 0x404556, 0x404562, 0x404569, 0x404571, 0x405441, 0x405445, 0x405641, + 0x406254, 0x406954, 0x417140, 0x454041, 0x454042, 0x454045, 0x454054, 0x454056, 0x454069, 0x454641, 0x464140, 0x465540, 0x465740, 0x466840, 0x467140, 0x514045, + 0x514540, 0x514671, 0x515155, 0x515540, 0x515740, 0x516840, 0x517140, 0x544041, 0x544045, 0x544140, 0x544540, 0x554041, 0x554042, 0x554045, 0x554054, 0x554056, + 0x554069, 0x564540, 0x574045, 0x584540, 0x585140, 0x585155, 0x625440, 0x684045, 0x685155, 0x695440, 0x714041, 0x714042, 0x714045, 0x714054, 0x714056, 0x714069, }; static const int32_t ngrams_IBM424_he_ltr[] = { @@ -647,22 +649,22 @@ static const int32_t ngrams_IBM424_he_ltr[] = { static const uint8_t charMap_IBM424_he[] = { /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */ -/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 4- */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 5- */ 0x40, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 7- */ 0x40, 0x71, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x40, -/* 8- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 9- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* B- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 4- */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 5- */ 0x40, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 7- */ 0x40, 0x71, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x40, +/* 8- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 9- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* B- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, }; static const int32_t ngrams_IBM420_ar_rtl[] = { @@ -673,7 +675,7 @@ static const int32_t ngrams_IBM420_ar_rtl[] = { }; static const int32_t ngrams_IBM420_ar_ltr[] = { - 0x404656, 0x4056BB, 0x4056BF, 0x406273, 0x406275, 0x4062B1, 0x4062BB, 0x4062DC, 0x406356, 0x407556, 0x4075DC, 0x40B156, 0x40BB56, 0x40BD56, 0x40BDBB, 0x40BDCF, + 0x404656, 0x4056BB, 0x4056BF, 0x406273, 0x406275, 0x4062B1, 0x4062BB, 0x4062DC, 0x406356, 0x407556, 0x4075DC, 0x40B156, 0x40BB56, 0x40BD56, 0x40BDBB, 0x40BDCF, 0x40BDDC, 0x40DAB1, 0x40DCAB, 0x40DCB1, 0x49B156, 0x564056, 0x564058, 0x564062, 0x564063, 0x564073, 0x564075, 0x564078, 0x56409A, 0x5640B1, 0x5640BB, 0x5640BD, 0x5640BF, 0x5640DA, 0x5640DC, 0x565840, 0x56B156, 0x56CF40, 0x58B156, 0x63B156, 0x63BD56, 0x67B156, 0x69B156, 0x73B156, 0x78B156, 0x9AB156, 0xAB4062, 0xADB156, 0xB14062, 0xB15640, 0xB156CF, 0xB19A40, 0xB1B140, 0xBB4062, 0xBB40DC, 0xBBB156, 0xBD5640, 0xBDBB40, 0xCF4062, 0xCF40DC, 0xCFB156, 0xDAB19A, 0xDCAB40, 0xDCB156 @@ -681,22 +683,22 @@ static const int32_t ngrams_IBM420_ar_ltr[] = { static const uint8_t charMap_IBM420_ar[]= { /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */ -/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 4- */ 0x40, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 5- */ 0x40, 0x51, 0x52, 0x40, 0x40, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 7- */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -/* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, -/* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, -/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, -/* B- */ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0x40, 0x40, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, -/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0xCB, 0x40, 0xCD, 0x40, 0xCF, -/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, -/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xEA, 0xEB, 0x40, 0xED, 0xEE, 0xEF, -/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xFB, 0xFC, 0xFD, 0xFE, 0x40, +/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 4- */ 0x40, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 5- */ 0x40, 0x51, 0x52, 0x40, 0x40, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 7- */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, +/* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, +/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, +/* B- */ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0x40, 0x40, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, +/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0xCB, 0x40, 0xCD, 0x40, 0xCF, +/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, +/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xEA, 0xEB, 0x40, 0xED, 0xEE, 0xEF, +/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xFB, 0xFC, 0xFD, 0xFE, 0x40, }; #endif @@ -708,39 +710,39 @@ struct NGramsPlusLang { }; static const NGramsPlusLang ngrams_8859_1[] = { - { + { { - 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, - 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, - 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, - 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320, + 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, + 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, + 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, + 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320, }, "en" }, - { + { { - 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, - 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, - 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, - 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572, + 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, + 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, + 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, + 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572, }, "da" }, - { + { { - 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, - 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, - 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, - 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572, + 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, + 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, + 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, + 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572, }, "de" }, { { - 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, - 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, - 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, - 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20, + 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, + 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, + 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, + 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20, }, "es" }, @@ -1023,7 +1025,7 @@ CharsetRecog_8859_8::~CharsetRecog_8859_8() // nothing to do } -const char *CharsetRecog_8859_8::getName() const +const char *CharsetRecog_8859_8::getName() const { return "ISO-8859-8"; } @@ -1218,14 +1220,14 @@ const char *CharsetRecog_IBM420_ar::getLanguage() const return "ar"; } - + int32_t CharsetRecog_IBM420_ar::match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t byteMap[]) const { NGramParser_IBM420 parser(ngrams, byteMap); int32_t result; - + result = parser.parse(det); - + return result; } @@ -1266,3 +1268,4 @@ UBool CharsetRecog_IBM420_ar_ltr::match(InputText *textIn, CharsetMatch *results U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/csrsbcs.h b/deps/icu-small/source/i18n/csrsbcs.h index b4897b1ceec91a..a196acf9d0729c 100644 --- a/deps/icu-small/source/i18n/csrsbcs.h +++ b/deps/icu-small/source/i18n/csrsbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2015, International Business Machines @@ -20,7 +22,7 @@ class NGramParser : public UMemory { private: int32_t ngram; - const int32_t *ngramList; + const int32_t *ngramList; int32_t ngramCount; int32_t hitCount; @@ -42,7 +44,7 @@ class NGramParser : public UMemory int32_t search(const int32_t *table, int32_t value); void lookup(int32_t thisNgram); - + virtual int32_t nextByte(InputText *det); virtual void parseCharacters(InputText *det); @@ -120,7 +122,7 @@ class CharsetRecog_8859_8 : public CharsetRecog_sbcs { public: virtual ~CharsetRecog_8859_8(); - + virtual const char *getName() const; }; @@ -168,7 +170,7 @@ class CharsetRecog_8859_8_I_he : public CharsetRecog_8859_8 { public: virtual ~CharsetRecog_8859_8_I_he(); - + const char *getName() const; const char *getLanguage() const; @@ -245,17 +247,17 @@ class CharsetRecog_IBM424_he : public CharsetRecog_sbcs class CharsetRecog_IBM424_he_rtl : public CharsetRecog_IBM424_he { public: virtual ~CharsetRecog_IBM424_he_rtl(); - + const char *getName() const; - + virtual UBool match(InputText *det, CharsetMatch *results) const; }; class CharsetRecog_IBM424_he_ltr : public CharsetRecog_IBM424_he { virtual ~CharsetRecog_IBM424_he_ltr(); - + const char *getName() const; - + virtual UBool match(InputText *det, CharsetMatch *results) const; }; @@ -266,23 +268,23 @@ class CharsetRecog_IBM420_ar : public CharsetRecog_sbcs const char *getLanguage() const; int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const; - + }; class CharsetRecog_IBM420_ar_rtl : public CharsetRecog_IBM420_ar { public: virtual ~CharsetRecog_IBM420_ar_rtl(); - + const char *getName() const; - + virtual UBool match(InputText *det, CharsetMatch *results) const; }; class CharsetRecog_IBM420_ar_ltr : public CharsetRecog_IBM420_ar { virtual ~CharsetRecog_IBM420_ar_ltr(); - + const char *getName() const; - + virtual UBool match(InputText *det, CharsetMatch *results) const; }; #endif diff --git a/deps/icu-small/source/i18n/csrucode.cpp b/deps/icu-small/source/i18n/csrucode.cpp index 3780c3b3e684e6..609ebe439feca1 100644 --- a/deps/icu-small/source/i18n/csrucode.cpp +++ b/deps/icu-small/source/i18n/csrucode.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2013, International Business Machines @@ -33,7 +35,7 @@ const char *CharsetRecog_UTF_16_BE::getName() const // Any 8 bit non-control characters bump the confidence up. These have a zero high byte, // and are very likely to be UTF-16, although they could also be part of a UTF-32 code. // NULs are a contra-indication, they will appear commonly if the actual encoding is UTF-32. -// NULs should be rare in actual text. +// NULs should be rare in actual text. static int32_t adjustConfidence(UChar codeUnit, int32_t confidence) { if (codeUnit == 0) { @@ -149,7 +151,7 @@ UBool CharsetRecog_UTF_32::match(InputText* textIn, CharsetMatch *results) const } else if (hasBOM && numValid > numInvalid*10) { confidence = 80; } else if (numValid > 3 && numInvalid == 0) { - confidence = 100; + confidence = 100; } else if (numValid > 0 && numInvalid == 0) { confidence = 80; } else if (numValid > numInvalid*10) { @@ -175,7 +177,7 @@ int32_t CharsetRecog_UTF_32_BE::getChar(const uint8_t *input, int32_t index) con { return input[index + 0] << 24 | input[index + 1] << 16 | input[index + 2] << 8 | input[index + 3]; -} +} CharsetRecog_UTF_32_LE::~CharsetRecog_UTF_32_LE() { @@ -195,3 +197,4 @@ int32_t CharsetRecog_UTF_32_LE::getChar(const uint8_t *input, int32_t index) con U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/csrucode.h b/deps/icu-small/source/i18n/csrucode.h index 458b2c96ad9d53..68ebaf36f76668 100644 --- a/deps/icu-small/source/i18n/csrucode.h +++ b/deps/icu-small/source/i18n/csrucode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines @@ -19,10 +21,10 @@ U_NAMESPACE_BEGIN /** * This class matches UTF-16 and UTF-32, both big- and little-endian. The * BOM will be used if it is present. - * + * * @internal */ -class CharsetRecog_Unicode : public CharsetRecognizer +class CharsetRecog_Unicode : public CharsetRecognizer { public: diff --git a/deps/icu-small/source/i18n/csrutf8.cpp b/deps/icu-small/source/i18n/csrutf8.cpp index 6dd874e0ba6bf0..2f153793fbcb33 100644 --- a/deps/icu-small/source/i18n/csrutf8.cpp +++ b/deps/icu-small/source/i18n/csrutf8.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2014, International Business Machines @@ -33,7 +35,7 @@ UBool CharsetRecog_UTF8::match(InputText* input, CharsetMatch *results) const { int32_t trailBytes = 0; int32_t confidence; - if (input->fRawLength >= 3 && + if (input->fRawLength >= 3 && inputBytes[0] == 0xEF && inputBytes[1] == 0xBB && inputBytes[2] == 0xBF) { hasBOM = TRUE; } diff --git a/deps/icu-small/source/i18n/csrutf8.h b/deps/icu-small/source/i18n/csrutf8.h index 79a424b7c0cda7..72d65dc4940436 100644 --- a/deps/icu-small/source/i18n/csrutf8.h +++ b/deps/icu-small/source/i18n/csrutf8.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines @@ -24,8 +26,8 @@ U_NAMESPACE_BEGIN class CharsetRecog_UTF8: public CharsetRecognizer { public: - - virtual ~CharsetRecog_UTF8(); + + virtual ~CharsetRecog_UTF8(); const char *getName() const; @@ -33,7 +35,7 @@ class CharsetRecog_UTF8: public CharsetRecognizer { * @see com.ibm.icu.text.CharsetRecognizer#match(com.ibm.icu.text.CharsetDetector) */ UBool match(InputText *input, CharsetMatch *results) const; - + }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/curramt.cpp b/deps/icu-small/source/i18n/curramt.cpp index 195d5f30f4808f..26ea7f4bf9e933 100644 --- a/deps/icu-small/source/i18n/curramt.cpp +++ b/deps/icu-small/source/i18n/curramt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004, International Business Machines @@ -42,7 +44,7 @@ UObject* CurrencyAmount::clone() const { CurrencyAmount::~CurrencyAmount() { } - + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CurrencyAmount) U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/currfmt.cpp b/deps/icu-small/source/i18n/currfmt.cpp index 23a7d52acac157..b92aa00e5cb8b5 100644 --- a/deps/icu-small/source/i18n/currfmt.cpp +++ b/deps/icu-small/source/i18n/currfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014 International Business Machines diff --git a/deps/icu-small/source/i18n/currfmt.h b/deps/icu-small/source/i18n/currfmt.h index b3f23e56f9676b..83e027246562eb 100644 --- a/deps/icu-small/source/i18n/currfmt.h +++ b/deps/icu-small/source/i18n/currfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/currpinf.cpp b/deps/icu-small/source/i18n/currpinf.cpp index 9d8d524a0fb5a4..5140b5e7f744a8 100644 --- a/deps/icu-small/source/i18n/currpinf.cpp +++ b/deps/icu-small/source/i18n/currpinf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2014, International Business Machines Corporation and @@ -75,7 +77,7 @@ CurrencyPluralInfo::CurrencyPluralInfo(const Locale& locale, UErrorCode& status) initialize(locale, status); } -CurrencyPluralInfo::CurrencyPluralInfo(const CurrencyPluralInfo& info) +CurrencyPluralInfo::CurrencyPluralInfo(const CurrencyPluralInfo& info) : UObject(info), fPluralCountToCurrencyUnitPattern(NULL), fPluralRules(NULL), @@ -93,7 +95,7 @@ CurrencyPluralInfo::operator=(const CurrencyPluralInfo& info) { deleteHash(fPluralCountToCurrencyUnitPattern); UErrorCode status = U_ZERO_ERROR; fPluralCountToCurrencyUnitPattern = initHash(status); - copyHash(info.fPluralCountToCurrencyUnitPattern, + copyHash(info.fPluralCountToCurrencyUnitPattern, fPluralCountToCurrencyUnitPattern, status); if ( U_FAILURE(status) ) { return *this; @@ -148,7 +150,7 @@ CurrencyPluralInfo::clone() const { return new CurrencyPluralInfo(*this); } -const PluralRules* +const PluralRules* CurrencyPluralInfo::getPluralRules() const { return fPluralRules; } @@ -156,16 +158,16 @@ CurrencyPluralInfo::getPluralRules() const { UnicodeString& CurrencyPluralInfo::getCurrencyPluralPattern(const UnicodeString& pluralCount, UnicodeString& result) const { - const UnicodeString* currencyPluralPattern = + const UnicodeString* currencyPluralPattern = (UnicodeString*)fPluralCountToCurrencyUnitPattern->get(pluralCount); if (currencyPluralPattern == NULL) { // fall back to "other" if (pluralCount.compare(gPluralCountOther, 5)) { - currencyPluralPattern = + currencyPluralPattern = (UnicodeString*)fPluralCountToCurrencyUnitPattern->get(UnicodeString(TRUE, gPluralCountOther, 5)); } if (currencyPluralPattern == NULL) { - // no currencyUnitPatterns defined, + // no currencyUnitPatterns defined, // fallback to predefined defult. // This should never happen when ICU resource files are // available, since currencyUnitPattern of "other" is always @@ -211,7 +213,7 @@ CurrencyPluralInfo::setLocale(const Locale& loc, UErrorCode& status) { } -void +void CurrencyPluralInfo::initialize(const Locale& loc, UErrorCode& status) { if (U_FAILURE(status)) { return; @@ -225,7 +227,7 @@ CurrencyPluralInfo::initialize(const Locale& loc, UErrorCode& status) { setupCurrencyPluralPattern(loc, status); } - + void CurrencyPluralInfo::setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status) { if (U_FAILURE(status)) { @@ -283,7 +285,7 @@ CurrencyPluralInfo::setupCurrencyPluralPattern(const Locale& loc, UErrorCode& st UResourceBundle *currRb = ures_open(U_ICUDATA_CURR, loc.getName(), &ec); UResourceBundle *currencyRes = ures_getByKeyWithFallback(currRb, gCurrUnitPtnTag, NULL, &ec); - + #ifdef CURRENCY_PLURAL_INFO_DEBUG std::cout << "in set up\n"; #endif @@ -303,13 +305,13 @@ CurrencyPluralInfo::setupCurrencyPluralPattern(const Locale& loc, UErrorCode& st pattern->extract(0, pattern->length(), result_1, "UTF-8"); std::cout << "pluralCount: " << pluralCount << "; pattern: " << result_1 << "\n"; #endif - pattern->findAndReplace(UnicodeString(TRUE, gPart0, 3), + pattern->findAndReplace(UnicodeString(TRUE, gPart0, 3), UnicodeString(numberStylePattern, numberStylePatternLen)); pattern->findAndReplace(UnicodeString(TRUE, gPart1, 3), UnicodeString(TRUE, gTripleCurrencySign, 3)); if (hasSeparator) { UnicodeString negPattern(patternChars, ptnLen); - negPattern.findAndReplace(UnicodeString(TRUE, gPart0, 3), + negPattern.findAndReplace(UnicodeString(TRUE, gPart0, 3), UnicodeString(negNumberStylePattern, negNumberStylePatternLen)); negPattern.findAndReplace(UnicodeString(TRUE, gPart1, 3), UnicodeString(TRUE, gTripleCurrencySign, 3)); pattern->append(gNumberPatternSeparator); @@ -333,7 +335,7 @@ CurrencyPluralInfo::setupCurrencyPluralPattern(const Locale& loc, UErrorCode& st void -CurrencyPluralInfo::deleteHash(Hashtable* hTable) +CurrencyPluralInfo::deleteHash(Hashtable* hTable) { if ( hTable == NULL ) { return; @@ -361,7 +363,7 @@ CurrencyPluralInfo::initHash(UErrorCode& status) { return NULL; } if ( U_FAILURE(status) ) { - delete hTable; + delete hTable; return NULL; } hTable->setValueComparator(ValueComparator); diff --git a/deps/icu-small/source/i18n/currunit.cpp b/deps/icu-small/source/i18n/currunit.cpp index 64233aee7cf55a..ede190084237b3 100644 --- a/deps/icu-small/source/i18n/currunit.cpp +++ b/deps/icu-small/source/i18n/currunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines @@ -51,7 +53,7 @@ UObject* CurrencyUnit::clone() const { CurrencyUnit::~CurrencyUnit() { } - + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CurrencyUnit) U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/dangical.cpp b/deps/icu-small/source/i18n/dangical.cpp index bfe15b59edbf26..328ad851fb838e 100644 --- a/deps/icu-small/source/i18n/dangical.cpp +++ b/deps/icu-small/source/i18n/dangical.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2013, International Business Machines Corporation @@ -54,7 +56,7 @@ DangiCalendar::DangiCalendar(const Locale& aLocale, UErrorCode& success) { } -DangiCalendar::DangiCalendar (const DangiCalendar& other) +DangiCalendar::DangiCalendar (const DangiCalendar& other) : ChineseCalendar(other) { } @@ -69,37 +71,37 @@ DangiCalendar::clone() const return new DangiCalendar(*this); } -const char *DangiCalendar::getType() const { +const char *DangiCalendar::getType() const { return "dangi"; } /** * The time zone used for performing astronomical computations for - * Dangi calendar. In Korea various timezones have been used historically - * (cf. http://www.math.snu.ac.kr/~kye/others/lunar.html): - * - * - 1908/04/01: GMT+8 - * 1908/04/01 - 1911/12/31: GMT+8.5 - * 1912/01/01 - 1954/03/20: GMT+9 - * 1954/03/21 - 1961/08/09: GMT+8.5 - * 1961/08/10 - : GMT+9 - * - * Note that, in 1908-1911, the government did not apply the timezone change - * but used GMT+8. In addition, 1954-1961's timezone change does not affect - * the lunar date calculation. Therefore, the following simpler rule works: - * - * -1911: GMT+8 - * 1912-: GMT+9 - * - * Unfortunately, our astronomer's approximation doesn't agree with the - * references (http://www.math.snu.ac.kr/~kye/others/lunar.html and - * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115) - * in 1897/7/30. So the following ad hoc fix is used here: - * - * -1896: GMT+8 - * 1897: GMT+7 - * 1898-1911: GMT+8 - * 1912- : GMT+9 + * Dangi calendar. In Korea various timezones have been used historically + * (cf. http://www.math.snu.ac.kr/~kye/others/lunar.html): + * + * - 1908/04/01: GMT+8 + * 1908/04/01 - 1911/12/31: GMT+8.5 + * 1912/01/01 - 1954/03/20: GMT+9 + * 1954/03/21 - 1961/08/09: GMT+8.5 + * 1961/08/10 - : GMT+9 + * + * Note that, in 1908-1911, the government did not apply the timezone change + * but used GMT+8. In addition, 1954-1961's timezone change does not affect + * the lunar date calculation. Therefore, the following simpler rule works: + * + * -1911: GMT+8 + * 1912-: GMT+9 + * + * Unfortunately, our astronomer's approximation doesn't agree with the + * references (http://www.math.snu.ac.kr/~kye/others/lunar.html and + * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115) + * in 1897/7/30. So the following ad hoc fix is used here: + * + * -1896: GMT+8 + * 1897: GMT+7 + * 1898-1911: GMT+8 + * 1912- : GMT+9 */ static void U_CALLCONV initDangiCalZoneAstroCalc(void) { U_ASSERT(gDangiCalendarZoneAstroCalc == NULL); @@ -136,3 +138,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DangiCalendar) U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/dangical.h b/deps/icu-small/source/i18n/dangical.h index cc35ca3f07b3f4..99f3fd8f09a1b2 100644 --- a/deps/icu-small/source/i18n/dangical.h +++ b/deps/icu-small/source/i18n/dangical.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2013, International Business Machines Corporation @@ -25,7 +27,7 @@ U_NAMESPACE_BEGIN *

      DangiCalendar is a concrete subclass of {@link Calendar} * that implements a traditional Korean lunisolar calendar.

      * - *

      DangiCalendar usually should be instantiated using + *

      DangiCalendar usually should be instantiated using * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a ULocale * with the tag "@calendar=dangi".

      * @@ -75,7 +77,7 @@ class DangiCalendar : public ChineseCalendar { const TimeZone* getDangiCalZoneAstroCalc(void) const; // UObject stuff - public: + public: /** * @return The class ID for this object. All objects of a given class have the * same class ID. Objects of other classes have different class IDs. @@ -106,7 +108,7 @@ class DangiCalendar : public ChineseCalendar { private: - + DangiCalendar(); // default constructor not implemented }; @@ -114,3 +116,6 @@ U_NAMESPACE_END #endif #endif + + + diff --git a/deps/icu-small/source/i18n/datefmt.cpp b/deps/icu-small/source/i18n/datefmt.cpp index 048a4723ef6c91..2767e3f382917d 100644 --- a/deps/icu-small/source/i18n/datefmt.cpp +++ b/deps/icu-small/source/i18n/datefmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -63,7 +65,7 @@ const DateFmtBestPattern *LocaleCacheKey::createObject( return NULL; } -class U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey { +class U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey { private: UnicodeString fSkeleton; public: @@ -82,7 +84,7 @@ class U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey::operator==(other)) { @@ -103,7 +105,7 @@ class U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey pattern( new DateFmtBestPattern( dtpg->getBestPattern(fSkeleton, status)), @@ -317,7 +319,7 @@ DateFormat::format(UDate date, UnicodeString& appendTo) const { // Note that any error information is just lost. That's okay // for this convenience method. - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); return format(date, appendTo, fpos); } @@ -718,10 +720,10 @@ UDisplayContext DateFormat::getContext(UDisplayContextType type, UErrorCode& sta //---------------------------------------------------------------------- -DateFormat& +DateFormat& DateFormat::setBooleanAttribute(UDateFormatBooleanAttribute attr, - UBool newValue, - UErrorCode &status) { + UBool newValue, + UErrorCode &status) { if(!fBoolFlags.isValidValue(newValue)) { status = U_ILLEGAL_ARGUMENT_ERROR; } else { @@ -733,7 +735,7 @@ DateFormat::setBooleanAttribute(UDateFormatBooleanAttribute attr, //---------------------------------------------------------------------- -UBool +UBool DateFormat::getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &/*status*/) const { return fBoolFlags.get(attr); diff --git a/deps/icu-small/source/i18n/dayperiodrules.cpp b/deps/icu-small/source/i18n/dayperiodrules.cpp index fb8ae8147f8d56..30414823efdfe3 100644 --- a/deps/icu-small/source/i18n/dayperiodrules.cpp +++ b/deps/icu-small/source/i18n/dayperiodrules.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2016, International Business Machines @@ -42,129 +44,90 @@ enum CutoffType { } // namespace -struct DayPeriodRulesDataSink : public ResourceTableSink { - // Initialize sub-sinks. - DayPeriodRulesDataSink() : - rulesSink(*this), ruleSetSink(*this), periodSink(*this), cutoffSink(*this) { +struct DayPeriodRulesDataSink : public ResourceSink { + DayPeriodRulesDataSink() { for (int32_t i = 0; i < UPRV_LENGTHOF(cutoffs); ++i) { cutoffs[i] = 0; } } virtual ~DayPeriodRulesDataSink(); - // Entry point. - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - if (uprv_strcmp(key, "locales") == 0) { - return &localesSink; - } else if (uprv_strcmp(key, "rules") == 0) { - // Allocate one more than needed to skip [0]. See comment in parseSetNum(). - data->rules = new DayPeriodRules[data->maxRuleSetNum + 1]; - if (data->rules == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } else { - return &rulesSink; + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + ResourceTable dayPeriodData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; dayPeriodData.getKeyAndValue(i, key, value); ++i) { + if (uprv_strcmp(key, "locales") == 0) { + ResourceTable locales = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t j = 0; locales.getKeyAndValue(j, key, value); ++j) { + UnicodeString setNum_str = value.getUnicodeString(errorCode); + int32_t setNum = parseSetNum(setNum_str, errorCode); + uhash_puti(data->localeToRuleSetNumMap, const_cast(key), setNum, &errorCode); + } + } else if (uprv_strcmp(key, "rules") == 0) { + // Allocate one more than needed to skip [0]. See comment in parseSetNum(). + data->rules = new DayPeriodRules[data->maxRuleSetNum + 1]; + if (data->rules == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + ResourceTable rules = value.getTable(errorCode); + processRules(rules, key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } } } - return NULL; } - // Data root -> locales. - struct LocalesSink : public ResourceTableSink { - virtual ~LocalesSink(); + void processRules(const ResourceTable &rules, const char *key, + ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + for (int32_t i = 0; rules.getKeyAndValue(i, key, value); ++i) { + ruleSetNum = parseSetNum(key, errorCode); + ResourceTable ruleSet = value.getTable(errorCode); if (U_FAILURE(errorCode)) { return; } - UnicodeString setNum_str = value.getUnicodeString(errorCode); - int32_t setNum = parseSetNum(setNum_str, errorCode); - uhash_puti(data->localeToRuleSetNumMap, const_cast(key), setNum, &errorCode); - } - } localesSink; - - // Data root -> rules. - struct RulesSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - RulesSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~RulesSink(); - - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - outer.ruleSetNum = parseSetNum(key, errorCode); - return &outer.ruleSetSink; - } - } rulesSink; - - // Data root -> rules -> a rule set. - struct RuleSetSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - RuleSetSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~RuleSetSink(); - - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - outer.period = DayPeriodRules::getDayPeriodFromString(key); - if (outer.period == DayPeriodRules::DAYPERIOD_UNKNOWN) { - errorCode = U_INVALID_FORMAT_ERROR; - return NULL; + for (int32_t j = 0; ruleSet.getKeyAndValue(j, key, value); ++j) { + period = DayPeriodRules::getDayPeriodFromString(key); + if (period == DayPeriodRules::DAYPERIOD_UNKNOWN) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + ResourceTable periodDefinition = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t k = 0; periodDefinition.getKeyAndValue(k, key, value); ++k) { + if (value.getType() == URES_STRING) { + // Key-value pairs (e.g. before{6:00}). + CutoffType type = getCutoffTypeFromString(key); + addCutoff(type, value.getUnicodeString(errorCode), errorCode); + if (U_FAILURE(errorCode)) { return; } + } else { + // Arrays (e.g. before{6:00, 24:00}). + cutoffType = getCutoffTypeFromString(key); + ResourceArray cutoffArray = value.getArray(errorCode); + if (U_FAILURE(errorCode)) { return; } + + int32_t length = cutoffArray.getSize(); + for (int32_t l = 0; l < length; ++l) { + cutoffArray.getValue(l, value); + addCutoff(cutoffType, value.getUnicodeString(errorCode), errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } + } + setDayPeriodForHoursFromCutoffs(errorCode); + for (int32_t k = 0; k < UPRV_LENGTHOF(cutoffs); ++k) { + cutoffs[k] = 0; + } } - return &outer.periodSink; - } - - virtual void leave(UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - if (!data->rules[outer.ruleSetNum].allHoursAreSet()) { + if (!data->rules[ruleSetNum].allHoursAreSet()) { errorCode = U_INVALID_FORMAT_ERROR; + return; } } - } ruleSetSink; - - // Data root -> rules -> a rule set -> a period (e.g. "morning1"). - // Key-value pairs (e.g. before{6:00}) will be captured here. - // Arrays (e.g. before{6:00, 24:00}) will be redirected to the next sink. - struct PeriodSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - PeriodSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~PeriodSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - CutoffType type = getCutoffTypeFromString(key); - outer.addCutoff(type, value.getUnicodeString(errorCode), errorCode); - } - - virtual ResourceArraySink *getOrCreateArraySink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.cutoffType = getCutoffTypeFromString(key); - return &outer.cutoffSink; - } - - virtual void leave(UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - outer.setDayPeriodForHoursFromCutoffs(errorCode); - for (int32_t i = 0; i < UPRV_LENGTHOF(outer.cutoffs); ++i) { - outer.cutoffs[i] = 0; - } - } - } periodSink; - - // Data root -> rules -> a rule set -> a period -> a cutoff type. - // Will enter this sink if 2+ times appear in a single cutoff type (e.g. before{6:00, 24:00}). - struct CutoffSink : public ResourceArraySink { - DayPeriodRulesDataSink &outer; - CutoffSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~CutoffSink(); - - virtual void put(int32_t, const ResourceValue &value, UErrorCode &errorCode) { - outer.addCutoff(outer.cutoffType, value.getUnicodeString(errorCode), errorCode); - } - } cutoffSink; + } // Members. int32_t cutoffs[25]; // [0] thru [24]: 24 is allowed in "before 24". @@ -316,35 +279,31 @@ struct DayPeriodRulesDataSink : public ResourceTableSink { } }; // struct DayPeriodRulesDataSink -struct DayPeriodRulesCountSink : public ResourceTableSink { +struct DayPeriodRulesCountSink : public ResourceSink { virtual ~DayPeriodRulesCountSink(); - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - int32_t setNum = DayPeriodRulesDataSink::parseSetNum(key, errorCode); - if (setNum > data->maxRuleSetNum) { - data->maxRuleSetNum = setNum; - } + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + ResourceTable rules = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } - return NULL; + for (int32_t i = 0; rules.getKeyAndValue(i, key, value); ++i) { + int32_t setNum = DayPeriodRulesDataSink::parseSetNum(key, errorCode); + if (setNum > data->maxRuleSetNum) { + data->maxRuleSetNum = setNum; + } + } } }; // Out-of-line virtual destructors. -DayPeriodRulesDataSink::LocalesSink::~LocalesSink() {} -DayPeriodRulesDataSink::CutoffSink::~CutoffSink() {} -DayPeriodRulesDataSink::PeriodSink::~PeriodSink() {} -DayPeriodRulesDataSink::RuleSetSink::~RuleSetSink() {} -DayPeriodRulesDataSink::RulesSink::~RulesSink() {} DayPeriodRulesDataSink::~DayPeriodRulesDataSink() {} - DayPeriodRulesCountSink::~DayPeriodRulesCountSink() {} namespace { UInitOnce initOnce = U_INITONCE_INITIALIZER; -UBool dayPeriodRulesCleanup() { +U_CFUNC UBool U_CALLCONV dayPeriodRulesCleanup() { delete[] data->rules; uhash_close(data->localeToRuleSetNumMap); delete data; @@ -354,7 +313,7 @@ UBool dayPeriodRulesCleanup() { } // namespace -void DayPeriodRules::load(UErrorCode &errorCode) { +void U_CALLCONV DayPeriodRules::load(UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } @@ -365,11 +324,11 @@ void DayPeriodRules::load(UErrorCode &errorCode) { // Get the largest rule set number (so we allocate enough objects). DayPeriodRulesCountSink countSink; - ures_getAllTableItemsWithFallback(rb_dayPeriods.getAlias(), "rules", countSink, errorCode); + ures_getAllItemsWithFallback(rb_dayPeriods.getAlias(), "rules", countSink, errorCode); // Populate rules. DayPeriodRulesDataSink sink; - ures_getAllTableItemsWithFallback(rb_dayPeriods.getAlias(), "", sink, errorCode); + ures_getAllItemsWithFallback(rb_dayPeriods.getAlias(), "", sink, errorCode); ucln_i18n_registerCleanup(UCLN_I18N_DAYPERIODRULES, dayPeriodRulesCleanup); } diff --git a/deps/icu-small/source/i18n/dayperiodrules.h b/deps/icu-small/source/i18n/dayperiodrules.h index 5491f7c1ff013f..3c006cdc2f59dd 100644 --- a/deps/icu-small/source/i18n/dayperiodrules.h +++ b/deps/icu-small/source/i18n/dayperiodrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2016, International Business Machines @@ -59,7 +61,7 @@ class DayPeriodRules : public UMemory { // Translates "morning1" to DAYPERIOD_MORNING1, for example. static DayPeriod getDayPeriodFromString(const char *type_str); - static void load(UErrorCode &errorCode); + static void U_CALLCONV load(UErrorCode &errorCode); // Sets period type for all hours in [startHour, limitHour). void add(int32_t startHour, int32_t limitHour, DayPeriod period); diff --git a/deps/icu-small/source/i18n/dcfmtimp.h b/deps/icu-small/source/i18n/dcfmtimp.h index a8279479608ddc..58858728419641 100644 --- a/deps/icu-small/source/i18n/dcfmtimp.h +++ b/deps/icu-small/source/i18n/dcfmtimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/dcfmtsym.cpp b/deps/icu-small/source/i18n/dcfmtsym.cpp index fee9b319ba0bcf..caf230d1243404 100644 --- a/deps/icu-small/source/i18n/dcfmtsym.cpp +++ b/deps/icu-small/source/i18n/dcfmtsym.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and +* Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -35,6 +37,7 @@ #include "locbased.h" #include "uresimp.h" #include "ureslocs.h" +#include "charstr.h" // ***************************************************************************** // class DecimalFormatSymbols @@ -51,10 +54,45 @@ static const char gAfterCurrencyTag[] = "afterCurrency"; static const char gCurrencyMatchTag[] = "currencyMatch"; static const char gCurrencySudMatchTag[] = "surroundingMatch"; static const char gCurrencyInsertBtnTag[] = "insertBetween"; - +static const char gLatn[] = "latn"; +static const char gSymbols[] = "symbols"; +static const char gNumberElementsLatnSymbols[] = "NumberElements/latn/symbols"; static const UChar INTL_CURRENCY_SYMBOL_STR[] = {0xa4, 0xa4, 0}; +// List of field names to be loaded from the data files. +// These are parallel with the enum ENumberFormatSymbol in unicode/dcfmtsym.h. +static const char *gNumberElementKeys[DecimalFormatSymbols::kFormatSymbolCount] = { + "decimal", + "group", + "list", + "percentSign", + NULL, /* Native zero digit is deprecated from CLDR - get it from the numbering system */ + NULL, /* Pattern digit character is deprecated from CLDR - use # by default always */ + "minusSign", + "plusSign", + NULL, /* currency symbol - Wait until we know the currency before loading from CLDR */ + NULL, /* intl currency symbol - Wait until we know the currency before loading from CLDR */ + "currencyDecimal", + "exponential", + "perMille", + NULL, /* Escape padding character - not in CLDR */ + "infinity", + "nan", + NULL, /* Significant digit symbol - not in CLDR */ + "currencyGroup", + NULL, /* one digit - get it from the numbering system */ + NULL, /* two digit - get it from the numbering system */ + NULL, /* three digit - get it from the numbering system */ + NULL, /* four digit - get it from the numbering system */ + NULL, /* five digit - get it from the numbering system */ + NULL, /* six digit - get it from the numbering system */ + NULL, /* seven digit - get it from the numbering system */ + NULL, /* eight digit - get it from the numbering system */ + NULL, /* nine digit - get it from the numbering system */ + "superscriptingExponent", /* Multiplication (x) symbol for exponents */ +}; + // ------------------------------------- // Initializes this with the decimal format symbols in the default locale. @@ -126,8 +164,8 @@ DecimalFormatSymbols::operator=(const DecimalFormatSymbols& rhs) locale = rhs.locale; uprv_strcpy(validLocale, rhs.validLocale); uprv_strcpy(actualLocale, rhs.actualLocale); - fIsCustomCurrencySymbol = rhs.fIsCustomCurrencySymbol; - fIsCustomIntlCurrencySymbol = rhs.fIsCustomIntlCurrencySymbol; + fIsCustomCurrencySymbol = rhs.fIsCustomCurrencySymbol; + fIsCustomIntlCurrencySymbol = rhs.fIsCustomIntlCurrencySymbol; } return *this; } @@ -140,12 +178,12 @@ DecimalFormatSymbols::operator==(const DecimalFormatSymbols& that) const if (this == &that) { return TRUE; } - if (fIsCustomCurrencySymbol != that.fIsCustomCurrencySymbol) { - return FALSE; - } - if (fIsCustomIntlCurrencySymbol != that.fIsCustomIntlCurrencySymbol) { - return FALSE; - } + if (fIsCustomCurrencySymbol != that.fIsCustomCurrencySymbol) { + return FALSE; + } + if (fIsCustomIntlCurrencySymbol != that.fIsCustomIntlCurrencySymbol) { + return FALSE; + } for(int32_t i = 0; i < (int32_t)kFormatSymbolCount; ++i) { if(fSymbols[(ENumberFormatSymbol)i] != that.fSymbols[(ENumberFormatSymbol)i]) { return FALSE; @@ -166,63 +204,149 @@ DecimalFormatSymbols::operator==(const DecimalFormatSymbols& that) const // ------------------------------------- -void -DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, UBool useLastResortData) -{ - static const char *gNumberElementKeys[kFormatSymbolCount] = { - "decimal", - "group", - "list", - "percentSign", - NULL, /* Native zero digit is deprecated from CLDR - get it from the numbering system */ - NULL, /* Pattern digit character is deprecated from CLDR - use # by default always */ - "minusSign", - "plusSign", - NULL, /* currency symbol - We don't really try to load this directly from CLDR until we know the currency */ - NULL, /* intl currency symbol - We don't really try to load this directly from CLDR until we know the currency */ - "currencyDecimal", - "exponential", - "perMille", - NULL, /* Escape padding character - not in CLDR */ - "infinity", - "nan", - NULL, /* Significant digit symbol - not in CLDR */ - "currencyGroup", - NULL, /* one digit - get it from the numbering system */ - NULL, /* two digit - get it from the numbering system */ - NULL, /* three digit - get it from the numbering system */ - NULL, /* four digit - get it from the numbering system */ - NULL, /* five digit - get it from the numbering system */ - NULL, /* six digit - get it from the numbering system */ - NULL, /* seven digit - get it from the numbering system */ - NULL, /* eight digit - get it from the numbering system */ - NULL, /* nine digit - get it from the numbering system */ - "superscriptingExponent", /* Multiplication (x) symbol for exponents */ - }; - - static const char *gLatn = "latn"; - static const char *gSymbols = "symbols"; - const char *nsName; - const UChar *sym = NULL; - int32_t len = 0; +namespace { + +/** + * Sink for enumerating all of the decimal format symbols (more specifically, anything + * under the "NumberElements.symbols" tree). + * + * More specific bundles (en_GB) are enumerated before their parents (en_001, en, root): + * Only store a value if it is still missing, that is, it has not been overridden. + */ +struct DecFmtSymDataSink : public ResourceSink { + + // Destination for data, modified via setters. + DecimalFormatSymbols& dfs; + // Boolean array of whether or not we have seen a particular symbol yet. + // Can't simpy check fSymbols because it is pre-populated with defaults. + UBool seenSymbol[DecimalFormatSymbols::kFormatSymbolCount]; + + // Constructor/Destructor + DecFmtSymDataSink(DecimalFormatSymbols& _dfs) : dfs(_dfs) { + uprv_memset(seenSymbol, FALSE, sizeof(seenSymbol)); + } + virtual ~DecFmtSymDataSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable symbolsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; symbolsTable.getKeyAndValue(j, key, value); ++j) { + for (int32_t i=0; i ns(NumberingSystem::createInstance(loc, status)); + const char *nsName; if (U_SUCCESS(status) && ns->getRadix() == 10 && !ns->isAlgorithmic()) { nsName = ns->getName(); UnicodeString digitString(ns->getDescription()); @@ -248,61 +372,61 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, UBool us nsName = gLatn; } - UBool isLatn = !uprv_strcmp(nsName,gLatn); + // Open resource bundles + const char* locStr = loc.getName(); + LocalUResourceBundlePointer resource(ures_open(NULL, locStr, &status)); + LocalUResourceBundlePointer numberElementsRes( + ures_getByKeyWithFallback(resource.getAlias(), gNumberElements, NULL, &status)); - UErrorCode nlStatus = U_ZERO_ERROR; - LocalUResourceBundlePointer nonLatnSymbols; - if ( !isLatn ) { - nonLatnSymbols.adoptInstead( - ures_getByKeyWithFallback(numberElementsRes.getAlias(), nsName, NULL, &nlStatus)); - ures_getByKeyWithFallback(nonLatnSymbols.getAlias(), gSymbols, nonLatnSymbols.getAlias(), &nlStatus); + if (U_FAILURE(status)) { + if ( useLastResortData ) { + status = U_USING_DEFAULT_WARNING; + initialize(); + } + return; } - LocalUResourceBundlePointer latnSymbols( - ures_getByKeyWithFallback(numberElementsRes.getAlias(), gLatn, NULL, &status)); - ures_getByKeyWithFallback(latnSymbols.getAlias(), gSymbols, latnSymbols.getAlias(), &status); - - UBool kMonetaryDecimalSet = FALSE; - UBool kMonetaryGroupingSet = FALSE; - for(int32_t i = 0; istatus=0; return context; } /* decContextZeroStatus */ + diff --git a/deps/icu-small/source/i18n/decContext.h b/deps/icu-small/source/i18n/decContext.h index cb7f2c2dbf2eee..6a8768e3903d7a 100644 --- a/deps/icu-small/source/i18n/decContext.h +++ b/deps/icu-small/source/i18n/decContext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ------------------------------------------------------------------ */ /* Decimal Context module header */ /* ------------------------------------------------------------------ */ @@ -18,7 +20,7 @@ /* ------------------------------------------------------------------ */ /* Modified version, for use from within ICU. - * Renamed public functions, to avoid an unwanted export of the + * Renamed public functions, to avoid an unwanted export of the * standard names from the ICU library. * * Use ICU's uprv_malloc() and uprv_free() diff --git a/deps/icu-small/source/i18n/decNumber.c b/deps/icu-small/source/i18n/decNumber.c index b1284572533262..2604c37ebe88db 100644 --- a/deps/icu-small/source/i18n/decNumber.c +++ b/deps/icu-small/source/i18n/decNumber.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ------------------------------------------------------------------ */ /* Decimal Number arithmetic module */ /* ------------------------------------------------------------------ */ @@ -18,7 +20,7 @@ /* ------------------------------------------------------------------ */ /* Modified version, for use from within ICU. - * Renamed public functions, to avoid an unwanted export of the + * Renamed public functions, to avoid an unwanted export of the * standard names from the ICU library. * * Use ICU's uprv_malloc() and uprv_free() diff --git a/deps/icu-small/source/i18n/decNumber.h b/deps/icu-small/source/i18n/decNumber.h index cc9c8c365278d0..b83cdb945b3cef 100644 --- a/deps/icu-small/source/i18n/decNumber.h +++ b/deps/icu-small/source/i18n/decNumber.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ------------------------------------------------------------------ */ /* Decimal Number arithmetic module header */ /* ------------------------------------------------------------------ */ @@ -18,7 +20,7 @@ /* ------------------------------------------------------------------ */ /* Modified version, for use from within ICU. - * Renamed public functions, to avoid an unwanted export of the + * Renamed public functions, to avoid an unwanted export of the * standard names from the ICU library. * * Use ICU's uprv_malloc() and uprv_free() diff --git a/deps/icu-small/source/i18n/decNumberLocal.h b/deps/icu-small/source/i18n/decNumberLocal.h index c6e542d0c26b3a..294d5f519da6df 100644 --- a/deps/icu-small/source/i18n/decNumberLocal.h +++ b/deps/icu-small/source/i18n/decNumberLocal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ------------------------------------------------------------------ */ /* decNumber package local type, tuning, and macro definitions */ /* ------------------------------------------------------------------ */ diff --git a/deps/icu-small/source/i18n/decfmtst.cpp b/deps/icu-small/source/i18n/decfmtst.cpp index 743804ceeee4b7..78c01f2a2a0b4d 100644 --- a/deps/icu-small/source/i18n/decfmtst.cpp +++ b/deps/icu-small/source/i18n/decfmtst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and @@ -111,7 +113,7 @@ DecimalFormatStaticSets::DecimalFormatStaticSets(UErrorCode &status) fCommaEquivalents = new UnicodeSet(UnicodeString(TRUE, gCommaEquivalentsPattern, -1), status); fOtherGroupingSeparators = new UnicodeSet(UnicodeString(TRUE, gOtherGroupingSeparatorsPattern, -1), status); fDashEquivalents = new UnicodeSet(UnicodeString(TRUE, gDashEquivalentsPattern, -1), status); - + fStrictDotEquivalents = new UnicodeSet(UnicodeString(TRUE, gStrictDotEquivalentsPattern, -1), status); fStrictCommaEquivalents = new UnicodeSet(UnicodeString(TRUE, gStrictCommaEquivalentsPattern, -1), status); fStrictOtherGroupingSeparators = new UnicodeSet(UnicodeString(TRUE, gStrictOtherGroupingSeparatorsPattern, -1), status); diff --git a/deps/icu-small/source/i18n/decfmtst.h b/deps/icu-small/source/i18n/decfmtst.h index 3c774a3249b528..719f0aa9761319 100644 --- a/deps/icu-small/source/i18n/decfmtst.h +++ b/deps/icu-small/source/i18n/decfmtst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/decimalformatpattern.cpp b/deps/icu-small/source/i18n/decimalformatpattern.cpp index 9d170ccb219853..af1ccd29bbc072 100644 --- a/deps/icu-small/source/i18n/decimalformatpattern.cpp +++ b/deps/icu-small/source/i18n/decimalformatpattern.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -13,7 +15,7 @@ #include "unicode/dcfmtsym.h" #include "unicode/format.h" #include "unicode/utf16.h" -#include "decimalformatpatternimpl.h" +#include "decimalformatpatternimpl.h" #ifdef FMT_DEBUG @@ -637,7 +639,7 @@ DecimalFormatPatternParser::applyPatternWithoutExpandAffix( .append(out.fPosPrefixPattern); } // TODO: Deprecate/Remove out.fNegSuffixPattern and 3 other fields. - AffixPattern::parseAffixString( + AffixPattern::parseAffixString( out.fNegSuffixPattern, out.fNegSuffixAffix, status); AffixPattern::parseAffixString( out.fPosSuffixPattern, out.fPosSuffixAffix, status); diff --git a/deps/icu-small/source/i18n/decimalformatpattern.h b/deps/icu-small/source/i18n/decimalformatpattern.h index 9726b370500edc..c8998f95f8f67c 100644 --- a/deps/icu-small/source/i18n/decimalformatpattern.h +++ b/deps/icu-small/source/i18n/decimalformatpattern.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -28,7 +30,7 @@ enum CurrencySignCount { class DecimalFormatSymbols; -struct DecimalFormatPattern : UMemory { +struct DecimalFormatPattern : public UMemory { enum EPadPosition { kPadBeforePrefix, kPadAfterPrefix, @@ -64,14 +66,14 @@ struct DecimalFormatPattern : UMemory { UnicodeString fNegSuffixPattern; UnicodeString fPosPrefixPattern; UnicodeString fPosSuffixPattern; - AffixPattern fNegPrefixAffix; - AffixPattern fNegSuffixAffix; - AffixPattern fPosPrefixAffix; - AffixPattern fPosSuffixAffix; + AffixPattern fNegPrefixAffix; + AffixPattern fNegSuffixAffix; + AffixPattern fPosPrefixAffix; + AffixPattern fPosSuffixAffix; EPadPosition fPadPosition; }; -class DecimalFormatPatternParser : UMemory { +class DecimalFormatPatternParser : public UMemory { public: DecimalFormatPatternParser(); void useSymbols(const DecimalFormatSymbols& symbols); diff --git a/deps/icu-small/source/i18n/decimalformatpatternimpl.h b/deps/icu-small/source/i18n/decimalformatpatternimpl.h index 4b563042d19b59..67bc96db6181a7 100644 --- a/deps/icu-small/source/i18n/decimalformatpatternimpl.h +++ b/deps/icu-small/source/i18n/decimalformatpatternimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/decimfmt.cpp b/deps/icu-small/source/i18n/decimfmt.cpp index 0b67e63be9df7b..f03143ade42354 100644 --- a/deps/icu-small/source/i18n/decimfmt.cpp +++ b/deps/icu-small/source/i18n/decimfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -122,8 +124,8 @@ struct AffixPatternsForCurrency : public UMemory { void dump() const { debugout( UnicodeString("AffixPatternsForCurrency( -=\"") + negPrefixPatternForCurrency + (UnicodeString)"\"/\"" + - negSuffixPatternForCurrency + (UnicodeString)"\" +=\"" + - posPrefixPatternForCurrency + (UnicodeString)"\"/\"" + + negSuffixPatternForCurrency + (UnicodeString)"\" +=\"" + + posPrefixPatternForCurrency + (UnicodeString)"\"/\"" + posSuffixPatternForCurrency + (UnicodeString)"\" )"); } #endif @@ -158,8 +160,8 @@ struct AffixesForCurrency : public UMemory { void dump() const { debugout( UnicodeString("AffixesForCurrency( -=\"") + negPrefixForCurrency + (UnicodeString)"\"/\"" + - negSuffixForCurrency + (UnicodeString)"\" +=\"" + - posPrefixForCurrency + (UnicodeString)"\"/\"" + + negSuffixForCurrency + (UnicodeString)"\" +=\"" + + posPrefixForCurrency + (UnicodeString)"\"/\"" + posSuffixForCurrency + (UnicodeString)"\" )"); } #endif @@ -445,18 +447,30 @@ DecimalFormat::construct(UErrorCode& status, if (patternUsed->indexOf(kCurrencySign) != -1) { // initialize for currency, not only for plural format, // but also for mix parsing - if (fCurrencyPluralInfo == NULL) { - fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status); - if (U_FAILURE(status)) { - return; - } - } - // need it for mix parsing + handleCurrencySignInPattern(status); + } +} + +void +DecimalFormat::handleCurrencySignInPattern(UErrorCode& status) { + // initialize for currency, not only for plural format, + // but also for mix parsing + if (U_FAILURE(status)) { + return; + } + if (fCurrencyPluralInfo == NULL) { + fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status); + if (U_FAILURE(status)) { + return; + } + } + // need it for mix parsing + if (fAffixPatternsForCurrency == NULL) { setupCurrencyAffixPatterns(status); } } -static void +static void applyPatternWithNoSideEffects( const UnicodeString& pattern, UParseError& parseError, @@ -466,19 +480,19 @@ applyPatternWithNoSideEffects( UnicodeString &posSuffix, UErrorCode& status) { if (U_FAILURE(status)) - { + { return; - } + } DecimalFormatPatternParser patternParser; - DecimalFormatPattern out; + DecimalFormatPattern out; patternParser.applyPatternWithoutExpandAffix( pattern, - out, + out, parseError, status); if (U_FAILURE(status)) { return; - } + } negPrefix = out.fNegPrefixPattern; negSuffix = out.fNegSuffixPattern; posPrefix = out.fPosPrefixPattern; @@ -505,8 +519,8 @@ DecimalFormat::setupCurrencyAffixPatterns(UErrorCode& status) { // Here, chose onlyApplyPatternWithoutExpandAffix without // expanding the affix patterns into affixes. UnicodeString currencyPattern; - UErrorCode error = U_ZERO_ERROR; - + UErrorCode error = U_ZERO_ERROR; + UResourceBundle *resource = ures_open(NULL, fImpl->fSymbols->getLocale().getName(), &error); UResourceBundle *numElements = ures_getByKeyWithFallback(resource, fgNumberElements, NULL, &error); resource = ures_getByKeyWithFallback(numElements, ns->getName(), resource, &error); @@ -704,7 +718,7 @@ DecimalFormat::initVisibleDigitsWithExponent( } Formattable::Type type = number.getType(); - if (type == Formattable::kDouble || type == Formattable::kLong) { + if (type == Formattable::kDouble || type == Formattable::kLong) { return fImpl->initVisibleDigitsWithExponent( number.getDouble(status), digits, status); } @@ -828,7 +842,7 @@ DecimalFormat::format( double number, UnicodeString& -DecimalFormat::format(const StringPiece &number, +DecimalFormat::format(StringPiece number, UnicodeString &toAppendTo, FieldPositionIterator *posIter, UErrorCode &status) const @@ -871,7 +885,7 @@ DecimalFormat::format(const VisibleDigitsWithExponent &number, return fImpl->format(number, appendTo, pos, status); } -DigitList& +DigitList& DecimalFormat::_round(const DigitList& number, DigitList& adjustedNum, UBool& isNegative, UErrorCode& status) const { adjustedNum = number; fImpl->round(adjustedNum, status); @@ -1276,9 +1290,9 @@ UBool DecimalFormat::subparse(const UnicodeString& text, #endif if(ch==0x002D) { // '-' j=l+1;//=break - negative number. - + /* - parsedNum.append('-',err); + parsedNum.append('-',err); j+=U16_LENGTH(ch); if(jgetOldFormatWidth(); // Match padding before prefix @@ -1467,7 +1481,7 @@ UBool DecimalFormat::subparse(const UnicodeString& text, * from 0 to 9 in 'digit'. First try using the locale digit, * which may or MAY NOT be a standard Unicode digit range. If * this fails, try using the standard Unicode digit ranges by - * calling Character.digit(). If this also fails, digit will + * calling Character.digit(). If this also fails, digit will * have a value outside the range 0..9. */ digit = ch - zero; @@ -1475,7 +1489,7 @@ UBool DecimalFormat::subparse(const UnicodeString& text, { digit = u_charDigitValue(ch); } - + // As a last resort, look through the localized digits if the zero digit // is not a "standard" Unicode digit. if ( (digit < 0 || digit > 9) && u_charDigitValue(zero) != 0) { @@ -1503,31 +1517,31 @@ UBool DecimalFormat::subparse(const UnicodeString& text, strictFail = TRUE; break; } - + lastGroup = backup; } - + // Cancel out backup setting (see grouping handler below) backup = -1; sawDigit = TRUE; - + // Note: this will append leading zeros parsedNum.append((char)(digit + '0'), err); // count any digit that's not a leading zero if (digit > 0 || digitCount > 0 || sawDecimal) { digitCount += 1; - + // count any integer digit that's not a leading zero if (! sawDecimal) { integerDigitCount += 1; } } - + position += U16_LENGTH(ch); } - else if (groupingStringLength > 0 && - matchGrouping(groupingChar, sawGrouping, sawGroupingChar, groupingSet, + else if (groupingStringLength > 0 && + matchGrouping(groupingChar, sawGrouping, sawGroupingChar, groupingSet, decimalChar, decimalSet, ch) && groupingUsed) { @@ -1582,7 +1596,7 @@ UBool DecimalFormat::subparse(const UnicodeString& text, const UnicodeString *tmp; tmp = &fImpl->getConstSymbol(DecimalFormatSymbols::kExponentialSymbol); // TODO: CASE - if (!text.caseCompare(position, tmp->length(), *tmp, U_FOLD_CASE_DEFAULT)) // error code is set below if !sawDigit + if (!text.caseCompare(position, tmp->length(), *tmp, U_FOLD_CASE_DEFAULT)) // error code is set below if !sawDigit { // Parse sign, if present int32_t pos = position + tmp->length(); @@ -1641,9 +1655,9 @@ UBool DecimalFormat::subparse(const UnicodeString& text, } // if we didn't see a decimal and it is required, check to see if the pattern had one - if(!sawDecimal && isDecimalPatternMatchRequired()) + if(!sawDecimal && isDecimalPatternMatchRequired()) { - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0) + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1) { parsePosition.setIndex(oldStart); parsePosition.setErrorIndex(position); @@ -1767,9 +1781,9 @@ printf("PP -> %d, SLOW = [%s]! pp=%d, os=%d, err=%s\n", position, parsedNum.d } // check if we missed a required decimal point - if(fastParseOk && isDecimalPatternMatchRequired()) + if(fastParseOk && isDecimalPatternMatchRequired()) { - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0) + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1) { parsePosition.setIndex(oldStart); parsePosition.setErrorIndex(position); @@ -2431,7 +2445,7 @@ DecimalFormat::setNegativeSuffix(const UnicodeString& newValue) // is the most convenient for muliplying or dividing the numbers to be formatted. // A NULL multiplier implies one, and the scaling operations are skipped. -int32_t +int32_t DecimalFormat::getMultiplier() const { return fImpl->getMultiplier(); @@ -2774,7 +2788,7 @@ DecimalFormat::setDecimalSeparatorAlwaysShown(UBool newValue) //------------------------------------------------------------------------------ // Checks if decimal point pattern match is required -UBool +UBool DecimalFormat::isDecimalPatternMatchRequired(void) const { return fBoolFlags.contains(UNUM_PARSE_DECIMAL_MARK_REQUIRED); @@ -2782,8 +2796,8 @@ DecimalFormat::isDecimalPatternMatchRequired(void) const //------------------------------------------------------------------------------ // Checks if decimal point pattern match is required - -void + +void DecimalFormat::setDecimalPatternMatchRequired(UBool newValue) { fBoolFlags.set(UNUM_PARSE_DECIMAL_MARK_REQUIRED, newValue); @@ -2815,6 +2829,9 @@ DecimalFormat::toLocalizedPattern(UnicodeString& result) const void DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyPattern(pattern, status); } @@ -2825,6 +2842,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyPattern(pattern, parseError, status); } //------------------------------------------------------------------------------ @@ -2832,6 +2852,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern, void DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyLocalizedPattern(pattern, status); } @@ -2842,6 +2865,9 @@ DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyLocalizedPattern(pattern, parseError, status); } @@ -2849,7 +2875,7 @@ DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, /** * Sets the maximum number of digits allowed in the integer portion of a - * number. + * number. * @see NumberFormat#setMaximumIntegerDigits */ void DecimalFormat::setMaximumIntegerDigits(int32_t newValue) { @@ -2973,7 +2999,7 @@ DecimalFormat::initHashForAffixPattern(UErrorCode& status) { return NULL; } if ( U_FAILURE(status) ) { - delete hTable; + delete hTable; return NULL; } hTable->setValueComparator(decimfmtAffixPatternValueComparator); @@ -3056,41 +3082,41 @@ DecimalFormat& DecimalFormat::setAttribute( UNumberFormatAttribute attr, case UNUM_PARSE_INT_ONLY: setParseIntegerOnly(newValue!=0); break; - + case UNUM_GROUPING_USED: setGroupingUsed(newValue!=0); break; - + case UNUM_DECIMAL_ALWAYS_SHOWN: setDecimalSeparatorAlwaysShown(newValue!=0); break; - + case UNUM_MAX_INTEGER_DIGITS: setMaximumIntegerDigits(newValue); break; - + case UNUM_MIN_INTEGER_DIGITS: setMinimumIntegerDigits(newValue); break; - + case UNUM_INTEGER_DIGITS: setMinimumIntegerDigits(newValue); setMaximumIntegerDigits(newValue); break; - + case UNUM_MAX_FRACTION_DIGITS: setMaximumFractionDigits(newValue); break; - + case UNUM_MIN_FRACTION_DIGITS: setMinimumFractionDigits(newValue); break; - + case UNUM_FRACTION_DIGITS: setMinimumFractionDigits(newValue); setMaximumFractionDigits(newValue); break; - + case UNUM_SIGNIFICANT_DIGITS_USED: setSignificantDigitsUsed(newValue!=0); break; @@ -3098,32 +3124,32 @@ DecimalFormat& DecimalFormat::setAttribute( UNumberFormatAttribute attr, case UNUM_MAX_SIGNIFICANT_DIGITS: setMaximumSignificantDigits(newValue); break; - + case UNUM_MIN_SIGNIFICANT_DIGITS: setMinimumSignificantDigits(newValue); break; - + case UNUM_MULTIPLIER: - setMultiplier(newValue); + setMultiplier(newValue); break; - + case UNUM_GROUPING_SIZE: - setGroupingSize(newValue); + setGroupingSize(newValue); break; - + case UNUM_ROUNDING_MODE: setRoundingMode((DecimalFormat::ERoundingMode)newValue); break; - + case UNUM_FORMAT_WIDTH: setFormatWidth(newValue); break; - + case UNUM_PADDING_POSITION: /** The position at which padding will take place. */ setPadPosition((DecimalFormat::EPadPosition)newValue); break; - + case UNUM_SECONDARY_GROUPING_SIZE: setSecondaryGroupingSize(newValue); break; @@ -3167,69 +3193,69 @@ DecimalFormat& DecimalFormat::setAttribute( UNumberFormatAttribute attr, return *this; } -int32_t DecimalFormat::getAttribute( UNumberFormatAttribute attr, +int32_t DecimalFormat::getAttribute( UNumberFormatAttribute attr, UErrorCode &status ) const { if(U_FAILURE(status)) return -1; switch(attr) { - case UNUM_LENIENT_PARSE: + case UNUM_LENIENT_PARSE: return isLenient(); case UNUM_PARSE_INT_ONLY: return isParseIntegerOnly(); - + case UNUM_GROUPING_USED: return isGroupingUsed(); - + case UNUM_DECIMAL_ALWAYS_SHOWN: - return isDecimalSeparatorAlwaysShown(); - + return isDecimalSeparatorAlwaysShown(); + case UNUM_MAX_INTEGER_DIGITS: return getMaximumIntegerDigits(); - + case UNUM_MIN_INTEGER_DIGITS: return getMinimumIntegerDigits(); - + case UNUM_INTEGER_DIGITS: // TBD: what should this return? return getMinimumIntegerDigits(); - + case UNUM_MAX_FRACTION_DIGITS: return getMaximumFractionDigits(); - + case UNUM_MIN_FRACTION_DIGITS: return getMinimumFractionDigits(); - + case UNUM_FRACTION_DIGITS: // TBD: what should this return? return getMinimumFractionDigits(); - + case UNUM_SIGNIFICANT_DIGITS_USED: return areSignificantDigitsUsed(); - + case UNUM_MAX_SIGNIFICANT_DIGITS: return getMaximumSignificantDigits(); - + case UNUM_MIN_SIGNIFICANT_DIGITS: return getMinimumSignificantDigits(); - + case UNUM_MULTIPLIER: - return getMultiplier(); - + return getMultiplier(); + case UNUM_GROUPING_SIZE: - return getGroupingSize(); - + return getGroupingSize(); + case UNUM_ROUNDING_MODE: return getRoundingMode(); - + case UNUM_FORMAT_WIDTH: return getFormatWidth(); - + case UNUM_PADDING_POSITION: return getPadPosition(); - + case UNUM_SECONDARY_GROUPING_SIZE: return getSecondaryGroupingSize(); - + /* These are stored in fBoolFlags */ case UNUM_PARSE_NO_EXPONENT: case UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS: diff --git a/deps/icu-small/source/i18n/decimfmtimpl.cpp b/deps/icu-small/source/i18n/decimfmtimpl.cpp index d0c96493a902be..1bf742d148c605 100644 --- a/deps/icu-small/source/i18n/decimfmtimpl.cpp +++ b/deps/icu-small/source/i18n/decimfmtimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -219,31 +221,31 @@ DecimalFormatImpl::prepareValueFormatter(ValueFormatter &vf) const { int32_t DecimalFormatImpl::getPatternScale() const { - UBool usesPercent = fPositivePrefixPattern.usesPercent() || - fPositiveSuffixPattern.usesPercent() || - fNegativePrefixPattern.usesPercent() || + UBool usesPercent = fPositivePrefixPattern.usesPercent() || + fPositiveSuffixPattern.usesPercent() || + fNegativePrefixPattern.usesPercent() || fNegativeSuffixPattern.usesPercent(); if (usesPercent) { return 2; } - UBool usesPermill = fPositivePrefixPattern.usesPermill() || - fPositiveSuffixPattern.usesPermill() || - fNegativePrefixPattern.usesPermill() || + UBool usesPermill = fPositivePrefixPattern.usesPermill() || + fPositiveSuffixPattern.usesPermill() || + fNegativePrefixPattern.usesPermill() || fNegativeSuffixPattern.usesPermill(); if (usesPermill) { return 3; } return 0; } - + void DecimalFormatImpl::setMultiplierScale(int32_t scale) { if (scale == 0) { // Needed to preserve equality. fMultiplier == 0 means // multiplier is 1. - fMultiplier.set(0); + fMultiplier.set((int32_t)0); } else { - fMultiplier.set(1); + fMultiplier.set((int32_t)1); fMultiplier.shiftDecimalRight(scale); } } @@ -425,7 +427,7 @@ DecimalFormatImpl::format( UnicodeString & DecimalFormatImpl::format( - const StringPiece &number, + StringPiece number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const { @@ -628,7 +630,7 @@ DecimalFormatImpl::setMinimumSignificantDigits(int32_t newValue) { fUseSigDigits = TRUE; // ticket 9936 updatePrecision(); } - + void DecimalFormatImpl::setMaximumSignificantDigits(int32_t newValue) { fMaxSigDigits = newValue; @@ -649,13 +651,13 @@ DecimalFormatImpl::setScientificNotation(UBool newValue) { fUseScientific = newValue; updatePrecision(); } - + void DecimalFormatImpl::setSignificantDigitsUsed(UBool newValue) { fUseSigDigits = newValue; updatePrecision(); } - + void DecimalFormatImpl::setGroupingSize(int32_t newValue) { fGrouping.fGrouping = newValue; @@ -706,7 +708,7 @@ DecimalFormatImpl::getMultiplier() const { void DecimalFormatImpl::setMultiplier(int32_t m) { if (m == 0 || m == 1) { - fMultiplier.set(0); + fMultiplier.set((int32_t)0); } else { fMultiplier.set(m); } @@ -870,16 +872,16 @@ DecimalFormatImpl::applyPattern( switch (out.fPadPosition) { case DecimalFormatPattern::kPadBeforePrefix: fAffixes.fPadPosition = DigitAffixesAndPadding::kPadBeforePrefix; - break; + break; case DecimalFormatPattern::kPadAfterPrefix: fAffixes.fPadPosition = DigitAffixesAndPadding::kPadAfterPrefix; - break; + break; case DecimalFormatPattern::kPadBeforeSuffix: fAffixes.fPadPosition = DigitAffixesAndPadding::kPadBeforeSuffix; - break; + break; case DecimalFormatPattern::kPadAfterSuffix: fAffixes.fPadPosition = DigitAffixesAndPadding::kPadAfterSuffix; - break; + break; default: break; } @@ -904,7 +906,7 @@ static void updatePrecisionForScientificMinMax( resultMin.setFracDigitCount(0); resultSignificant.clear(); resultMax.clear(); - + int32_t maxIntDigitCount = max.getIntDigitCount(); int32_t minIntDigitCount = min.getIntDigitCount(); int32_t maxFracDigitCount = max.getFracDigitCount(); @@ -1173,7 +1175,7 @@ DecimalFormatImpl::updateFormattingCurrencyAffixInfo( fEffPrecision.fMantissa.fRoundingIncrement = precision.fRoundingIncrement; } - + } } @@ -1415,9 +1417,9 @@ DecimalFormatImpl::toNumberPattern( maxInterval.setIntDigitCount(minInterval.getIntDigitCount() + 1); } if (!fEffPrecision.fMantissa.fRoundingIncrement.isZero()) { - roundingIncrementLowerExp = + roundingIncrementLowerExp = fEffPrecision.fMantissa.fRoundingIncrement.getLowerExponent(); - roundingIncrementUpperExp = + roundingIncrementUpperExp = fEffPrecision.fMantissa.fRoundingIncrement.getUpperExponent(); // We have to include the rounding increment in what we display maxInterval.expandToContainDigit(roundingIncrementLowerExp); @@ -1438,7 +1440,7 @@ DecimalFormatImpl::toNumberPattern( if (hasPadding) { // For non scientific notation, // minimumLengthForMantissa = minimumLength - int32_t minimumLengthForMantissa = + int32_t minimumLengthForMantissa = minimumLength - computeExponentPatternLength(); int32_t mininumLengthForMantissaIntPart = minimumLengthForMantissa @@ -1481,7 +1483,7 @@ DecimalFormatImpl::toNumberPattern( } } else { if (i < roundingIncrementUpperExp && i >= roundingIncrementLowerExp) { - result.append(fEffPrecision.fMantissa.fRoundingIncrement.getDigitByExponent(i) + kPatternZeroDigit); + result.append((UChar)(fEffPrecision.fMantissa.fRoundingIncrement.getDigitByExponent(i) + kPatternZeroDigit)); } else if (minInterval.contains(i)) { result.append(kPatternZeroDigit); } else { @@ -1572,7 +1574,7 @@ DecimalFormatImpl::getOldFormatWidth() const { const UnicodeString & DecimalFormatImpl::getConstSymbol( DecimalFormatSymbols::ENumberFormatSymbol symbol) const { - return fSymbols->getConstSymbol(symbol); + return fSymbols->getConstSymbol(symbol); } UBool @@ -1591,3 +1593,4 @@ DecimalFormatImpl::isParseFastpath() const { U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/i18n/decimfmtimpl.h b/deps/icu-small/source/i18n/decimfmtimpl.h index d55a4eca2f2f33..82f154edbd3557 100644 --- a/deps/icu-small/source/i18n/decimfmtimpl.h +++ b/deps/icu-small/source/i18n/decimfmtimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2015, International Business Machines @@ -106,7 +108,7 @@ class FixedDecimal; * The first two DAGs are simple in that setting any independent attribute * in the DAG recalculates all the dependent attributes in that DAG. * The updateGrouping() and updatePrecision() perform the respective - * recalculations. + * recalculations. * * Because some of the derived formatting attributes are expensive to * calculate, the formatting attributes DAG is more complex. The @@ -217,7 +219,7 @@ UnicodeString &format( FieldPositionIterator *posIter, UErrorCode &status) const; UnicodeString &format( - const StringPiece &number, + StringPiece number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const; @@ -256,9 +258,9 @@ void setMinMaxSignificantDigits(int32_t min, int32_t max); void setScientificNotation(UBool newValue); void setSignificantDigitsUsed(UBool newValue); -int32_t getMinimumSignificantDigits() const { +int32_t getMinimumSignificantDigits() const { return fMinSigDigits; } -int32_t getMaximumSignificantDigits() const { +int32_t getMaximumSignificantDigits() const { return fMaxSigDigits; } UBool isScientificNotation() const { return fUseScientific; } UBool areSignificantDigitsUsed() const { return fUseSigDigits; } @@ -362,7 +364,7 @@ DecimalFormat::ERoundingMode fRoundingMode; // fEffPrecision.fMantissa.fMin, // fEffPrecision.fMantissa.fMax, // fEffPrecision.fMantissa.fSignificant fields -// We have this two phase update because of backward compatibility. +// We have this two phase update because of backward compatibility. // DecimalFormat has to remember all settings even if those settings are // invalid or disabled. int32_t fMinSigDigits; diff --git a/deps/icu-small/source/i18n/digitaffix.cpp b/deps/icu-small/source/i18n/digitaffix.cpp index d73d40121a843f..bb96fc77c30e19 100644 --- a/deps/icu-small/source/i18n/digitaffix.cpp +++ b/deps/icu-small/source/i18n/digitaffix.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -20,7 +22,7 @@ DigitAffix::DigitAffix() : fAffix(), fAnnotations() { } DigitAffix::DigitAffix( - const UChar *value, int32_t charCount, int32_t fieldId) + const UChar *value, int32_t charCount, int32_t fieldId) : fAffix(value, charCount), fAnnotations(charCount, (UChar) fieldId, charCount) { } diff --git a/deps/icu-small/source/i18n/digitaffix.h b/deps/icu-small/source/i18n/digitaffix.h index d5b545a3d7509f..a1a100654f4e84 100644 --- a/deps/icu-small/source/i18n/digitaffix.h +++ b/deps/icu-small/source/i18n/digitaffix.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitaffixesandpadding.cpp b/deps/icu-small/source/i18n/digitaffixesandpadding.cpp index d941a573de8ff4..716ab4a32ebfb3 100644 --- a/deps/icu-small/source/i18n/digitaffixesandpadding.cpp +++ b/deps/icu-small/source/i18n/digitaffixesandpadding.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitaffixesandpadding.h b/deps/icu-small/source/i18n/digitaffixesandpadding.h index 3586371094b97a..65a23133dd14ae 100644 --- a/deps/icu-small/source/i18n/digitaffixesandpadding.h +++ b/deps/icu-small/source/i18n/digitaffixesandpadding.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -122,7 +124,7 @@ UBool needsPluralRules() const; * @param formatter handles the details of formatting the actual value. * @param handler records field positions * @param optPluralRules the plural rules, but may be NULL if - * needsPluralRules returns FALSE. + * needsPluralRules returns FALSE. * @appendTo formatted string appended here. * @status any error returned here. */ @@ -154,7 +156,7 @@ UnicodeString &format( * @param formatter handles the details of formatting the actual value. * @param handler records field positions * @param optPluralRules the plural rules, but may be NULL if - * needsPluralRules returns FALSE. + * needsPluralRules returns FALSE. * @appendTo formatted string appended here. * @status any error returned here. */ diff --git a/deps/icu-small/source/i18n/digitformatter.cpp b/deps/icu-small/source/i18n/digitformatter.cpp index 837dcb4d9edb7b..62569d571c271d 100644 --- a/deps/icu-small/source/i18n/digitformatter.cpp +++ b/deps/icu-small/source/i18n/digitformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -112,10 +114,10 @@ DigitFormatter::countChar32( const DigitFormatterOptions &options) const { if (digits.isNaN()) { return countChar32ForNaN(); - } + } if (digits.isInfinite()) { return countChar32ForInfinity(); - } + } return countChar32( grouping, digits.getInterval(), diff --git a/deps/icu-small/source/i18n/digitformatter.h b/deps/icu-small/source/i18n/digitformatter.h index cf339f598d627e..d92d4251513f38 100644 --- a/deps/icu-small/source/i18n/digitformatter.h +++ b/deps/icu-small/source/i18n/digitformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitgrouping.cpp b/deps/icu-small/source/i18n/digitgrouping.cpp index 0a340cdc4a1300..01a981302679b8 100644 --- a/deps/icu-small/source/i18n/digitgrouping.cpp +++ b/deps/icu-small/source/i18n/digitgrouping.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -54,3 +56,4 @@ DigitGrouping::clear() { } U_NAMESPACE_END + diff --git a/deps/icu-small/source/i18n/digitgrouping.h b/deps/icu-small/source/i18n/digitgrouping.h index e075ae204bd71f..934fd4b9aba5fe 100644 --- a/deps/icu-small/source/i18n/digitgrouping.h +++ b/deps/icu-small/source/i18n/digitgrouping.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -33,7 +35,7 @@ class U_I18N_API DigitGrouping : public UMemory { * Returns TRUE if this object is equal to rhs. */ UBool equals(const DigitGrouping &rhs) const { - return ((fGrouping == rhs.fGrouping) && + return ((fGrouping == rhs.fGrouping) && (fGrouping2 == rhs.fGrouping2) && (fMinGrouping == rhs.fMinGrouping)); } diff --git a/deps/icu-small/source/i18n/digitinterval.cpp b/deps/icu-small/source/i18n/digitinterval.cpp index bf78c19aab2a9d..94dca9c950757d 100644 --- a/deps/icu-small/source/i18n/digitinterval.cpp +++ b/deps/icu-small/source/i18n/digitinterval.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -51,3 +53,4 @@ UBool DigitInterval::contains(int32_t x) const { U_NAMESPACE_END + diff --git a/deps/icu-small/source/i18n/digitinterval.h b/deps/icu-small/source/i18n/digitinterval.h index 174f797fa4209c..8e1c83f7714d47 100644 --- a/deps/icu-small/source/i18n/digitinterval.h +++ b/deps/icu-small/source/i18n/digitinterval.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -117,7 +119,7 @@ class U_I18N_API DigitInterval : public UMemory { * Returns number of digits to the left of the decimal that this * interval includes. This is a synonym for getMostSignificantExclusive(). */ - int32_t getIntDigitCount() const { + int32_t getIntDigitCount() const { return fLargestExclusive; } diff --git a/deps/icu-small/source/i18n/digitlst.cpp b/deps/icu-small/source/i18n/digitlst.cpp index 54aebbb6323ebd..a3b3406ca64cd8 100644 --- a/deps/icu-small/source/i18n/digitlst.cpp +++ b/deps/icu-small/source/i18n/digitlst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -24,9 +26,14 @@ ****************************************************************************** */ +#if defined(__CYGWIN__) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + #include "digitlst.h" #if !UCONFIG_NO_FORMATTING + #include "unicode/putil.h" #include "charstr.h" #include "cmemory.h" @@ -34,13 +41,33 @@ #include "mutex.h" #include "putilimp.h" #include "uassert.h" -#include "digitinterval.h" +#include "digitinterval.h" +#include "ucln_in.h" +#include "umutex.h" #include #include #include #include #include +#if !defined(U_USE_STRTOD_L) +# if U_PLATFORM_USES_ONLY_WIN32_API +# define U_USE_STRTOD_L 1 +# elif defined(U_HAVE_STRTOD_L) +# define U_USE_STRTOD_L U_HAVE_STRTOD_L +# else +# define U_USE_STRTOD_L 0 +# endif +#endif + +#if U_USE_STRTOD_L && !U_PLATFORM_USES_ONLY_WIN32_API +# if U_PLATFORM == U_PF_CYGWIN +# include +# else +# include +# endif +#endif + // *************************************************************************** // class DigitList // A wrapper onto decNumber. @@ -147,7 +174,7 @@ DigitList::operator==(const DigitList& that) const } // ------------------------------------- -// comparison function. Returns +// comparison function. Returns // Not Comparable : -2 // < : -1 // == : 0 @@ -212,18 +239,18 @@ formatBase10(int64_t number, char *outputStr) { const int32_t MAX_IDX = MAX_DIGITS+2; int32_t destIdx = MAX_IDX; - outputStr[--destIdx] = 0; + outputStr[--destIdx] = 0; int64_t n = number; if (number < 0) { // Negative numbers are slightly larger than a postive outputStr[--destIdx] = (char)(-(n % 10) + kZero); n /= -10; } - do { + do { outputStr[--destIdx] = (char)(n % 10 + kZero); n /= 10; } while (n > 0); - + if (number < 0) { outputStr[--destIdx] = '-'; } @@ -248,7 +275,7 @@ formatBase10(int64_t number, char *outputStr) { // This mode, inherited from Java, means that numbers that would not format exactly // will return an error when formatting is attempted. -void +void DigitList::setRoundingMode(DecimalFormat::ERoundingMode m) { enum rounding r; @@ -267,16 +294,16 @@ DigitList::setRoundingMode(DecimalFormat::ERoundingMode m) { r = uprv_decContextGetRounding(&fContext); } uprv_decContextSetRounding(&fContext, r); - + } // ------------------------------------- -void +void DigitList::setPositive(UBool s) { if (s) { - fDecNumber->bits &= ~DECNEG; + fDecNumber->bits &= ~DECNEG; } else { fDecNumber->bits |= DECNEG; } @@ -284,7 +311,7 @@ DigitList::setPositive(UBool s) { } // ------------------------------------- -void +void DigitList::setDecimalAt(int32_t d) { U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN U_ASSERT(d-1>-999999999); @@ -298,7 +325,7 @@ DigitList::setDecimalAt(int32_t d) { internalClear(); } -int32_t +int32_t DigitList::getDecimalAt() { U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN if (decNumberIsZero(fDecNumber) || ((fDecNumber->bits & DECSPECIAL) != 0)) { @@ -307,7 +334,7 @@ DigitList::getDecimalAt() { return fDecNumber->exponent + fDecNumber->digits; } -void +void DigitList::setCount(int32_t c) { U_ASSERT(c <= fContext.digits); if (c == 0) { @@ -320,7 +347,7 @@ DigitList::setCount(int32_t c) { internalClear(); } -int32_t +int32_t DigitList::getCount() const { if (decNumberIsZero(fDecNumber) && fDecNumber->exponent==0) { // The extra test for exponent==0 is needed because parsing sometimes appends @@ -330,8 +357,8 @@ DigitList::getCount() const { return fDecNumber->digits; } } - -void + +void DigitList::setDigit(int32_t i, char v) { int32_t count = fDecNumber->digits; U_ASSERT(idigits; U_ASSERT(i s; // Note: 14 is a magic constant from the decNumber library documentation, - // the max number of extra characters beyond the number of digits + // the max number of extra characters beyond the number of digits // needed to represent the number in string form. Add a few more // for the additional digits we retain. @@ -483,24 +476,71 @@ DigitList::getDouble() const } U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18); - if (decimalSeparator != '.') { - char *decimalPt = strchr(s.getAlias(), '.'); - if (decimalPt != NULL) { - *decimalPt = decimalSeparator; - } - } char *end = NULL; - tDouble = uprv_strtod(s.getAlias(), &end); + tDouble = decimalStrToDouble(s.getAlias(), &end); } { Mutex mutex; DigitList *nonConstThis = const_cast(this); nonConstThis->internalSetDouble(tDouble); - gDecimal = decimalSeparator; } return tDouble; } +#if U_USE_STRTOD_L && U_PLATFORM_USES_ONLY_WIN32_API +# define locale_t _locale_t +# define freelocale _free_locale +# define strtod_l _strtod_l +#endif + +#if U_USE_STRTOD_L +static locale_t gCLocale = (locale_t)0; +#endif +static icu::UInitOnce gCLocaleInitOnce = U_INITONCE_INITIALIZER; + +U_CDECL_BEGIN +// Cleanup callback func +static UBool U_CALLCONV digitList_cleanup(void) +{ +#if U_USE_STRTOD_L + if (gCLocale != (locale_t)0) { + freelocale(gCLocale); + } +#endif + return TRUE; +} +// C Locale initialization func +static void U_CALLCONV initCLocale(void) { + ucln_i18n_registerCleanup(UCLN_I18N_DIGITLIST, digitList_cleanup); +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API + gCLocale = _create_locale(LC_ALL, "C"); +# else + gCLocale = newlocale(LC_ALL_MASK, "C", (locale_t)0); +# endif +#endif +} +U_CDECL_END + +double +DigitList::decimalStrToDouble(char *decstr, char **end) { + umtx_initOnce(gCLocaleInitOnce, &initCLocale); +#if U_USE_STRTOD_L + return strtod_l(decstr, end, gCLocale); +#else + char *decimalPt = strchr(decstr, '.'); + if (decimalPt) { + // We need to know the decimal separator character that will be used with strtod(). + // Depends on the C runtime global locale. + // Most commonly is '.' + char rep[MAX_DIGITS]; + sprintf(rep, "%+1.1f", 1.0); + *decimalPt = rep[2]; + } + return uprv_strtod(decstr, end); +#endif +} + // ------------------------------------- /** @@ -510,7 +550,7 @@ DigitList::getDouble() const int32_t DigitList::getLong() /*const*/ { int32_t result = 0; - if (getUpperExponent() > 10) { + if (getUpperExponent() > 10) { // Overflow, absolute value too big. return result; } @@ -539,7 +579,7 @@ int64_t DigitList::getInt64() /*const*/ { // Return 0 if out of range. // Range of in64_t is -9223372036854775808 to 9223372036854775807 (19 digits) // - if (getUpperExponent() > 19) { + if (getUpperExponent() > 19) { // Overflow, absolute value too big. return 0; } @@ -553,7 +593,7 @@ int64_t DigitList::getInt64() /*const*/ { // TODO: It would be faster to store a table of powers of ten to multiply by // instead of looping over zero digits, multiplying each time. - int32_t numIntDigits = getUpperExponent(); + int32_t numIntDigits = getUpperExponent(); uint64_t value = 0; for (int32_t i = 0; i < numIntDigits; i++) { // Loop is iterating over digits starting with the most significant. @@ -578,7 +618,7 @@ int64_t DigitList::getInt64() /*const*/ { svalue = 0; } } - + return svalue; } @@ -628,7 +668,7 @@ DigitList::fitsIntoLong(UBool ignoreNegativeZero) /*const*/ // Negative Zero, not ingored. Cannot represent as a long. return FALSE; } - if (getUpperExponent() < 10) { + if (getUpperExponent() < 10) { // The number is 9 or fewer digits. // The max and min int32 are 10 digts, so this number fits. // This is the common case. @@ -675,7 +715,7 @@ DigitList::fitsIntoInt64(UBool ignoreNegativeZero) /*const*/ // Negative Zero, not ingored. Cannot represent as a long. return FALSE; } - if (getUpperExponent() < 19) { + if (getUpperExponent() < 19) { // The number is 18 or fewer digits. // The max and min int64 are 19 digts, so this number fits. // This is the common case. @@ -734,12 +774,12 @@ DigitList::set(int64_t source) * be acceptable for a public API. */ void -DigitList::set(const StringPiece &source, UErrorCode &status, uint32_t /*fastpathBits*/) { +DigitList::set(StringPiece source, UErrorCode &status, uint32_t /*fastpathBits*/) { if (U_FAILURE(status)) { return; } -#if 0 +#if 0 if(fastpathBits==(kFastpathOk|kNoDecimal)) { int32_t size = source.size(); const char *data = source.data(); @@ -786,7 +826,7 @@ DigitList::set(const StringPiece &source, UErrorCode &status, uint32_t /*fastpat } } internalClear(); -} +} /** * Set the digit list to a representation of the given double value. @@ -838,9 +878,9 @@ DigitList::set(double source) */ void DigitList::mult(const DigitList &other, UErrorCode &status) { - if (U_FAILURE(status)) { - return; - } + if (U_FAILURE(status)) { + return; + } fContext.status = 0; int32_t requiredDigits = this->digits() + other.digits(); if (requiredDigits > fContext.digits) { @@ -911,23 +951,23 @@ DigitList::ensureCapacity(int32_t requestedCapacity, UErrorCode &status) { void DigitList::round(int32_t maximumDigits) { - reduce(); - if (maximumDigits >= fDecNumber->digits) { - return; - } + reduce(); + if (maximumDigits >= fDecNumber->digits) { + return; + } int32_t savedDigits = fContext.digits; fContext.digits = maximumDigits; uprv_decNumberPlus(fDecNumber, fDecNumber, &fContext); fContext.digits = savedDigits; uprv_decNumberTrim(fDecNumber); - reduce(); + reduce(); internalClear(); } void DigitList::roundFixedPoint(int32_t maximumFractionDigits) { - reduce(); // Remove trailing zeros. + reduce(); // Remove trailing zeros. if (fDecNumber->exponent >= -maximumFractionDigits) { return; } @@ -935,9 +975,9 @@ DigitList::roundFixedPoint(int32_t maximumFractionDigits) { uprv_decNumberZero(&scale); // fraction digits. scale.exponent = -maximumFractionDigits; scale.lsu[0] = 1; - + uprv_decNumberQuantize(fDecNumber, fDecNumber, &scale, &fContext); - reduce(); + reduce(); internalClear(); } diff --git a/deps/icu-small/source/i18n/digitlst.h b/deps/icu-small/source/i18n/digitlst.h index 6cea007cb88306..45cb49a64418bd 100644 --- a/deps/icu-small/source/i18n/digitlst.h +++ b/deps/icu-small/source/i18n/digitlst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -20,10 +22,10 @@ * 07/09/99 stephen Removed kMaxCount (unused, for HP compiler) ****************************************************************************** */ - + #ifndef DIGITLST_H #define DIGITLST_H - + #include "unicode/uobject.h" #if !UCONFIG_NO_FORMATTING @@ -51,12 +53,12 @@ typedef enum EDigitListValues { U_NAMESPACE_BEGIN class CharString; -class DigitInterval; +class DigitInterval; // Export an explicit template instantiation of the MaybeStackHeaderAndArray that // is used as a data member of DigitList. // -// MSVC requires this, even though it should not be necessary. +// MSVC requires this, even though it should not be necessary. // No direct access to the MaybeStackHeaderAndArray leaks out of the i18n library. // // Macintosh produces duplicate definition linker errors with the explicit template @@ -73,7 +75,7 @@ enum EFastpathBits { kFastpathOk = 1, kNoDecimal = 2 }; /** * Digit List is actually a Decimal Floating Point number. - * The original implementation has been replaced by a thin wrapper onto a + * The original implementation has been replaced by a thin wrapper onto a * decimal number from the decNumber library. * * The original DigitList API has been retained, to minimize the impact of @@ -132,7 +134,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil /* copy constructor * @param DigitList The object to be copied. - * @return the newly created object. + * @return the newly created object. */ DigitList(const DigitList&); // copy constructor @@ -169,9 +171,9 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil * leaving an integer value. */ void toIntegralValue(); - + /** - * Appends digits to the list. + * Appends digits to the list. * CAUTION: this function is not recommended for new code. * In the original DigitList implementation, decimal numbers were * parsed by appending them to a digit list as they were encountered. @@ -267,7 +269,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil * @param source The value to be set. The string must be nul-terminated. * @param fastpathBits special flags for fast parsing */ - void set(const StringPiece &source, UErrorCode &status, uint32_t fastpathBits = 0); + void set(StringPiece source, UErrorCode &status, uint32_t fastpathBits = 0); /** * Multiply this = this * arg @@ -284,7 +286,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil // The following functions replace direct access to the original DigitList implmentation // data structures. - void setRoundingMode(DecimalFormat::ERoundingMode m); + void setRoundingMode(DecimalFormat::ERoundingMode m); /** Test a number for zero. * @return TRUE if the number is zero @@ -314,7 +316,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil * Round the number to the given number of digits. * @param maximumDigits The maximum number of digits to be shown. * Upon return, count will be less than or equal to maximumDigits. - * result is guaranteed to be trimmed. + * result is guaranteed to be trimmed. */ void round(int32_t maximumDigits); @@ -324,17 +326,17 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil * the requested size. Capacity is not reduced if it is already greater * than requested. */ - void ensureCapacity(int32_t requestedSize, UErrorCode &status); + void ensureCapacity(int32_t requestedSize, UErrorCode &status); UBool isPositive(void) const { return decNumberIsNegative(fDecNumber) == 0;} - void setPositive(UBool s); + void setPositive(UBool s); void setDecimalAt(int32_t d); int32_t getDecimalAt(); void setCount(int32_t c); int32_t getCount() const; - + /** * Set the digit in platform (invariant) format, from '0'..'9' * @param i index of digit @@ -409,7 +411,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil /** * Like toScientific but only returns the exponent * leaving this instance unchanged. - */ + */ int32_t getScientificExponent( int32_t minIntDigitCount, int32_t exponentMultiplier) const; @@ -461,7 +463,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil */ public: - decContext fContext; // public access to status flags. + decContext fContext; // public access to status flags. private: decNumber *fDecNumber; @@ -493,7 +495,8 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil static inline void * U_EXPORT2 operator new(size_t size) U_NO_THROW { return ::operator new(size); }; static inline void U_EXPORT2 operator delete(void *ptr ) U_NO_THROW { ::operator delete(ptr); }; #endif - static char U_EXPORT2 getStrtodDecimalSeparator(); + + static double U_EXPORT2 decimalStrToDouble(char *decstr, char **end); /** * Placement new for stack usage diff --git a/deps/icu-small/source/i18n/dt_impl.h b/deps/icu-small/source/i18n/dt_impl.h new file mode 100644 index 00000000000000..9b01bad79edd9b --- /dev/null +++ b/deps/icu-small/source/i18n/dt_impl.h @@ -0,0 +1,92 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* Copyright (C) 2007-2016, International Business Machines Corporation and +* others. All Rights Reserved. +******************************************************************************* +* +* File dt_impl.h +* +******************************************************************************* +*/ + + +#ifndef DT_IMPL_H__ +#define DT_IMPL_H__ + +/** + * \file + * \brief C++ API: Defines macros for interval format implementation + */ + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/unistr.h" + + +#define QUOTE ((UChar)0x0027) +#define LOW_LINE ((UChar)0x005F) +#define COLON ((UChar)0x003A) +#define LEFT_CURLY_BRACKET ((UChar)0x007B) +#define RIGHT_CURLY_BRACKET ((UChar)0x007D) +#define SPACE ((UChar)0x0020) +#define EN_DASH ((UChar)0x2013) +#define SOLIDUS ((UChar)0x002F) +#define PERCENT ((UChar)0x0025) + +#define DIGIT_ZERO ((UChar)0x0030) +#define DIGIT_ONE ((UChar)0x0031) + +#define LOW_A ((UChar)0x0061) +#define LOW_B ((UChar)0x0062) +#define LOW_C ((UChar)0x0063) +#define LOW_D ((UChar)0x0064) +#define LOW_E ((UChar)0x0065) +#define LOW_F ((UChar)0x0066) +#define LOW_G ((UChar)0x0067) +#define LOW_H ((UChar)0x0068) +#define LOW_I ((UChar)0x0069) +#define LOW_J ((UChar)0x006a) +#define LOW_K ((UChar)0x006B) +#define LOW_L ((UChar)0x006C) +#define LOW_M ((UChar)0x006D) +#define LOW_N ((UChar)0x006E) +#define LOW_O ((UChar)0x006F) +#define LOW_P ((UChar)0x0070) +#define LOW_Q ((UChar)0x0071) +#define LOW_R ((UChar)0x0072) +#define LOW_S ((UChar)0x0073) +#define LOW_T ((UChar)0x0074) +#define LOW_U ((UChar)0x0075) +#define LOW_V ((UChar)0x0076) +#define LOW_W ((UChar)0x0077) +#define LOW_Y ((UChar)0x0079) +#define LOW_Z ((UChar)0x007A) + +#define CAP_A ((UChar)0x0041) +#define CAP_C ((UChar)0x0043) +#define CAP_D ((UChar)0x0044) +#define CAP_E ((UChar)0x0045) +#define CAP_F ((UChar)0x0046) +#define CAP_G ((UChar)0x0047) +#define CAP_H ((UChar)0x0048) +#define CAP_K ((UChar)0x004B) +#define CAP_L ((UChar)0x004C) +#define CAP_M ((UChar)0x004D) +#define CAP_N ((UChar)0x004E) +#define CAP_O ((UChar)0x004F) +#define CAP_P ((UChar)0x0050) +#define CAP_Q ((UChar)0x0051) +#define CAP_S ((UChar)0x0053) +#define CAP_T ((UChar)0x0054) +#define CAP_U ((UChar)0x0055) +#define CAP_V ((UChar)0x0056) +#define CAP_W ((UChar)0x0057) +#define CAP_Y ((UChar)0x0059) +#define CAP_Z ((UChar)0x005A) + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif +//eof diff --git a/deps/icu-small/source/i18n/dtfmtsym.cpp b/deps/icu-small/source/i18n/dtfmtsym.cpp index 206d7a26a9ee6f..c6e4b6400252f0 100644 --- a/deps/icu-small/source/i18n/dtfmtsym.cpp +++ b/deps/icu-small/source/i18n/dtfmtsym.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -33,11 +35,15 @@ #include "umutex.h" #include "cmemory.h" #include "cstring.h" +#include "charstr.h" +#include "dt_impl.h" #include "locbased.h" #include "gregoimp.h" #include "hash.h" +#include "uassert.h" #include "uresimp.h" #include "ureslocs.h" +#include "uvector.h" #include "shareddateformatsymbols.h" #include "unicode/calendar.h" #include "unifiedcache.h" @@ -194,6 +200,8 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateFormatSymbols) * These are the tags we expect to see in normal resource bundle files associated * with a locale and calendar */ +static const char gCalendarTag[]="calendar"; +static const char gGregorianTag[]="gregorian"; static const char gErasTag[]="eras"; static const char gCyclicNameSetsTag[]="cyclicNameSets"; static const char gNameSetYearsTag[]="years"; @@ -206,11 +214,11 @@ static const char gNamesAbbrTag[]="abbreviated"; static const char gNamesShortTag[]="short"; static const char gNamesNarrowTag[]="narrow"; static const char gNamesAllTag[]="all"; -static const char gNamesLeapTag[]="leap"; static const char gNamesFormatTag[]="format"; static const char gNamesStandaloneTag[]="stand-alone"; static const char gNamesNumericTag[]="numeric"; static const char gAmPmMarkersTag[]="AmPmMarkers"; +static const char gAmPmMarkersAbbrTag[]="AmPmMarkersAbbr"; static const char gAmPmMarkersNarrowTag[]="AmPmMarkersNarrow"; static const char gQuartersTag[]="quarters"; static const char gNumberElementsTag[]="NumberElements"; @@ -293,8 +301,8 @@ DateFormatSymbols::assignArray(UnicodeString*& dstArray, const UnicodeString* srcArray, int32_t srcCount) { - // assignArray() is only called by copyData(), which in turn implements the - // copy constructor and the assignment operator. + // assignArray() is only called by copyData() and initializeData(), which in turn + // implements the copy constructor and the assignment operator. // All strings in a DateFormatSymbols object are created in one of the following // three ways that all allow to safely use UnicodeString::fastCopyFrom(): // - readonly-aliases from resource bundles @@ -1271,6 +1279,12 @@ DateFormatSymbols::initZoneStringsArray(void) { TimeZoneNames *tzNames = NULL; int32_t rows = 0; + static const UTimeZoneNameType TYPES[] = { + UTZNM_LONG_STANDARD, UTZNM_SHORT_STANDARD, + UTZNM_LONG_DAYLIGHT, UTZNM_SHORT_DAYLIGHT + }; + static const int32_t NUM_TYPES = 4; + do { // dummy do-while tzids = TimeZone::createTimeZoneIDEnumeration(ZONE_SET, NULL, NULL, status); @@ -1289,6 +1303,8 @@ DateFormatSymbols::initZoneStringsArray(void) { uprv_memset(zarray, 0, size); tzNames = TimeZoneNames::createInstance(fZSFLocale, status); + tzNames->loadAllDisplayNames(status); + if (U_FAILURE(status)) { break; } const UnicodeString *tzid; int32_t i = 0; @@ -1307,10 +1323,7 @@ DateFormatSymbols::initZoneStringsArray(void) { } zarray[i][0].setTo(*tzid); - zarray[i][1].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_STANDARD, now, tzDispName)); - zarray[i][2].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_STANDARD, now, tzDispName)); - zarray[i][3].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_DAYLIGHT, now, tzDispName)); - zarray[i][4].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_DAYLIGHT, now, tzDispName)); + tzNames->getDisplayNames(*tzid, TYPES, NUM_TYPES, now, zarray[i]+1, status); i++; } @@ -1324,6 +1337,7 @@ DateFormatSymbols::initZoneStringsArray(void) { } } uprv_free(zarray); + zarray = NULL; } } @@ -1336,7 +1350,7 @@ DateFormatSymbols::initZoneStringsArray(void) { fLocaleZoneStrings = zarray; fZoneStringsRowCount = rows; - fZoneStringsColCount = 5; + fZoneStringsColCount = 1 + NUM_TYPES; } void @@ -1431,26 +1445,410 @@ DateFormatSymbols::setLocalPatternChars(const UnicodeString& newLocalPatternChar //------------------------------------------------------ -static void -initField(UnicodeString **field, int32_t& length, const UResourceBundle *data, UErrorCode &status) { - if (U_SUCCESS(status)) { - int32_t strLen = 0; - length = ures_getSize(data); - *field = newUnicodeStringArray(length); - if (*field) { - for(int32_t i = 0; isetTo(TRUE, resStr, strLen); +namespace { + +// Constants declarations +static const UChar kCalendarAliasPrefixUChar[] = { + SOLIDUS, CAP_L, CAP_O, CAP_C, CAP_A, CAP_L, CAP_E, SOLIDUS, + LOW_C, LOW_A, LOW_L, LOW_E, LOW_N, LOW_D, LOW_A, LOW_R, SOLIDUS +}; +static const UChar kGregorianTagUChar[] = { + LOW_G, LOW_R, LOW_E, LOW_G, LOW_O, LOW_R, LOW_I, LOW_A, LOW_N +}; +static const UChar kVariantTagUChar[] = { + PERCENT, LOW_V, LOW_A, LOW_R, LOW_I, LOW_A, LOW_N, LOW_T +}; +static const UChar kLeapTagUChar[] = { + LOW_L, LOW_E, LOW_A, LOW_P +}; +static const UChar kCyclicNameSetsTagUChar[] = { + LOW_C, LOW_Y, LOW_C, LOW_L, LOW_I, LOW_C, CAP_N, LOW_A, LOW_M, LOW_E, CAP_S, LOW_E, LOW_T, LOW_S +}; +static const UChar kYearsTagUChar[] = { + SOLIDUS, LOW_Y, LOW_E, LOW_A, LOW_R, LOW_S +}; +static const UChar kZodiacsUChar[] = { + SOLIDUS, LOW_Z, LOW_O, LOW_D, LOW_I, LOW_A, LOW_C, LOW_S +}; +static const UChar kDayPartsTagUChar[] = { + SOLIDUS, LOW_D, LOW_A, LOW_Y, CAP_P, LOW_A, LOW_R, LOW_T, LOW_S +}; +static const UChar kFormatTagUChar[] = { + SOLIDUS, LOW_F, LOW_O, LOW_R, LOW_M, LOW_A, LOW_T +}; +static const UChar kAbbrTagUChar[] = { + SOLIDUS, LOW_A, LOW_B, LOW_B, LOW_R, LOW_E, LOW_V, LOW_I, LOW_A, LOW_T, LOW_E, LOW_D +}; + +// ResourceSink to enumerate all calendar resources +struct CalendarDataSink : public ResourceSink { + + // Enum which specifies the type of alias received, or no alias + enum AliasType { + SAME_CALENDAR, + DIFFERENT_CALENDAR, + GREGORIAN, + NONE + }; + + // Data structures to store resources from the current resource bundle + Hashtable arrays; + Hashtable arraySizes; + Hashtable maps; + /** + * Whenever there are aliases, the same object will be added twice to 'map'. + * To avoid double deletion, 'maps' won't take ownership of the objects. Instead, + * 'mapRefs' will own them and will delete them when CalendarDataSink is deleted. + */ + UVector mapRefs; + + // Paths and the aliases they point to + UVector aliasPathPairs; + + // Current and next calendar resource table which should be loaded + UnicodeString currentCalendarType; + UnicodeString nextCalendarType; + + // Resources to visit when enumerating fallback calendars + LocalPointer resourcesToVisit; + + // Alias' relative path populated whenever an alias is read + UnicodeString aliasRelativePath; + + // Initializes CalendarDataSink with default values + CalendarDataSink(UErrorCode& status) + : arrays(FALSE, status), arraySizes(FALSE, status), maps(FALSE, status), + mapRefs(deleteHashtable, NULL, 10, status), + aliasPathPairs(uprv_deleteUObject, uhash_compareUnicodeString, status), + currentCalendarType(), nextCalendarType(), + resourcesToVisit(NULL), aliasRelativePath() { + if (U_FAILURE(status)) { return; } + } + virtual ~CalendarDataSink(); + + // Configure the CalendarSink to visit all the resources + void visitAllResources() { + resourcesToVisit.adoptInstead(NULL); + } + + // Actions to be done before enumerating + void preEnumerate(const UnicodeString &calendarType) { + currentCalendarType = calendarType; + nextCalendarType.setToBogus(); + aliasPathPairs.removeAllElements(); + } + + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + U_ASSERT(!currentCalendarType.isEmpty()); + + // Stores the resources to visit on the next calendar. + LocalPointer resourcesToVisitNext(NULL); + ResourceTable calendarData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + // Enumerate all resources for this calendar + for (int i = 0; calendarData.getKeyAndValue(i, key, value); i++) { + UnicodeString keyUString(key, -1, US_INV); + + // == Handle aliases == + AliasType aliasType = processAliasFromValue(keyUString, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (aliasType == GREGORIAN) { + // Ignore aliases to the gregorian calendar, all of its resources will be loaded anyway. + continue; + + } else if (aliasType == DIFFERENT_CALENDAR) { + // Whenever an alias to the next calendar (except gregorian) is encountered, register the + // calendar type it's pointing to + if (resourcesToVisitNext.isNull()) { + resourcesToVisitNext + .adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, errorCode), + errorCode); + if (U_FAILURE(errorCode)) { return; } + } + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + resourcesToVisitNext->addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after resourcesToVisitNext takes it (no error happened): + aliasRelativePathCopy.orphan(); + continue; + + } else if (aliasType == SAME_CALENDAR) { + // Register same-calendar alias + if (arrays.get(aliasRelativePath) == NULL && maps.get(aliasRelativePath) == NULL) { + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + aliasRelativePathCopy.orphan(); + LocalPointer keyUStringCopy(new UnicodeString(keyUString), errorCode); + aliasPathPairs.addElement(keyUStringCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + keyUStringCopy.orphan(); + } + continue; + } + + // Only visit the resources that were referenced by an alias on the previous calendar + // (AmPmMarkersAbbr is an exception). + if (!resourcesToVisit.isNull() && !resourcesToVisit->isEmpty() && !resourcesToVisit->contains(&keyUString) + && uprv_strcmp(key, gAmPmMarkersAbbrTag) != 0) { continue; } + + // == Handle data == + if (uprv_strcmp(key, gAmPmMarkersTag) == 0 + || uprv_strcmp(key, gAmPmMarkersAbbrTag) == 0 + || uprv_strcmp(key, gAmPmMarkersNarrowTag) == 0) { + if (arrays.get(keyUString) == NULL) { + ResourceArray resourceArray = value.getArray(errorCode); + int32_t arraySize = resourceArray.getSize(); + LocalArray stringArray(new UnicodeString[arraySize], errorCode); + value.getStringArray(stringArray.getAlias(), arraySize, errorCode); + arrays.put(keyUString, stringArray.orphan(), errorCode); + arraySizes.puti(keyUString, arraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } else if (uprv_strcmp(key, gErasTag) == 0 + || uprv_strcmp(key, gDayNamesTag) == 0 + || uprv_strcmp(key, gMonthNamesTag) == 0 + || uprv_strcmp(key, gQuartersTag) == 0 + || uprv_strcmp(key, gDayPeriodTag) == 0 + || uprv_strcmp(key, gMonthPatternsTag) == 0 + || uprv_strcmp(key, gCyclicNameSetsTag) == 0) { + processResource(keyUString, key, value, errorCode); } } - else { - length = 0; - status = U_MEMORY_ALLOCATION_ERROR; + + // Apply same-calendar aliases + UBool modified; + do { + modified = false; + for (int32_t i = 0; i < aliasPathPairs.size();) { + UBool mod = false; + UnicodeString *alias = (UnicodeString*)aliasPathPairs[i]; + UnicodeString *aliasArray; + Hashtable *aliasMap; + if ((aliasArray = (UnicodeString*)arrays.get(*alias)) != NULL) { + // Clone the array + int32_t aliasArraySize = arraySizes.geti(*alias); + LocalArray aliasArrayCopy(new UnicodeString[aliasArraySize], errorCode); + if (U_FAILURE(errorCode)) { return; } + uprv_arrayCopy(aliasArray, aliasArrayCopy.getAlias(), aliasArraySize); + // Put the array on the 'arrays' map + UnicodeString *path = (UnicodeString*)aliasPathPairs[i + 1]; + arrays.put(*path, aliasArrayCopy.orphan(), errorCode); + arraySizes.puti(*path, aliasArraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + mod = true; + } else if ((aliasMap = (Hashtable*)maps.get(*alias)) != NULL) { + UnicodeString *path = (UnicodeString*)aliasPathPairs[i + 1]; + maps.put(*path, aliasMap, errorCode); + if (U_FAILURE(errorCode)) { return; } + mod = true; + } + if (mod) { + aliasPathPairs.removeElementAt(i + 1); + aliasPathPairs.removeElementAt(i); + modified = true; + } else { + i += 2; + } + } + } while (modified && !aliasPathPairs.isEmpty()); + + // Set the resources to visit on the next calendar + if (!resourcesToVisitNext.isNull()) { + resourcesToVisit.moveFrom(resourcesToVisitNext); } } + + // Process the nested resource bundle tables + void processResource(UnicodeString &path, const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) return; + + ResourceTable table = value.getTable(errorCode); + if (U_FAILURE(errorCode)) return; + Hashtable* stringMap = NULL; + + // Iterate over all the elements of the table and add them to the map + for (int i = 0; table.getKeyAndValue(i, key, value); i++) { + UnicodeString keyUString(key, -1, US_INV); + + // Ignore '%variant' keys + if (keyUString.endsWith(kVariantTagUChar, UPRV_LENGTHOF(kVariantTagUChar))) { + continue; + } + + // == Handle String elements == + if (value.getType() == URES_STRING) { + // We are on a leaf, store the map elements into the stringMap + if (i == 0) { + LocalPointer stringMapPtr(new Hashtable(FALSE, errorCode), errorCode); + stringMap = stringMapPtr.getAlias(); + maps.put(path, stringMap, errorCode); + // mapRefs will take ownership of 'stringMap': + mapRefs.addElement(stringMap, errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after mapRefs takes it (no error happened): + stringMapPtr.orphan(); + stringMap->setValueDeleter(uprv_deleteUObject); + } + U_ASSERT(stringMap != NULL); + int32_t valueStringSize; + const UChar *valueString = value.getString(valueStringSize, errorCode); + if (U_FAILURE(errorCode)) { return; } + LocalPointer valueUString(new UnicodeString(TRUE, valueString, valueStringSize), errorCode); + stringMap->put(keyUString, valueUString.orphan(), errorCode); + if (U_FAILURE(errorCode)) { return; } + continue; + } + U_ASSERT(stringMap == NULL); + + // Store the current path's length and append the current key to the path. + int32_t pathLength = path.length(); + path.append(SOLIDUS).append(keyUString); + + // In cyclicNameSets ignore everything but years/format/abbreviated + // and zodiacs/format/abbreviated + if (path.startsWith(kCyclicNameSetsTagUChar, UPRV_LENGTHOF(kCyclicNameSetsTagUChar))) { + UBool skip = TRUE; + int32_t startIndex = UPRV_LENGTHOF(kCyclicNameSetsTagUChar); + int32_t length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kZodiacsUChar)), kZodiacsUChar, 0, UPRV_LENGTHOF(kZodiacsUChar)) == 0 + || path.compare(startIndex, (length = UPRV_LENGTHOF(kYearsTagUChar)), kYearsTagUChar, 0, UPRV_LENGTHOF(kYearsTagUChar)) == 0 + || path.compare(startIndex, (length = UPRV_LENGTHOF(kDayPartsTagUChar)), kDayPartsTagUChar, 0, UPRV_LENGTHOF(kDayPartsTagUChar)) == 0) { + startIndex += length; + length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kFormatTagUChar)), kFormatTagUChar, 0, UPRV_LENGTHOF(kFormatTagUChar)) == 0) { + startIndex += length; + length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kAbbrTagUChar)), kAbbrTagUChar, 0, UPRV_LENGTHOF(kAbbrTagUChar)) == 0) { + skip = FALSE; + } + } + } + if (skip) { + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + } + + // == Handle aliases == + if (arrays.get(path) != NULL || maps.get(path) != NULL) { + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + + AliasType aliasType = processAliasFromValue(path, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (aliasType == SAME_CALENDAR) { + // Store the alias path and the current path on aliasPathPairs + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + aliasRelativePathCopy.orphan(); + LocalPointer pathCopy(new UnicodeString(path), errorCode); + aliasPathPairs.addElement(pathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + pathCopy.orphan(); + + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + U_ASSERT(aliasType == NONE); + + // == Handle data == + if (value.getType() == URES_ARRAY) { + // We are on a leaf, store the array + ResourceArray rDataArray = value.getArray(errorCode); + int32_t dataArraySize = rDataArray.getSize(); + LocalArray dataArray(new UnicodeString[dataArraySize], errorCode); + value.getStringArray(dataArray.getAlias(), dataArraySize, errorCode); + arrays.put(path, dataArray.orphan(), errorCode); + arraySizes.puti(path, dataArraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + } else if (value.getType() == URES_TABLE) { + // We are not on a leaf, recursively process the subtable. + processResource(path, key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + + // Drop the latest key on the path + path.retainBetween(0, pathLength); + } + } + + // Populates an AliasIdentifier with the alias information contained on the UResource.Value. + AliasType processAliasFromValue(UnicodeString ¤tRelativePath, ResourceValue &value, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return NONE; } + + if (value.getType() == URES_ALIAS) { + int32_t aliasPathSize; + const UChar* aliasPathUChar = value.getAliasString(aliasPathSize, errorCode); + if (U_FAILURE(errorCode)) { return NONE; } + UnicodeString aliasPath(aliasPathUChar, aliasPathSize); + const int32_t aliasPrefixLength = UPRV_LENGTHOF(kCalendarAliasPrefixUChar); + if (aliasPath.startsWith(kCalendarAliasPrefixUChar, aliasPrefixLength) + && aliasPath.length() > aliasPrefixLength) { + int32_t typeLimit = aliasPath.indexOf(SOLIDUS, aliasPrefixLength); + if (typeLimit > aliasPrefixLength) { + const UnicodeString aliasCalendarType = + aliasPath.tempSubStringBetween(aliasPrefixLength, typeLimit); + aliasRelativePath.setTo(aliasPath, typeLimit + 1, aliasPath.length()); + + if (currentCalendarType == aliasCalendarType + && currentRelativePath != aliasRelativePath) { + // If we have an alias to the same calendar, the path to the resource must be different + return SAME_CALENDAR; + + } else if (currentCalendarType != aliasCalendarType + && currentRelativePath == aliasRelativePath) { + // If we have an alias to a different calendar, the path to the resource must be the same + if (aliasCalendarType.compare(kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)) == 0) { + return GREGORIAN; + } else if (nextCalendarType.isBogus()) { + nextCalendarType = aliasCalendarType; + return DIFFERENT_CALENDAR; + } else if (nextCalendarType == aliasCalendarType) { + return DIFFERENT_CALENDAR; + } + } + } + } + errorCode = U_INTERNAL_PROGRAM_ERROR; + return NONE; + } + return NONE; + } + + // Deleter function to be used by 'arrays' + static void U_CALLCONV deleteUnicodeStringArray(void *uArray) { + delete[] static_cast(uArray); + } + + // Deleter function to be used by 'maps' + static void U_CALLCONV deleteHashtable(void *table) { + delete static_cast(table); + } +}; +// Virtual destructors have to be defined out of line +CalendarDataSink::~CalendarDataSink() { + arrays.setValueDeleter(deleteUnicodeStringArray); +} } +//------------------------------------------------------ + static void initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortSize numStr, LastResortSize strLen, UErrorCode &status) { if (U_SUCCESS(status)) { @@ -1471,16 +1869,89 @@ initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortS } static void -initLeapMonthPattern(UnicodeString *field, int32_t index, const UResourceBundle *data, UErrorCode &status) { +initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, UErrorCode &status) { + if (U_SUCCESS(status)) { + UnicodeString keyUString(key.data(), -1, US_INV); + UnicodeString* array = static_cast(sink.arrays.get(keyUString)); + + if (array != NULL) { + length = sink.arraySizes.geti(keyUString); + *field = array; + // DateFormatSymbols takes ownership of the array: + sink.arrays.remove(keyUString); + } else { + length = 0; + status = U_MISSING_RESOURCE_ERROR; + } + } +} + +static void +initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, int32_t arrayOffset, UErrorCode &status) { + if (U_SUCCESS(status)) { + UnicodeString keyUString(key.data(), -1, US_INV); + UnicodeString* array = static_cast(sink.arrays.get(keyUString)); + + if (array != NULL) { + int32_t arrayLength = sink.arraySizes.geti(keyUString); + length = arrayLength + arrayOffset; + *field = new UnicodeString[length]; + if (*field == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + uprv_arrayCopy(array, 0, *field, arrayOffset, arrayLength); + } else { + length = 0; + status = U_MISSING_RESOURCE_ERROR; + } + } +} + +static void +initLeapMonthPattern(UnicodeString *field, int32_t index, CalendarDataSink &sink, CharString &path, UErrorCode &status) { field[index].remove(); if (U_SUCCESS(status)) { - int32_t strLen = 0; - const UChar *resStr = ures_getStringByKey(data, gNamesLeapTag, &strLen, &status); - if (U_SUCCESS(status)) { - field[index].setTo(TRUE, resStr, strLen); + UnicodeString pathUString(path.data(), -1, US_INV); + Hashtable *leapMonthTable = static_cast(sink.maps.get(pathUString)); + if (leapMonthTable != NULL) { + UnicodeString leapLabel(FALSE, kLeapTagUChar, UPRV_LENGTHOF(kLeapTagUChar)); + UnicodeString *leapMonthPattern = static_cast(leapMonthTable->get(leapLabel)); + if (leapMonthPattern != NULL) { + field[index].fastCopyFrom(*leapMonthPattern); + } else { + field[index].setToBogus(); + } + return; } + status = U_MISSING_RESOURCE_ERROR; } - status = U_ZERO_ERROR; +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, UErrorCode &errorCode) { + return path.clear().append(segment1, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + UErrorCode &errorCode) { + return buildResourcePath(path, segment1, errorCode).append('/', errorCode) + .append(segment2, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + const char* segment3, UErrorCode &errorCode) { + return buildResourcePath(path, segment1, segment2, errorCode).append('/', errorCode) + .append(segment3, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + const char* segment3, const char* segment4, UErrorCode &errorCode) { + return buildResourcePath(path, segment1, segment2, segment3, errorCode).append('/', errorCode) + .append(segment4, -1, errorCode); } typedef struct { @@ -1513,41 +1984,43 @@ static const char *dayPeriodKeys[] = {"midnight", "noon", "morning1", "afternoon1", "evening1", "night1", "morning2", "afternoon2", "evening2", "night2"}; -UnicodeString* loadDayPeriodStrings(CalendarData &calData, const char *tag, UBool standalone, +UnicodeString* loadDayPeriodStrings(CalendarDataSink &sink, CharString &path, int32_t &stringCount, UErrorCode &status) { - if (U_FAILURE(status)) { - return NULL; - } - - UResourceBundle *dayPeriodData; + if (U_FAILURE(status)) { return NULL; } - if (standalone) { - dayPeriodData = calData.getByKey3(gDayPeriodTag, gNamesStandaloneTag, tag, status); - } else { - dayPeriodData = calData.getByKey2(gDayPeriodTag, tag, status); - } + UnicodeString pathUString(path.data(), -1, US_INV); + Hashtable* map = static_cast(sink.maps.get(pathUString)); stringCount = UPRV_LENGTHOF(dayPeriodKeys); UnicodeString *strings = new UnicodeString[stringCount]; - for (int32_t i = 0; i < stringCount; ++i) { - //TODO: Check if there are fallbacks/aliases defined in the data; e.g., if there - //is no wide string, then use the narrow one? - strings[i].fastCopyFrom(ures_getUnicodeStringByKey(dayPeriodData, dayPeriodKeys[i], &status)); - if (U_FAILURE(status)) { - // string[i] will be bogus if ures_getUnicodeString() returns with an error, - // which is just the behavior we want. Simply reset the error code. - status = U_ZERO_ERROR; + if (strings == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + + if (map != NULL) { + for (int32_t i = 0; i < stringCount; ++i) { + UnicodeString dayPeriodKey(dayPeriodKeys[i], -1, US_INV); + UnicodeString *dayPeriod = static_cast(map->get(dayPeriodKey)); + if (dayPeriod != NULL) { + strings[i].fastCopyFrom(*dayPeriod); + } else { + strings[i].setToBogus(); + } + } + } else { + for (int32_t i = 0; i < stringCount; i++) { + strings[i].setToBogus(); } } return strings; } + void DateFormatSymbols::initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData) { - int32_t i; int32_t len = 0; - const UChar *resStr; /* In case something goes wrong, initialize all of the data to NULL. */ fEras = NULL; fErasCount = 0; @@ -1628,97 +2101,107 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError if (U_FAILURE(status)) return; - /** - * Retrieve the string arrays we need from the resource bundle file. - * We cast away const here, but that's okay; we won't delete any of - * these. - */ - CalendarData calData(locale, type, status); + // Create a CalendarDataSink to process this data and the resouce bundles + CalendarDataSink calendarSink(status); + UResourceBundle *rb = ures_open(NULL, locale.getBaseName(), &status); + UResourceBundle *cb = ures_getByKey(rb, gCalendarTag, NULL, &status); - // load the first data item - UResourceBundle *erasMain = calData.getByKey(gErasTag, status); - UResourceBundle *eras = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - UErrorCode oldStatus = status; - UResourceBundle *eraNames = ures_getByKeyWithFallback(erasMain, gNamesWideTag, NULL, &status); - if ( status == U_MISSING_RESOURCE_ERROR ) { // Workaround because eras/wide was omitted from CLDR 1.3 - status = oldStatus; - eraNames = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - } - // current ICU4J falls back to abbreviated if narrow eras are missing, so we will too - oldStatus = status; - UResourceBundle *narrowEras = ures_getByKeyWithFallback(erasMain, gNamesNarrowTag, NULL, &status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = oldStatus; - narrowEras = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - } - - UErrorCode tempStatus = U_ZERO_ERROR; - UResourceBundle *monthPatterns = calData.getByKey(gMonthPatternsTag, tempStatus); - if (U_SUCCESS(tempStatus) && monthPatterns != NULL) { - fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount); - if (fLeapMonthPatterns) { - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calData.getByKey2(gMonthPatternsTag, gNamesWideTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calData.getByKey2(gMonthPatternsTag, gNamesAbbrTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calData.getByKey2(gMonthPatternsTag, gNamesNarrowTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calData.getByKey3(gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus); - if (U_SUCCESS(tempStatus)) { - // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't. - // The ordering of the following statements is important. - if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]); - }; - // end of hack - fLeapMonthPatternsCount = kMonthPatternsCount; - } else { - delete[] fLeapMonthPatterns; - fLeapMonthPatterns = NULL; + if (U_FAILURE(status)) return; + + // Iterate over the resource bundle data following the fallbacks through different calendar types + UnicodeString calendarType((type != NULL && *type != '\0')? type : gGregorianTag, -1, US_INV); + while (!calendarType.isBogus()) { + CharString calendarTypeBuffer; + calendarTypeBuffer.appendInvariantChars(calendarType, status); + if (U_FAILURE(status)) { return; } + const char *calendarTypeCArray = calendarTypeBuffer.data(); + + // Enumerate this calendar type. If the calendar is not found fallback to gregorian + UErrorCode oldStatus = status; + UResourceBundle *ctb = ures_getByKeyWithFallback(cb, calendarTypeCArray, NULL, &status); + if (status == U_MISSING_RESOURCE_ERROR) { + ures_close(ctb); + if (uprv_strcmp(calendarTypeCArray, gGregorianTag) != 0) { + calendarType.setTo(FALSE, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)); + calendarSink.visitAllResources(); + status = oldStatus; + continue; } + return; } - } - tempStatus = U_ZERO_ERROR; - UResourceBundle *cyclicNameSets= calData.getByKey(gCyclicNameSetsTag, tempStatus); - if (U_SUCCESS(tempStatus) && cyclicNameSets != NULL) { - UResourceBundle *nameSetYears = ures_getByKeyWithFallback(cyclicNameSets, gNameSetYearsTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetYearsFmt = ures_getByKeyWithFallback(nameSetYears, gNamesFormatTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetYearsFmtAbbrev = ures_getByKeyWithFallback(nameSetYearsFmt, gNamesAbbrTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - initField(&fShortYearNames, fShortYearNamesCount, nameSetYearsFmtAbbrev, tempStatus); - ures_close(nameSetYearsFmtAbbrev); - } - ures_close(nameSetYearsFmt); - } - ures_close(nameSetYears); + calendarSink.preEnumerate(calendarType); + ures_getAllItemsWithFallback(ctb, "", calendarSink, status); + ures_close(ctb); + if (U_FAILURE(status)) break; + + // Stop loading when gregorian was loaded + if (uprv_strcmp(calendarTypeCArray, gGregorianTag) == 0) { + break; + } + + // Get the next calendar type to process from the sink + calendarType = calendarSink.nextCalendarType; + + // Gregorian is always the last fallback + if (calendarType.isBogus()) { + calendarType.setTo(FALSE, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)); + calendarSink.visitAllResources(); } - UResourceBundle *nameSetZodiacs = ures_getByKeyWithFallback(cyclicNameSets, gNameSetZodiacsTag, NULL, &tempStatus); + } + + // CharString object to build paths + CharString path; + + // Load Leap Month Patterns + UErrorCode tempStatus = status; + fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount); + if (fLeapMonthPatterns) { + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesWideTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesNarrowTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus); if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetZodiacsFmt = ures_getByKeyWithFallback(nameSetZodiacs, gNamesFormatTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetZodiacsFmtAbbrev = ures_getByKeyWithFallback(nameSetZodiacsFmt, gNamesAbbrTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - initField(&fShortZodiacNames, fShortZodiacNamesCount, nameSetZodiacsFmtAbbrev, tempStatus); - ures_close(nameSetZodiacsFmtAbbrev); - } - ures_close(nameSetZodiacsFmt); - } - ures_close(nameSetZodiacs); + // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't. + // The ordering of the following statements is important. + if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]); + }; + // end of hack + fLeapMonthPatternsCount = kMonthPatternsCount; + } else { + delete[] fLeapMonthPatterns; + fLeapMonthPatterns = NULL; } } + // Load cyclic names sets + tempStatus = status; + initField(&fShortYearNames, fShortYearNamesCount, calendarSink, + buildResourcePath(path, gCyclicNameSetsTag, gNameSetYearsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + initField(&fShortZodiacNames, fShortZodiacNamesCount, calendarSink, + buildResourcePath(path, gCyclicNameSetsTag, gNameSetZodiacsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + + // Load context transforms and capitalization tempStatus = U_ZERO_ERROR; UResourceBundle *localeBundle = ures_open(NULL, locale.getName(), &tempStatus); if (U_SUCCESS(tempStatus)) { @@ -1775,126 +2258,108 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError fTimeSeparator.setTo(DateFormatSymbols::DEFAULT_TIME_SEPARATOR); } - fWideDayPeriods = loadDayPeriodStrings(calData, gNamesWideTag, FALSE, - fWideDayPeriodsCount, status); - fNarrowDayPeriods = loadDayPeriodStrings(calData, gNamesNarrowTag, FALSE, - fNarrowDayPeriodsCount, status); - fAbbreviatedDayPeriods = loadDayPeriodStrings(calData, gNamesAbbrTag, FALSE, - fAbbreviatedDayPeriodsCount, status); - fStandaloneWideDayPeriods = loadDayPeriodStrings(calData, gNamesWideTag, TRUE, - fStandaloneWideDayPeriodsCount, status); - fStandaloneNarrowDayPeriods = loadDayPeriodStrings(calData, gNamesNarrowTag, TRUE, - fStandaloneNarrowDayPeriodsCount, status); - fStandaloneAbbreviatedDayPeriods = loadDayPeriodStrings(calData, gNamesAbbrTag, TRUE, - fStandaloneAbbreviatedDayPeriodsCount, status); - - UResourceBundle *weekdaysData = NULL; // Data closed by calData - UResourceBundle *abbrWeekdaysData = NULL; // Data closed by calData - UResourceBundle *shorterWeekdaysData = NULL; // Data closed by calData - UResourceBundle *narrowWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneAbbrWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneShorterWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneNarrowWeekdaysData = NULL; // Data closed by calData + // Load day periods + fWideDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesWideTag, status), + fWideDayPeriodsCount, status); + fNarrowDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesNarrowTag, status), + fNarrowDayPeriodsCount, status); + fAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesAbbrTag, status), + fAbbreviatedDayPeriodsCount, status); + fStandaloneWideDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesWideTag, status), + fStandaloneWideDayPeriodsCount, status); + fStandaloneNarrowDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesNarrowTag, status), + fStandaloneNarrowDayPeriodsCount, status); + fStandaloneAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesAbbrTag, status), + fStandaloneAbbreviatedDayPeriodsCount, status); U_LOCALE_BASED(locBased, *this); - if (U_FAILURE(status)) - { - if (useLastResortData) - { - // Handle the case in which there is no resource data present. - // We don't have to generate usable patterns in this situation; - // we just need to produce something that will be semi-intelligible - // in most locales. - - status = U_USING_FALLBACK_WARNING; - - initField(&fEras, fErasCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fEraNames, fEraNamesCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fNarrowEras, fNarrowErasCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fMonths, fMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fShortMonths, fShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fNarrowMonths, fNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneMonths, fStandaloneMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fWeekdays, fWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fShortWeekdays, fShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fShorterWeekdays, fShorterWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fNarrowWeekdays, fNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneShorterWeekdays, fStandaloneShorterWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fAmPms, fAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status); - initField(&fNarrowAmPms, fNarrowAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status); - initField(&fQuarters, fQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fShortQuarters, fShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fStandaloneQuarters, fStandaloneQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - fLocalPatternChars.setTo(TRUE, gPatternChars, PATTERN_CHARS_LEN); - } - goto cleanup; - } - // if we make it to here, the resource data is cool, and we can get everything out // of it that we need except for the time-zone and localized-pattern data, which // are stored in a separate file - locBased.setLocaleIDs(ures_getLocaleByType(eras, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(eras, ULOC_ACTUAL_LOCALE, &status)); - - initField(&fEras, fErasCount, eras, status); - initField(&fEraNames, fEraNamesCount, eraNames, status); - initField(&fNarrowEras, fNarrowErasCount, narrowEras, status); + locBased.setLocaleIDs(ures_getLocaleByType(cb, ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(cb, ULOC_ACTUAL_LOCALE, &status)); - initField(&fMonths, fMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); - initField(&fShortMonths, fShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); - if(status == U_MISSING_RESOURCE_ERROR) { - status = U_ZERO_ERROR; - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); - } - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If format/narrow not available, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - } - - initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/wide not available, use format/wide */ - status = U_ZERO_ERROR; - initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); - } - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/abbreviated not available, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + // Load eras + initField(&fEras, fErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesAbbrTag, status), status); + UErrorCode oldStatus = status; + initField(&fEraNames, fEraNamesCount, calendarSink, buildResourcePath(path, gErasTag, gNamesWideTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3 + status = oldStatus; + assignArray(fEraNames, fEraNamesCount, fEras, fErasCount); } - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* if standalone/narrow not availabe, try format/narrow */ - status = U_ZERO_ERROR; - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* if still not there, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - } + // current ICU4J falls back to abbreviated if narrow eras are missing, so we will too + oldStatus = status; + initField(&fNarrowEras, fNarrowErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesNarrowTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3 + status = oldStatus; + assignArray(fNarrowEras, fNarrowErasCount, fEras, fErasCount); + } + + // Load month names + initField(&fMonths, fMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesWideTag, status), status); + initField(&fShortMonths, fShortMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesAbbrTag, status), status); + initField(&fStandaloneMonths, fStandaloneMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide not available, use format/wide */ + status = U_ZERO_ERROR; + assignArray(fStandaloneMonths, fStandaloneMonthsCount, fMonths, fMonthsCount); } - initField(&fAmPms, fAmPmsCount, calData.getByKey(gAmPmMarkersTag, status), status); - initField(&fNarrowAmPms, fNarrowAmPmsCount, calData.getByKey(gAmPmMarkersNarrowTag, status), status); - - initField(&fQuarters, fQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); - initField(&fShortQuarters, fShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); - - initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status); + initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated not available, use format/abbreviated */ + status = U_ZERO_ERROR; + assignArray(fStandaloneShortMonths, fStandaloneShortMonthsCount, fShortMonths, fShortMonthsCount); + } + + UErrorCode narrowMonthsEC = status; + UErrorCode standaloneNarrowMonthsEC = status; + initField(&fNarrowMonths, fNarrowMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesNarrowTag, narrowMonthsEC), narrowMonthsEC); + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, narrowMonthsEC), standaloneNarrowMonthsEC); + if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC != U_MISSING_RESOURCE_ERROR) { + // If format/narrow not available, use standalone/narrow + assignArray(fNarrowMonths, fNarrowMonthsCount, fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount); + } else if (narrowMonthsEC != U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) { + // If standalone/narrow not availabe, use format/narrow + assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fNarrowMonths, fNarrowMonthsCount); + } else if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) { + // If neither is available, use format/abbreviated + assignArray(fNarrowMonths, fNarrowMonthsCount, fShortMonths, fShortMonthsCount); + assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fShortMonths, fShortMonthsCount); + } + + // Load AM/PM markers + initField(&fAmPms, fAmPmsCount, calendarSink, + buildResourcePath(path, gAmPmMarkersTag, status), status); + initField(&fNarrowAmPms, fNarrowAmPmsCount, calendarSink, + buildResourcePath(path, gAmPmMarkersNarrowTag, status), status); + + // Load quarters + initField(&fQuarters, fQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesWideTag, status), status); + initField(&fShortQuarters, fShortQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesAbbrTag, status), status); + + initField(&fStandaloneQuarters, fStandaloneQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status); if(status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); + assignArray(fStandaloneQuarters, fStandaloneQuartersCount, fQuarters, fQuartersCount); } - - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); if(status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); + assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, fShortQuarters, fShortQuartersCount); } // ICU 3.8 or later version no longer uses localized date-time pattern characters by default (ticket#5597) @@ -1912,177 +2377,108 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError // Format wide weekdays -> fWeekdays // {sfb} fixed to handle 1-based weekdays - weekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); - fWeekdaysCount = ures_getSize(weekdaysData); - fWeekdays = new UnicodeString[fWeekdaysCount+1]; - /* pin the blame on system. If we cannot get a chunk of memory .. the system is dying!*/ - if (fWeekdays == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fWeekdays[0] empty - for(i = 0; i fShortWeekdays - abbrWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - fShortWeekdaysCount = ures_getSize(abbrWeekdaysData); - fShortWeekdays = new UnicodeString[fShortWeekdaysCount+1]; - /* test for NULL */ - if (fShortWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fShortWeekdays[0] empty - for(i = 0; i fShorterWeekdays (fall back to abbreviated) - shorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesShortTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - shorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fShorterWeekdaysCount = ures_getSize(shorterWeekdaysData); - fShorterWeekdays = new UnicodeString[fShorterWeekdaysCount+1]; - /* test for NULL */ - if (fShorterWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fShorterWeekdays[0] empty - for(i = 0; i fNarrowWeekdays - narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); - if(status == U_MISSING_RESOURCE_ERROR) { + // Format short weekdays -> fShorterWeekdays (fall back to abbreviated) + initField(&fShorterWeekdays, fShorterWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesShortTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - narrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); + assignArray(fShorterWeekdays, fShorterWeekdaysCount, fShortWeekdays, fShortWeekdaysCount); } - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fNarrowWeekdaysCount = ures_getSize(narrowWeekdaysData); - fNarrowWeekdays = new UnicodeString[fNarrowWeekdaysCount+1]; - /* test for NULL */ - if (fNarrowWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fNarrowWeekdays[0] empty - for(i = 0; i fStandaloneWeekdays - standaloneWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); - } - fStandaloneWeekdaysCount = ures_getSize(standaloneWeekdaysData); - fStandaloneWeekdays = new UnicodeString[fStandaloneWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneWeekdays[0] empty - for(i = 0; i fStandaloneShortWeekdays - standaloneAbbrWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneAbbrWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fStandaloneShortWeekdaysCount = ures_getSize(standaloneAbbrWeekdaysData); - fStandaloneShortWeekdays = new UnicodeString[fStandaloneShortWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneShortWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; + + // Stand-alone wide weekdays -> fStandaloneWeekdays + initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide is not available, use format/wide */ + status = U_ZERO_ERROR; + assignArray(fStandaloneWeekdays, fStandaloneWeekdaysCount, fWeekdays, fWeekdaysCount); } - // leave fStandaloneShortWeekdays[0] empty - for(i = 0; i fStandaloneShortWeekdays + initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated is not available, use format/abbreviated */ + status = U_ZERO_ERROR; + assignArray(fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, fShortWeekdays, fShortWeekdaysCount); } - fStandaloneShortWeekdaysCount++; // Stand-alone short weekdays -> fStandaloneShorterWeekdays (fall back to format abbreviated) - standaloneShorterWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesShortTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneShorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fStandaloneShorterWeekdaysCount = ures_getSize(standaloneShorterWeekdaysData); - fStandaloneShorterWeekdays = new UnicodeString[fStandaloneShorterWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneShorterWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneShorterWeekdays[0] empty - for(i = 0; i fNarrowWeekdays + UErrorCode narrowWeeksEC = status; + initField(&fNarrowWeekdays, fNarrowWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesNarrowTag, status), 1, narrowWeeksEC); // Stand-alone narrow weekdays -> fStandaloneNarrowWeekdays - standaloneNarrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - } - fStandaloneNarrowWeekdaysCount = ures_getSize(standaloneNarrowWeekdaysData); - fStandaloneNarrowWeekdays = new UnicodeString[fStandaloneNarrowWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneNarrowWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneNarrowWeekdays[0] empty - for(i = 0; i @@ -51,7 +53,9 @@ static const UChar gDateFormatSkeleton[][11] = { {LOW_Y, CAP_M, LOW_D, 0} }; -static const char gDateTimePatternsTag[]="DateTimePatterns"; +static const char gCalendarTag[] = "calendar"; +static const char gGregorianTag[] = "gregorian"; +static const char gDateTimePatternsTag[] = "DateTimePatterns"; // latestFirst: @@ -217,15 +221,9 @@ DateIntervalFormat::operator==(const Format& other) const { Mutex lock(&gFormatterMutex); if (fDateFormat != fmt->fDateFormat && (fDateFormat == NULL || fmt->fDateFormat == NULL)) {return FALSE;} if (fDateFormat && fmt->fDateFormat && (*fDateFormat != *fmt->fDateFormat)) {return FALSE;} - - // TODO: should operator == ignore the From and ToCalendar? They hold transient values during - // formatting of a DateInterval. - if (fFromCalendar != fmt->fFromCalendar && (fFromCalendar == NULL || fmt->fFromCalendar == NULL)) {return FALSE;} - if (fFromCalendar && fmt->fFromCalendar && !fFromCalendar->isEquivalentTo(*fmt->fFromCalendar)) {return FALSE;} - - if (fToCalendar != fmt->fToCalendar && (fToCalendar == NULL || fmt->fToCalendar == NULL)) {return FALSE;} - if (fToCalendar && fmt->fToCalendar && !fToCalendar->isEquivalentTo(*fmt->fToCalendar)) {return FALSE;} } + // note: fFromCalendar and fToCalendar hold no persistent state, and therefore do not participate in operator ==. + // fDateFormat has the master calendar for the DateIntervalFormat. if (fSkeleton != fmt->fSkeleton) {return FALSE;} if (fDatePattern != fmt->fDatePattern && (fDatePattern == NULL || fmt->fDatePattern == NULL)) {return FALSE;} if (fDatePattern && fmt->fDatePattern && (*fDatePattern != *fmt->fDatePattern)) {return FALSE;} @@ -657,27 +655,22 @@ DateIntervalFormat::initializePattern(UErrorCode& status) { // with the time interval. // The date/time pattern ( such as {0} {1} ) is saved in // calendar, that is why need to get the CalendarData here. - CalendarData* calData = new CalendarData(locale, NULL, status); - if ( U_FAILURE(status) ) { - delete calData; - return; - } - if ( calData == NULL ) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } + LocalUResourceBundlePointer dateTimePatternsRes(ures_open(NULL, locale.getBaseName(), &status)); + ures_getByKey(dateTimePatternsRes.getAlias(), gCalendarTag, + dateTimePatternsRes.getAlias(), &status); + ures_getByKeyWithFallback(dateTimePatternsRes.getAlias(), gGregorianTag, + dateTimePatternsRes.getAlias(), &status); + ures_getByKeyWithFallback(dateTimePatternsRes.getAlias(), gDateTimePatternsTag, + dateTimePatternsRes.getAlias(), &status); - const UResourceBundle* dateTimePatternsRes = calData->getByKey( - gDateTimePatternsTag, status); int32_t dateTimeFormatLength; const UChar* dateTimeFormat = ures_getStringByIndex( - dateTimePatternsRes, + dateTimePatternsRes.getAlias(), (int32_t)DateFormat::kDateTime, &dateTimeFormatLength, &status); if ( U_SUCCESS(status) && dateTimeFormatLength >= 3 ) { fDateTimeFormat = new UnicodeString(dateTimeFormat, dateTimeFormatLength); } - delete calData; } UBool found = setSeparateDateTimePtn(normalizedDateSkeleton, @@ -1274,11 +1267,11 @@ DateIntervalFormat::splitPatternInto2Part(const UnicodeString& intervalPattern) } count = 0; } - if (ch == '\'') { + if (ch == 0x0027 /*'*/) { // Consecutive single quotes are a single quote literal, // either outside of quotes or between quotes if ((i+1) < intervalPattern.length() && - intervalPattern.charAt(i+1) == '\'') { + intervalPattern.charAt(i+1) == 0x0027 /*'*/) { ++i; } else { inQuote = ! inQuote; @@ -1478,10 +1471,10 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton, } count = 0; } - if (ch == '\'') { + if (ch == 0x0027 /*'*/) { // Consecutive single quotes are a single quote literal, // either outside of quotes or between quotes - if ((i+1) < adjustedPtn.length() && adjustedPtn.charAt(i+1) == '\'') { + if ((i+1) < adjustedPtn.length() && adjustedPtn.charAt(i+1) == 0x0027 /* ' */) { ++i; } else { inQuote = ! inQuote; diff --git a/deps/icu-small/source/i18n/dtitvinf.cpp b/deps/icu-small/source/i18n/dtitvinf.cpp index 4553159e6c5d81..07129db928b31a 100644 --- a/deps/icu-small/source/i18n/dtitvinf.cpp +++ b/deps/icu-small/source/i18n/dtitvinf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************************* * Copyright (C) 2008-2016, International Business Machines Corporation and * others. All Rights Reserved. @@ -222,131 +224,83 @@ static const UChar PATH_SUFFIX[] = {SOLIDUS, LOW_I, LOW_N, LOW_T, LOW_E, LOW_R, /** * Sink for enumerating all of the date interval skeletons. - * Contains inner sink structs, each one corresponding to a type of resource table. - * The outer struct finds the dateInterval table or an alias. */ -struct DateIntervalSink : public ResourceTableSink { +struct DateIntervalInfo::DateIntervalSink : public ResourceSink { - /** - * Sink to handle each skeleton table. - */ - struct SkeletonSink : public ResourceTableSink { - SkeletonSink(DateIntervalSink &sink) : outer(sink) {} - virtual ~SkeletonSink(); - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t, UErrorCode &errorCode) { - if (U_SUCCESS(errorCode)) { - outer.currentSkeleton = key; - return &outer.patternSink; - } - return NULL; - } - - DateIntervalSink &outer; - } skeletonSink; - - /** - * Sink to store the date interval pattern for each skeleton pattern character. - */ - struct PatternSink : public ResourceTableSink { - PatternSink(DateIntervalSink &sink) : outer(sink) {} - virtual ~PatternSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - // Process the key - UCalendarDateFields calendarField = validateAndProcessPatternLetter(key); - - // If the calendar field has a valid value - if (calendarField < UCAL_FIELD_COUNT) { - // Set the interval pattern - setIntervalPatternIfAbsent(calendarField, value, errorCode); - } else { - errorCode = U_INVALID_FORMAT_ERROR; - } - } - - UCalendarDateFields validateAndProcessPatternLetter(const char *patternLetter) { - // Check that patternLetter is just one letter - char c0; - if ((c0 = patternLetter[0]) != 0 && patternLetter[1] == 0) { - // Check that the pattern letter is accepted - if (c0 == 'y') { - return UCAL_YEAR; - } else if (c0 == 'M') { - return UCAL_MONTH; - } else if (c0 == 'd') { - return UCAL_DATE; - } else if (c0 == 'a') { - return UCAL_AM_PM; - } else if (c0 == 'h' || c0 == 'H') { - return UCAL_HOUR; - } else if (c0 == 'm') { - return UCAL_MINUTE; - }// TODO(ticket:12190): Why icu4c doesn't accept the calendar field "s" but icu4j does? - } - return UCAL_FIELD_COUNT; - } - - /** - * Stores the interval pattern for the current skeleton in the internal data structure - * if it's not present. - */ - void setIntervalPatternIfAbsent(UCalendarDateFields lrgDiffCalUnit, - const ResourceValue &value, UErrorCode &errorCode) { - // Check if the pattern has already been stored on the data structure - DateIntervalInfo::IntervalPatternIndex index = - outer.dateIntervalInfo.calendarFieldToIntervalIndex(lrgDiffCalUnit, errorCode); - if (U_FAILURE(errorCode)) { return; } - - UnicodeString skeleton(outer.currentSkeleton, -1, US_INV); - UnicodeString* patternsOfOneSkeleton = - (UnicodeString*)(outer.dateIntervalInfo.fIntervalPatterns->get(skeleton)); - - if (patternsOfOneSkeleton == NULL || patternsOfOneSkeleton[index].isEmpty()) { - UnicodeString pattern = value.getUnicodeString(errorCode); - outer.dateIntervalInfo.setIntervalPatternInternally(skeleton, lrgDiffCalUnit, - pattern, errorCode); - } - } - - DateIntervalSink &outer; - } patternSink; + // Output data + DateIntervalInfo &dateIntervalInfo; + // Next calendar type + UnicodeString nextCalendarType; DateIntervalSink(DateIntervalInfo &diInfo, const char *currentCalendarType) - : skeletonSink(*this), patternSink(*this), dateIntervalInfo(diInfo), - nextCalendarType(currentCalendarType, -1, US_INV), currentSkeleton(NULL) { } + : dateIntervalInfo(diInfo), nextCalendarType(currentCalendarType, -1, US_INV) { } virtual ~DateIntervalSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - // Check if it's an alias of intervalFormats - if (U_FAILURE(errorCode) || value.getType() != URES_ALIAS - || uprv_strcmp(key, gIntervalDateTimePatternTag) != 0) { - return; - } + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } - // Get the calendar type for the alias path. - const UnicodeString &aliasPath = value.getAliasUnicodeString(errorCode); + // Iterate over all the calendar entries and only pick the 'intervalFormats' table. + ResourceTable dateIntervalData = value.getTable(errorCode); if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; dateIntervalData.getKeyAndValue(i, key, value); i++) { + if (uprv_strcmp(key, gIntervalDateTimePatternTag) != 0) { + continue; + } - nextCalendarType.remove(); - getCalendarTypeFromPath(aliasPath, nextCalendarType, errorCode); + // Handle aliases and tables. Ignore the rest. + if (value.getType() == URES_ALIAS) { + // Get the calendar type for the alias path. + const UnicodeString &aliasPath = value.getAliasUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { return; } - if (U_FAILURE(errorCode)) { - resetNextCalendarType(); + nextCalendarType.remove(); + getCalendarTypeFromPath(aliasPath, nextCalendarType, errorCode); + + if (U_FAILURE(errorCode)) { + resetNextCalendarType(); + } + break; + + } else if (value.getType() == URES_TABLE) { + // Iterate over all the skeletons in the 'intervalFormat' table. + ResourceTable skeletonData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; skeletonData.getKeyAndValue(j, key, value); j++) { + if (value.getType() == URES_TABLE) { + // Process the skeleton + processSkeletonTable(key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } + break; + } } } - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t, UErrorCode &errorCode) { - // Check if it's the intervalFormat table - if (U_SUCCESS(errorCode) && uprv_strcmp(key, gIntervalDateTimePatternTag) == 0) { - return &skeletonSink; + /** + * Processes the patterns for a skeleton table + */ + void processSkeletonTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + + // Iterate over all the patterns in the current skeleton table + const char *currentSkeleton = key; + ResourceTable patternData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t k = 0; patternData.getKeyAndValue(k, key, value); k++) { + if (value.getType() == URES_STRING) { + // Process the key + UCalendarDateFields calendarField = validateAndProcessPatternLetter(key); + + // If the calendar field has a valid value + if (calendarField < UCAL_FIELD_COUNT) { + // Set the interval pattern + setIntervalPatternIfAbsent(currentSkeleton, calendarField, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } } - return NULL; } /** @@ -364,6 +318,53 @@ struct DateIntervalSink : public ResourceTableSink { path.extractBetween(PATH_PREFIX_LENGTH, path.length() - PATH_SUFFIX_LENGTH, calendarType); } + /** + * Validates and processes the pattern letter + */ + UCalendarDateFields validateAndProcessPatternLetter(const char *patternLetter) { + // Check that patternLetter is just one letter + char c0; + if ((c0 = patternLetter[0]) != 0 && patternLetter[1] == 0) { + // Check that the pattern letter is accepted + if (c0 == 'y') { + return UCAL_YEAR; + } else if (c0 == 'M') { + return UCAL_MONTH; + } else if (c0 == 'd') { + return UCAL_DATE; + } else if (c0 == 'a') { + return UCAL_AM_PM; + } else if (c0 == 'h' || c0 == 'H') { + return UCAL_HOUR; + } else if (c0 == 'm') { + return UCAL_MINUTE; + }// TODO(ticket:12190): Why icu4c doesn't accept the calendar field "s" but icu4j does? + } + return UCAL_FIELD_COUNT; + } + + /** + * Stores the interval pattern for the current skeleton in the internal data structure + * if it's not present. + */ + void setIntervalPatternIfAbsent(const char *currentSkeleton, UCalendarDateFields lrgDiffCalUnit, + const ResourceValue &value, UErrorCode &errorCode) { + // Check if the pattern has already been stored on the data structure + IntervalPatternIndex index = + dateIntervalInfo.calendarFieldToIntervalIndex(lrgDiffCalUnit, errorCode); + if (U_FAILURE(errorCode)) { return; } + + UnicodeString skeleton(currentSkeleton, -1, US_INV); + UnicodeString* patternsOfOneSkeleton = + (UnicodeString*)(dateIntervalInfo.fIntervalPatterns->get(skeleton)); + + if (patternsOfOneSkeleton == NULL || patternsOfOneSkeleton[index].isEmpty()) { + UnicodeString pattern = value.getUnicodeString(errorCode); + dateIntervalInfo.setIntervalPatternInternally(skeleton, lrgDiffCalUnit, + pattern, errorCode); + } + } + const UnicodeString &getNextCalendarType() { return nextCalendarType; } @@ -371,22 +372,10 @@ struct DateIntervalSink : public ResourceTableSink { void resetNextCalendarType() { nextCalendarType.setToBogus(); } - - - // Output data - DateIntervalInfo &dateIntervalInfo; - - // Next calendar type - UnicodeString nextCalendarType; - - // Current skeleton table being enumerated - const char *currentSkeleton; }; // Virtual destructors must be defined out of line. -DateIntervalSink::SkeletonSink::~SkeletonSink() {} -DateIntervalSink::PatternSink::~PatternSink() {} -DateIntervalSink::~DateIntervalSink() {} +DateIntervalInfo::DateIntervalSink::~DateIntervalSink() {} @@ -472,7 +461,7 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status) sink.resetNextCalendarType(); // Get all resources for this calendar type - ures_getAllTableItemsWithFallback(calBundle, calType, sink, status); + ures_getAllItemsWithFallback(calBundle, calType, sink, status); } } } diff --git a/deps/icu-small/source/i18n/dtptngen.cpp b/deps/icu-small/source/i18n/dtptngen.cpp index 2a6b35b51182cc..17e7ec7cde8a21 100644 --- a/deps/icu-small/source/i18n/dtptngen.cpp +++ b/deps/icu-small/source/i18n/dtptngen.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -31,13 +33,13 @@ #include "cmemory.h" #include "cstring.h" #include "locbased.h" -#include "gregoimp.h" #include "hash.h" #include "uhash.h" #include "uresimp.h" #include "dtptngen_impl.h" #include "ucln_in.h" #include "charstr.h" +#include "uassert.h" #if U_CHARSET_FAMILY==U_EBCDIC_FAMILY /** @@ -221,10 +223,6 @@ static const char* const CLDR_FIELD_NAME[] = { "hour", "minute", "second", "*", "zone" }; -static const char* const Resource_Fields[] = { - "day", "dayperiod", "era", "hour", "minute", "month", "second", "week", - "weekday", "year", "zone", "quarter" }; - // For appendItems static const UChar UDATPG_ItemFormat[]= {0x7B, 0x30, 0x7D, 0x20, 0x251C, 0x7B, 0x32, 0x7D, 0x3A, 0x20, 0x7B, 0x31, 0x7D, 0x2524, 0}; // {0} \u251C{2}: {1}\u2524 @@ -392,12 +390,12 @@ UInitOnce initOnce = U_INITONCE_INITIALIZER; UHashtable *localeToAllowedHourFormatsMap = NULL; // Value deleter for hashmap. -void deleteAllowedHourFormats(void *ptr) { +U_CFUNC void U_CALLCONV deleteAllowedHourFormats(void *ptr) { uprv_free(ptr); } // Close hashmap at cleanup. -UBool allowedHourFormatsCleanup() { +U_CFUNC UBool U_CALLCONV allowedHourFormatsCleanup() { uhash_close(localeToAllowedHourFormatsMap); return TRUE; } @@ -420,11 +418,8 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) { skipMatcher = NULL; fAvailableFormatKeyHash=NULL; - addCanonicalItems(); + addCanonicalItems(status); addICUPatterns(locale, status); - if (U_FAILURE(status)) { - return; - } addCLDRData(locale, status); setDateTimeFromCalendar(locale, status); setDecimalSymbols(locale, status); @@ -434,80 +429,51 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) { namespace { -struct AllowedHourFormatsSink : public ResourceTableSink { +struct AllowedHourFormatsSink : public ResourceSink { // Initialize sub-sinks. - AllowedHourFormatsSink() : localeSink(*this), allowedListSink(*this) {} + AllowedHourFormatsSink() {} virtual ~AllowedHourFormatsSink(); - // Entry point. - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &status) { - if (U_FAILURE(status)) { return NULL; } - - locale = key; - return &localeSink; - } - - struct LocaleSink : public ResourceTableSink { - AllowedHourFormatsSink &outer; - LocaleSink(AllowedHourFormatsSink &outer) : outer(outer) {} - virtual ~LocaleSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &status) { - if (U_FAILURE(status)) { return; } - - if (uprv_strcmp(key, "allowed") == 0) { - outer.allowedFormats = static_cast(uprv_malloc(2 * sizeof(int32_t))); - outer.allowedFormatsLength = 1; - if (outer.allowedFormats == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - outer.allowedFormats[0] = outer.getHourFormatFromUnicodeString( - value.getUnicodeString(status)); - } - } - - virtual ResourceArraySink *getOrCreateArraySink(const char *key, int32_t size, UErrorCode &status) { - if (U_FAILURE(status)) { return NULL; } - - if (uprv_strcmp(key, "allowed") == 0) { - outer.allowedFormats = static_cast(uprv_malloc((size + 1) * sizeof(int32_t))); - outer.allowedFormatsLength = size; - if (outer.allowedFormats == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } else { - return &outer.allowedListSink; + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable timeData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; timeData.getKeyAndValue(i, key, value); ++i) { + const char *regionOrLocale = key; + ResourceTable formatList = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; formatList.getKeyAndValue(j, key, value); ++j) { + if (uprv_strcmp(key, "allowed") == 0) { // Ignore "preferred" list. + LocalMemory list; + int32_t length; + if (value.getType() == URES_STRING) { + if (list.allocateInsteadAndReset(2) == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + list[0] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode)); + length = 1; + } + else { + ResourceArray allowedFormats = value.getArray(errorCode); + length = allowedFormats.getSize(); + if (list.allocateInsteadAndReset(length + 1) == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + for (int32_t k = 0; k < length; ++k) { + allowedFormats.getValue(k, value); + list[k] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode)); + } + } + list[length] = ALLOWED_HOUR_FORMAT_UNKNOWN; + uhash_put(localeToAllowedHourFormatsMap, + const_cast(regionOrLocale), list.orphan(), &errorCode); + if (U_FAILURE(errorCode)) { return; } } } - return NULL; - } - - virtual void leave(UErrorCode &status) { - if (U_FAILURE(status) || outer.allowedFormats == NULL) { return; } - - outer.allowedFormats[outer.allowedFormatsLength] = ALLOWED_HOUR_FORMAT_UNKNOWN; - uhash_put(localeToAllowedHourFormatsMap, const_cast(outer.locale), outer.allowedFormats, &status); - outer.allowedFormats = NULL; } - } localeSink; - - struct AllowedListSink : public ResourceArraySink { - AllowedHourFormatsSink &outer; - AllowedListSink(AllowedHourFormatsSink &outer) : outer(outer) {} - virtual ~AllowedListSink(); - - virtual void put(int32_t index, const ResourceValue &value, UErrorCode &status) { - if (U_FAILURE(status)) { return; } - - outer.allowedFormats[index] = outer.getHourFormatFromUnicodeString( - value.getUnicodeString(status)); - } - } allowedListSink; - - const char *locale; - int32_t *allowedFormats; - int32_t allowedFormatsLength; + } AllowedHourFormat getHourFormatFromUnicodeString(UnicodeString s) { if (s.length() == 1) { @@ -527,10 +493,8 @@ struct AllowedHourFormatsSink : public ResourceTableSink { } // namespace AllowedHourFormatsSink::~AllowedHourFormatsSink() {} -AllowedHourFormatsSink::LocaleSink::~LocaleSink() {} -AllowedHourFormatsSink::AllowedListSink::~AllowedListSink() {} -void DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { +U_CFUNC void U_CALLCONV DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { if (U_FAILURE(status)) { return; } localeToAllowedHourFormatsMap = uhash_open( uhash_hashChars, uhash_compareChars, NULL, &status); @@ -544,14 +508,13 @@ void DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { // into the hashmap, store 6 single-value sub-arrays right at the beginning of the // vector (at index enum*2) for easy data sharing, copy sub-arrays into runtime // object. Remember to clean up the vector, too. - ures_getAllTableItemsWithFallback(rb.getAlias(), "timeData", sink, status); + ures_getAllItemsWithFallback(rb.getAlias(), "timeData", sink, status); ucln_i18n_registerCleanup(UCLN_I18N_ALLOWED_HOUR_FORMATS, allowedHourFormatsCleanup); } void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErrorCode &status) { if (U_FAILURE(status)) { return; } - const char *localeID = locale.getName(); char maxLocaleID[ULOC_FULLNAME_CAPACITY]; int32_t length = uloc_addLikelySubtags(localeID, maxLocaleID, ULOC_FULLNAME_CAPACITY, &status); @@ -632,41 +595,38 @@ DateTimePatternGenerator::staticGetBaseSkeleton( void DateTimePatternGenerator::addICUPatterns(const Locale& locale, UErrorCode& status) { + if (U_FAILURE(status)) { return; } UnicodeString dfPattern; UnicodeString conflictingString; DateFormat* df; - if (U_FAILURE(status)) { - return; - } - // Load with ICU patterns for (int32_t i=DateFormat::kFull; i<=DateFormat::kShort; i++) { DateFormat::EStyle style = (DateFormat::EStyle)i; df = DateFormat::createDateInstance(style, locale); SimpleDateFormat* sdf; if (df != NULL && (sdf = dynamic_cast(df)) != NULL) { - addPattern(sdf->toPattern(dfPattern), FALSE, conflictingString, status); + sdf->toPattern(dfPattern); + addPattern(dfPattern, FALSE, conflictingString, status); } // TODO Maybe we should return an error when the date format isn't simple. delete df; - if (U_FAILURE(status)) { - return; - } + if (U_FAILURE(status)) { return; } df = DateFormat::createTimeInstance(style, locale); if (df != NULL && (sdf = dynamic_cast(df)) != NULL) { - addPattern(sdf->toPattern(dfPattern), FALSE, conflictingString, status); - // HACK for hh:ss - if ( i==DateFormat::kMedium ) { - hackPattern = dfPattern; + sdf->toPattern(dfPattern); + addPattern(dfPattern, FALSE, conflictingString, status); + + // TODO: C++ and Java are inconsistent (see #12568). + // C++ uses MEDIUM, but Java uses SHORT. + if ( i==DateFormat::kShort && !dfPattern.isEmpty() ) { + consumeShortTimePattern(dfPattern, status); } } // TODO Maybe we should return an error when the date format isn't simple. delete df; - if (U_FAILURE(status)) { - return; - } + if (U_FAILURE(status)) { return; } } } @@ -721,221 +681,223 @@ DateTimePatternGenerator::hackTimes(const UnicodeString& hackPattern, UErrorCode static const UChar hourFormatChars[] = { CAP_H, LOW_H, CAP_K, LOW_K, 0 }; // HhKk, the hour format characters void -DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& err) { - UResourceBundle *rb, *calTypeBundle, *calBundle; - UResourceBundle *patBundle, *fieldBundle, *fBundle; - UnicodeString rbPattern, value, field; - UnicodeString conflictingPattern; - const char *key=NULL; - int32_t i; - - UnicodeString defaultItemFormat(TRUE, UDATPG_ItemFormat, UPRV_LENGTHOF(UDATPG_ItemFormat)-1); // Read-only alias. - - err = U_ZERO_ERROR; - - fDefaultHourFormatChar = 0; - for (i=0; i0) { - hackTimes(hackPattern, err); - } +// Virtual destructors must be defined out of line. +DateTimePatternGenerator::AppendItemFormatsSink::~AppendItemFormatsSink() {} +DateTimePatternGenerator::AppendItemNamesSink::~AppendItemNamesSink() {} +DateTimePatternGenerator::AvailableFormatsSink::~AvailableFormatsSink() {} + +void +DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& errorCode) { + if (U_FAILURE(errorCode)) { return; } + UnicodeString rbPattern, value, field; + CharString path; + + LocalUResourceBundlePointer rb(ures_open(NULL, locale.getName(), &errorCode)); + if (U_FAILURE(errorCode)) { return; } + + CharString calendarTypeToUse; // to be filled in with the type to use, if all goes well + getCalendarTypeToUse(locale, calendarTypeToUse, errorCode); + if (U_FAILURE(errorCode)) { return; } + + // Local err to ignore resource not found exceptions + UErrorCode err = U_ZERO_ERROR; + + // Load append item formats. + AppendItemFormatsSink appendItemFormatsSink(*this); + path.clear() + .append(DT_DateTimeCalendarTag, errorCode) + .append('/', errorCode) + .append(calendarTypeToUse, errorCode) + .append('/', errorCode) + .append(DT_DateTimeAppendItemsTag, errorCode); // i.e., calendar/xxx/appendItems + if (U_FAILURE(errorCode)) { return; } + ures_getAllItemsWithFallback(rb.getAlias(), path.data(), appendItemFormatsSink, err); + appendItemFormatsSink.fillInMissing(); + + // Load CLDR item names. + err = U_ZERO_ERROR; + AppendItemNamesSink appendItemNamesSink(*this); + ures_getAllItemsWithFallback(rb.getAlias(), DT_DateTimeFieldsTag, appendItemNamesSink, err); + appendItemNamesSink.fillInMissing(); + + // Load the available formats from CLDR. + err = U_ZERO_ERROR; + initHashtable(errorCode); + if (U_FAILURE(errorCode)) { return; } + AvailableFormatsSink availableFormatsSink(*this); + path.clear() + .append(DT_DateTimeCalendarTag, errorCode) + .append('/', errorCode) + .append(calendarTypeToUse, errorCode) + .append('/', errorCode) + .append(DT_DateTimeAvailableFormatsTag, errorCode); // i.e., calendar/xxx/availableFormats + if (U_FAILURE(errorCode)) { return; } + ures_getAllItemsWithFallback(rb.getAlias(), path.data(), availableFormatsSink, err); } void @@ -949,7 +911,6 @@ DateTimePatternGenerator::initHashtable(UErrorCode& err) { } } - void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value) { appendItemFormats[field] = value; @@ -970,7 +931,12 @@ DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const U } const UnicodeString& -DateTimePatternGenerator:: getAppendItemName(UDateTimePatternField field) const { +DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const { + return appendItemNames[field]; +} + +UnicodeString& +DateTimePatternGenerator::getMutableAppendItemName(UDateTimePatternField field) { return appendItemNames[field]; } @@ -1096,12 +1062,15 @@ DateTimePatternGenerator::getDecimal() const { } void -DateTimePatternGenerator::addCanonicalItems() { +DateTimePatternGenerator::addCanonicalItems(UErrorCode& status) { + if (U_FAILURE(status)) { return; } UnicodeString conflictingPattern; - UErrorCode status = U_ZERO_ERROR; for (int32_t i=0; i 0) { + addPattern(UnicodeString(Canonical_Items[i]), FALSE, conflictingPattern, status); + } + if (U_FAILURE(status)) { return; } } } @@ -1123,16 +1092,35 @@ DateTimePatternGenerator::setDateTimeFromCalendar(const Locale& locale, UErrorCo int32_t resStrLen = 0; Calendar* fCalendar = Calendar::createInstance(locale, status); - CalendarData calData(locale, fCalendar?fCalendar->getType():NULL, status); - UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag, status); - if (U_FAILURE(status)) return; + if (U_FAILURE(status)) { return; } + + LocalUResourceBundlePointer calData(ures_open(NULL, locale.getBaseName(), &status)); + ures_getByKey(calData.getAlias(), DT_DateTimeCalendarTag, calData.getAlias(), &status); - if (ures_getSize(dateTimePatterns) <= DateFormat::kDateTime) + LocalUResourceBundlePointer dateTimePatterns; + if (fCalendar != NULL && fCalendar->getType() != NULL && *fCalendar->getType() != '\0' + && uprv_strcmp(fCalendar->getType(), DT_DateTimeGregorianTag) != 0) { + dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), fCalendar->getType(), + NULL, &status)); + ures_getByKeyWithFallback(dateTimePatterns.getAlias(), DT_DateTimePatternsTag, + dateTimePatterns.getAlias(), &status); + } + + if (dateTimePatterns.isNull() || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), DT_DateTimeGregorianTag, + dateTimePatterns.orphan(), &status)); + ures_getByKeyWithFallback(dateTimePatterns.getAlias(), DT_DateTimePatternsTag, + dateTimePatterns.getAlias(), &status); + } + if (U_FAILURE(status)) { return; } + + if (ures_getSize(dateTimePatterns.getAlias()) <= DateFormat::kDateTime) { status = U_INVALID_FORMAT_ERROR; return; } - resStr = ures_getStringByIndex(dateTimePatterns, (int32_t)DateFormat::kDateTime, &resStrLen, &status); + resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), (int32_t)DateFormat::kDateTime, &resStrLen, &status); setDateTimeFormat(UnicodeString(TRUE, resStr, resStrLen)); delete fCalendar; @@ -1324,8 +1312,8 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, } if ((flags & kDTPGFixFractionalSeconds) != 0 && typeValue == UDATPG_SECOND_FIELD) { - UnicodeString newField=dtMatcher->skeleton.original[UDATPG_FRACTIONAL_SECOND_FIELD]; - field = field + decimal + newField; + field += decimal; + dtMatcher->skeleton.original.appendFieldTo(UDATPG_FRACTIONAL_SECOND_FIELD, field); } else if (dtMatcher->skeleton.type[typeValue]!=0) { // Here: // - "reqField" is the field from the originally requested skeleton, with length @@ -1349,9 +1337,9 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, // a) The length of the field in the skeleton (skelFieldLen) is equal to reqFieldLen. // b) The pattern field is numeric and the skeleton field is not, or vice versa. - UnicodeString reqField = dtMatcher->skeleton.original[typeValue]; - int32_t reqFieldLen = reqField.length(); - if (reqField.charAt(0) == CAP_E && reqFieldLen < 3) + UChar reqFieldChar = dtMatcher->skeleton.original.getFieldChar(typeValue); + int32_t reqFieldLen = dtMatcher->skeleton.original.getFieldLength(typeValue); + if (reqFieldChar == CAP_E && reqFieldLen < 3) reqFieldLen = 3; // 1-3 for E are equivalent to 3 for c,e int32_t adjFieldLen = reqFieldLen; if ( (typeValue==UDATPG_HOUR_FIELD && (options & UDATPG_MATCH_HOUR_FIELD_LENGTH)==0) || @@ -1359,8 +1347,7 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, (typeValue==UDATPG_SECOND_FIELD && (options & UDATPG_MATCH_SECOND_FIELD_LENGTH)==0) ) { adjFieldLen = field.length(); } else if (specifiedSkeleton) { - UnicodeString skelField = specifiedSkeleton->original[typeValue]; - int32_t skelFieldLen = skelField.length(); + int32_t skelFieldLen = specifiedSkeleton->original.getFieldLength(typeValue); UBool patFieldIsNumeric = (row->type > 0); UBool skelFieldIsNumeric = (specifiedSkeleton->type[typeValue] > 0); if (skelFieldLen == reqFieldLen || (patFieldIsNumeric && !skelFieldIsNumeric) || (skelFieldIsNumeric && !patFieldIsNumeric)) { @@ -1368,9 +1355,12 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, adjFieldLen = field.length(); } } - UChar c = (typeValue!= UDATPG_HOUR_FIELD && typeValue!= UDATPG_MONTH_FIELD && - typeValue!= UDATPG_WEEKDAY_FIELD && (typeValue!= UDATPG_YEAR_FIELD || reqField.charAt(0)==CAP_Y))? - reqField.charAt(0): field.charAt(0); + UChar c = (typeValue!= UDATPG_HOUR_FIELD + && typeValue!= UDATPG_MONTH_FIELD + && typeValue!= UDATPG_WEEKDAY_FIELD + && (typeValue!= UDATPG_YEAR_FIELD || reqFieldChar==CAP_Y)) + ? reqFieldChar + : field.charAt(0); if (typeValue == UDATPG_HOUR_FIELD && (flags & kDTPGSkeletonUsesCapJ) != 0) { c = fDefaultHourFormatChar; } @@ -1733,36 +1723,19 @@ PatternMap::getPatternFromSkeleton(PtnSkeleton& skeleton, const PtnSkeleton** sp } // find boot entry - UChar baseChar='\0'; - for (int32_t i=0; iskeleton->original[i].compare(skeleton.original[i]) != 0 ) - { - break; - } - } + equal = curElem->skeleton->original == skeleton.original; } else { // called from DateTimePatternGenerator::getRedundants, use baseOriginal - for (i=0; iskeleton->baseOriginal[i].compare(skeleton.baseOriginal[i]) != 0 ) - { - break; - } - } + equal = curElem->skeleton->baseOriginal == skeleton.baseOriginal; } - if (i == UDATPG_FIELD_COUNT) { + if (equal) { if (specifiedSkeletonPtr && curElem->skeletonWasSpecified) { *specifiedSkeletonPtr = curElem->skeleton; } @@ -1866,37 +1839,35 @@ void DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeletonResult) { int32_t i; for (i=0; iset(pattern); for (i=0; i < fp->itemNumber; i++) { - UnicodeString field = fp->items[i]; - if ( field.charAt(0) == LOW_A ) { + const UnicodeString& value = fp->items[i]; + if ( value.charAt(0) == LOW_A ) { continue; // skip 'a' } - if ( fp->isQuoteLiteral(field) ) { + if ( fp->isQuoteLiteral(value) ) { UnicodeString quoteLiteral; fp->getQuoteLiteral(quoteLiteral, &i); continue; } - int32_t canonicalIndex = fp->getCanonicalIndex(field); + int32_t canonicalIndex = fp->getCanonicalIndex(value); if (canonicalIndex < 0 ) { continue; } const dtTypeElem *row = &dtTypes[canonicalIndex]; - int32_t typeValue = row->field; - skeletonResult.original[typeValue]=field; + int32_t field = row->field; + skeletonResult.original.populate(field, value); UChar repeatChar = row->patternChar; int32_t repeatCount = row->minLen; // #7930 removes cap at 3 - while (repeatCount-- > 0) { - skeletonResult.baseOriginal[typeValue] += repeatChar; - } - int16_t subTypeValue = row->type; + skeletonResult.baseOriginal.populate(field, repeatChar, repeatCount); + int16_t subField = row->type; if ( row->type > 0) { - subTypeValue += field.length(); + subField += value.length(); } - skeletonResult.type[typeValue] = subTypeValue; + skeletonResult.type[field] = subField; } copyFrom(skeletonResult); } @@ -1904,23 +1875,13 @@ DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton void DateTimeMatcher::getBasePattern(UnicodeString &result ) { result.remove(); // Reset the result first. - for (int32_t i=0; iskeleton.type[i]=newSkeleton.type[i]; - this->skeleton.original[i]=newSkeleton.original[i]; - this->skeleton.baseOriginal[i]=newSkeleton.baseOriginal[i]; - } + skeleton.copyFrom(newSkeleton); } void DateTimeMatcher::copyFrom() { // same as clear - for (int32_t i=0; iskeleton.type[i]=0; - this->skeleton.original[i].remove(); - this->skeleton.baseOriginal[i].remove(); - } + skeleton.clear(); } UBool DateTimeMatcher::equals(const DateTimeMatcher* other) const { - if (other==NULL) { - return FALSE; - } - for (int32_t i=0; iskeleton.original[i]!=other->skeleton.original[i] ) { - return FALSE; - } - } - return TRUE; + if (other==NULL) { return FALSE; } + return skeleton.original == other->skeleton.original; } int32_t @@ -2074,7 +2020,7 @@ FormatParser::getCanonicalIndex(const UnicodeString& s, UBool strict) { } int32_t i = 0; int32_t bestRow = -1; - while (dtTypes[i].patternChar != '\0') { + while (dtTypes[i].patternChar != 0x0000) { if ( dtTypes[i].patternChar != ch ) { ++i; continue; @@ -2246,52 +2192,116 @@ PatternMapIterator::next() { return *matcher; } -PtnSkeleton::PtnSkeleton() { + +SkeletonFields::SkeletonFields() { + // Set initial values to zero + clear(); } +void SkeletonFields::clear() { + uprv_memset(chars, 0, sizeof(chars)); + uprv_memset(lengths, 0, sizeof(lengths)); +} -PtnSkeleton::PtnSkeleton(const PtnSkeleton& other) { - for (int32_t i=0; itype[i]=other.type[i]; - this->original[i]=other.original[i]; - this->baseOriginal[i]=other.baseOriginal[i]; +void SkeletonFields::copyFrom(const SkeletonFields& other) { + uprv_memcpy(chars, other.chars, sizeof(chars)); + uprv_memcpy(lengths, other.lengths, sizeof(lengths)); +} + +void SkeletonFields::clearField(int32_t field) { + chars[field] = 0; + lengths[field] = 0; +} + +UChar SkeletonFields::getFieldChar(int32_t field) const { + return chars[field]; +} + +int32_t SkeletonFields::getFieldLength(int32_t field) const { + return lengths[field]; +} + +void SkeletonFields::populate(int32_t field, const UnicodeString& value) { + populate(field, value.charAt(0), value.length()); +} + +void SkeletonFields::populate(int32_t field, UChar ch, int32_t length) { + chars[field] = (int8_t) ch; + lengths[field] = (int8_t) length; +} + +UBool SkeletonFields::isFieldEmpty(int32_t field) const { + return lengths[field] == 0; +} + +UnicodeString& SkeletonFields::appendTo(UnicodeString& string) const { + for (int32_t i = 0; i < UDATPG_FIELD_COUNT; ++i) { + appendFieldTo(i, string); } + return string; } -UBool -PtnSkeleton::equals(const PtnSkeleton& other) { - for (int32_t i=0; istackDecimalNum)) { delete fDecimalNum; @@ -370,7 +372,7 @@ Formattable::clone() const { } // ------------------------------------- -// Gets the data type of this Formattable object. +// Gets the data type of this Formattable object. Formattable::Type Formattable::getType() const { @@ -397,9 +399,9 @@ Formattable::getLong(UErrorCode& status) const if (U_FAILURE(status)) { return 0; } - + switch (fType) { - case Formattable::kLong: + case Formattable::kLong: return (int32_t)fValue.fInt64; case Formattable::kInt64: if (fValue.fInt64 > INT32_MAX) { @@ -451,10 +453,10 @@ Formattable::getInt64(UErrorCode& status) const if (U_FAILURE(status)) { return 0; } - + switch (fType) { - case Formattable::kLong: - case Formattable::kInt64: + case Formattable::kLong: + case Formattable::kInt64: return fValue.fInt64; case Formattable::kDouble: if (fValue.fDouble > (double)U_INT64_MAX) { @@ -473,7 +475,7 @@ Formattable::getInt64(UErrorCode& status) const } } else { return (int64_t)fValue.fDouble; - } + } case Formattable::kObject: if (fValue.fObject == NULL) { status = U_MEMORY_ALLOCATION_ERROR; @@ -497,9 +499,9 @@ Formattable::getDouble(UErrorCode& status) const if (U_FAILURE(status)) { return 0; } - + switch (fType) { - case Formattable::kLong: + case Formattable::kLong: case Formattable::kInt64: // loses precision return (double)fValue.fInt64; case Formattable::kDouble: @@ -624,8 +626,8 @@ Formattable::adoptObject(UObject* objectToAdopt) { } // ------------------------------------- -UnicodeString& -Formattable::getString(UnicodeString& result, UErrorCode& status) const +UnicodeString& +Formattable::getString(UnicodeString& result, UErrorCode& status) const { if (fType != kString) { setError(status, U_INVALID_FORMAT_ERROR); @@ -641,8 +643,8 @@ Formattable::getString(UnicodeString& result, UErrorCode& status) const } // ------------------------------------- -const UnicodeString& -Formattable::getString(UErrorCode& status) const +const UnicodeString& +Formattable::getString(UErrorCode& status) const { if (fType != kString) { setError(status, U_INVALID_FORMAT_ERROR); @@ -656,30 +658,30 @@ Formattable::getString(UErrorCode& status) const } // ------------------------------------- -UnicodeString& -Formattable::getString(UErrorCode& status) +UnicodeString& +Formattable::getString(UErrorCode& status) { if (fType != kString) { setError(status, U_INVALID_FORMAT_ERROR); return *getBogus(); } if (fValue.fString == NULL) { - setError(status, U_MEMORY_ALLOCATION_ERROR); - return *getBogus(); + setError(status, U_MEMORY_ALLOCATION_ERROR); + return *getBogus(); } return *fValue.fString; } // ------------------------------------- -const Formattable* -Formattable::getArray(int32_t& count, UErrorCode& status) const +const Formattable* +Formattable::getArray(int32_t& count, UErrorCode& status) const { if (fType != kArray) { setError(status, U_INVALID_FORMAT_ERROR); count = 0; return NULL; } - count = fValue.fArrayAndCount.fCount; + count = fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; } @@ -687,7 +689,7 @@ Formattable::getArray(int32_t& count, UErrorCode& status) const // Gets the bogus string, ensures mondo bogosity. UnicodeString* -Formattable::getBogus() const +Formattable::getBogus() const { return (UnicodeString*)&fBogus; /* cast away const :-( */ } @@ -796,7 +798,7 @@ Formattable::adoptDigitList(DigitList *dl) { // --------------------------------------- void -Formattable::setDecimalNumber(const StringPiece &numberString, UErrorCode &status) { +Formattable::setDecimalNumber(StringPiece numberString, UErrorCode &status) { if (U_FAILURE(status)) { return; } @@ -852,7 +854,7 @@ FormattableStreamer::streamOut(ostream& stream, const Formattable& obj) UnicodeString buffer; switch(obj.getType()) { - case Formattable::kDate : + case Formattable::kDate : // Creates a DateFormat instance for formatting the // Date instance. if (defDateFormat == 0) { diff --git a/deps/icu-small/source/i18n/fmtable_cnv.cpp b/deps/icu-small/source/i18n/fmtable_cnv.cpp index 8e9645402e5992..ff4deae92d2a2f 100644 --- a/deps/icu-small/source/i18n/fmtable_cnv.cpp +++ b/deps/icu-small/source/i18n/fmtable_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2010, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/fmtableimp.h b/deps/icu-small/source/i18n/fmtableimp.h index c3f62a85024a72..7003a184f95e32 100644 --- a/deps/icu-small/source/i18n/fmtableimp.h +++ b/deps/icu-small/source/i18n/fmtableimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines Corporation and * @@ -22,7 +24,7 @@ struct FmtStackData { // 192 total }; -/** +/** * Maximum int64_t value that can be stored in a double without chancing losing precision. * IEEE doubles have 53 bits of mantissa, 10 bits exponent, 1 bit sign. * IBM Mainframes have 56 bits of mantissa, 7 bits of base 16 exponent, 1 bit sign. diff --git a/deps/icu-small/source/i18n/format.cpp b/deps/icu-small/source/i18n/format.cpp index e369e4021a7793..e951b3082ed077 100644 --- a/deps/icu-small/source/i18n/format.cpp +++ b/deps/icu-small/source/i18n/format.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2012, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/fphdlimp.cpp b/deps/icu-small/source/i18n/fphdlimp.cpp index a8fa6f46e60025..6a004a6685296c 100644 --- a/deps/icu-small/source/i18n/fphdlimp.cpp +++ b/deps/icu-small/source/i18n/fphdlimp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/fphdlimp.h b/deps/icu-small/source/i18n/fphdlimp.h index 6071580b7ff425..b1fe42bb40fa57 100644 --- a/deps/icu-small/source/i18n/fphdlimp.h +++ b/deps/icu-small/source/i18n/fphdlimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2015, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/fpositer.cpp b/deps/icu-small/source/i18n/fpositer.cpp index f7d54deb8bf087..eb405f9c348ccf 100644 --- a/deps/icu-small/source/i18n/fpositer.cpp +++ b/deps/icu-small/source/i18n/fpositer.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2009-2012, International Business Machines Corporation and @@ -60,7 +62,10 @@ void FieldPositionIterator::setData(UVector32 *adopt, UErrorCode& status) { // Verify that adopt has valid data, and update status if it doesn't. if (U_SUCCESS(status)) { if (adopt) { - if ((adopt->size() % 3) != 0) { + if (adopt->size() == 0) { + delete adopt; + adopt = NULL; + } else if ((adopt->size() % 3) != 0) { status = U_ILLEGAL_ARGUMENT_ERROR; } else { for (int i = 1; i < adopt->size(); i += 3) { @@ -104,3 +109,4 @@ UBool FieldPositionIterator::next(FieldPosition& fp) { U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/i18n/funcrepl.cpp b/deps/icu-small/source/i18n/funcrepl.cpp index 7ad5fc20bf5172..4af889d3abac55 100644 --- a/deps/icu-small/source/i18n/funcrepl.cpp +++ b/deps/icu-small/source/i18n/funcrepl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2012, International Business Machines Corporation @@ -68,7 +70,7 @@ UnicodeFunctor* FunctionReplacer::clone() const { UnicodeReplacer* FunctionReplacer::toReplacer() const { FunctionReplacer *nonconst_this = const_cast(this); UnicodeReplacer *nonconst_base = static_cast(nonconst_this); - + return nonconst_base; } diff --git a/deps/icu-small/source/i18n/funcrepl.h b/deps/icu-small/source/i18n/funcrepl.h index ff00b55abfbb52..954150cf002c40 100644 --- a/deps/icu-small/source/i18n/funcrepl.h +++ b/deps/icu-small/source/i18n/funcrepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/gender.cpp b/deps/icu-small/source/i18n/gender.cpp index 0c2fca576f2982..e830f893ec62b2 100644 --- a/deps/icu-small/source/i18n/gender.cpp +++ b/deps/icu-small/source/i18n/gender.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2013, International Business Machines Corporation and @@ -163,7 +165,7 @@ const GenderInfo* GenderInfo::loadInstance(const Locale& locale, UErrorCode& sta return &gObjs[NEUTRAL]; } if (uprv_strcmp(type_str, gMixedNeutralStr) == 0) { - return &gObjs[MIXED_NEUTRAL]; + return &gObjs[MIXED_NEUTRAL]; } if (uprv_strcmp(type_str, gMailTaintsStr) == 0) { return &gObjs[MALE_TAINTS]; diff --git a/deps/icu-small/source/i18n/gregocal.cpp b/deps/icu-small/source/i18n/gregocal.cpp index b8bd8e293de9ce..11082223c7e1ce 100644 --- a/deps/icu-small/source/i18n/gregocal.cpp +++ b/deps/icu-small/source/i18n/gregocal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and @@ -25,7 +27,7 @@ * add() from Java source. * 07/28/98 stephen Sync up with JDK 1.2 * 09/14/98 stephen Changed type of kOneDay, kOneWeek to double. -* Fixed bug in roll() +* Fixed bug in roll() * 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation. * 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD. * {JDK bug 4210209 4209272} @@ -103,7 +105,7 @@ static const int32_t kGregorianCalendarLimits[UCAL_FIELD_COUNT][4] = { /* *
      -*                            Greatest       Least
      +*                            Greatest       Least 
       * Field name        Minimum   Minimum     Maximum     Maximum
       * ----------        -------   -------     -------     -------
       * ERA                     0         0           1           1
      @@ -319,7 +321,7 @@ UBool GregorianCalendar::isEquivalentTo(const Calendar& other) const
       void
       GregorianCalendar::setGregorianChange(UDate date, UErrorCode& status)
       {
      -    if (U_FAILURE(status))
      +    if (U_FAILURE(status)) 
               return;
       
           fGregorianCutover = date;
      @@ -356,7 +358,7 @@ GregorianCalendar::setGregorianChange(UDate date, UErrorCode& status)
               return;
           cal->setTime(date, status);
           fGregorianCutoverYear = cal->get(UCAL_YEAR, status);
      -    if (cal->get(UCAL_ERA, status) == BC)
      +    if (cal->get(UCAL_ERA, status) == BC) 
               fGregorianCutoverYear = 1 - fGregorianCutoverYear;
           fCutoverJulianDay = cutoverDay;
           delete cal;
      @@ -367,12 +369,12 @@ void GregorianCalendar::handleComputeFields(int32_t julianDay, UErrorCode& statu
           int32_t eyear, month, dayOfMonth, dayOfYear, unusedRemainder;
       
       
      -    if(U_FAILURE(status)) {
      -        return;
      +    if(U_FAILURE(status)) { 
      +        return; 
           }
       
       #if defined (U_DEBUG_CAL)
      -    fprintf(stderr, "%s:%d: jd%d- (greg's %d)- [cut=%d]\n",
      +    fprintf(stderr, "%s:%d: jd%d- (greg's %d)- [cut=%d]\n", 
               __FILE__, __LINE__, julianDay, getGregorianDayOfYear(), fCutoverJulianDay);
       #endif
       
      @@ -411,11 +413,11 @@ void GregorianCalendar::handleComputeFields(int32_t julianDay, UErrorCode& statu
               ++dayOfYear;
       #if defined (U_DEBUG_CAL)
               //     fprintf(stderr, "%d - %d[%d] + 1\n", dayOfYear, isLeap?kLeapNumDays[month]:kNumDays[month], month );
      -        //           fprintf(stderr, "%s:%d:  greg's HCF %d -> %d/%d/%d not %d/%d/%d\n",
      +        //           fprintf(stderr, "%s:%d:  greg's HCF %d -> %d/%d/%d not %d/%d/%d\n", 
               //                   __FILE__, __LINE__,julianDay,
               //          eyear,month,dayOfMonth,
               //          getGregorianYear(), getGregorianMonth(), getGregorianDayOfMonth()  );
      -        fprintf(stderr, "%s:%d: doy %d (greg's %d)- [cut=%d]\n",
      +        fprintf(stderr, "%s:%d: doy %d (greg's %d)- [cut=%d]\n", 
                   __FILE__, __LINE__, dayOfYear, getGregorianDayOfYear(), fCutoverJulianDay);
       #endif
       
      @@ -456,7 +458,7 @@ GregorianCalendar::getGregorianChange() const
       
       // -------------------------------------
       
      -UBool
      +UBool 
       GregorianCalendar::isLeapYear(int32_t year) const
       {
           // MSVC complains bitterly if we try to use Grego::isLeapYear here
      @@ -468,15 +470,15 @@ GregorianCalendar::isLeapYear(int32_t year) const
       
       // -------------------------------------
       
      -int32_t GregorianCalendar::handleComputeJulianDay(UCalendarDateFields bestField)
      +int32_t GregorianCalendar::handleComputeJulianDay(UCalendarDateFields bestField) 
       {
           fInvertGregorian = FALSE;
       
           int32_t jd = Calendar::handleComputeJulianDay(bestField);
       
           if((bestField == UCAL_WEEK_OF_YEAR) &&  // if we are doing WOY calculations, we are counting relative to Jan 1 *julian*
      -        (internalGet(UCAL_EXTENDED_YEAR)==fGregorianCutoverYear) &&
      -        jd >= fCutoverJulianDay) {
      +        (internalGet(UCAL_EXTENDED_YEAR)==fGregorianCutoverYear) && 
      +        jd >= fCutoverJulianDay) { 
                   fInvertGregorian = TRUE;  // So that the Julian Jan 1 will be used in handleComputeMonthStart
                   return Calendar::handleComputeJulianDay(bestField);
               }
      @@ -487,20 +489,20 @@ int32_t GregorianCalendar::handleComputeJulianDay(UCalendarDateFields bestField)
               //if ((fIsGregorian==TRUE) != (jd >= fCutoverJulianDay)) {  /*  cutoverJulianDay)) { */
               if ((fIsGregorian==TRUE) != (jd >= fCutoverJulianDay)) {  /*  cutoverJulianDay)) { */
       #if defined (U_DEBUG_CAL)
      -            fprintf(stderr, "%s:%d: jd [invert] %d\n",
      +            fprintf(stderr, "%s:%d: jd [invert] %d\n", 
                       __FILE__, __LINE__, jd);
       #endif
                   fInvertGregorian = TRUE;
                   jd = Calendar::handleComputeJulianDay(bestField);
       #if defined (U_DEBUG_CAL)
      -            fprintf(stderr, "%s:%d:  fIsGregorian %s, fInvertGregorian %s - ",
      +            fprintf(stderr, "%s:%d:  fIsGregorian %s, fInvertGregorian %s - ", 
                       __FILE__, __LINE__,fIsGregorian?"T":"F", fInvertGregorian?"T":"F");
      -            fprintf(stderr, " jd NOW %d\n",
      +            fprintf(stderr, " jd NOW %d\n", 
                       jd);
       #endif
               } else {
       #if defined (U_DEBUG_CAL)
      -            fprintf(stderr, "%s:%d: jd [==] %d - %sfIsGregorian %sfInvertGregorian, %d\n",
      +            fprintf(stderr, "%s:%d: jd [==] %d - %sfIsGregorian %sfInvertGregorian, %d\n", 
                       __FILE__, __LINE__, jd, fIsGregorian?"T":"F", fInvertGregorian?"T":"F", bestField);
       #endif
               }
      @@ -509,14 +511,14 @@ int32_t GregorianCalendar::handleComputeJulianDay(UCalendarDateFields bestField)
                   int32_t gregShift = Grego::gregorianShift(internalGet(UCAL_EXTENDED_YEAR));
                   if (bestField == UCAL_DAY_OF_YEAR) {
       #if defined (U_DEBUG_CAL)
      -                fprintf(stderr, "%s:%d: [DOY%d] gregorian shift of JD %d += %d\n",
      +                fprintf(stderr, "%s:%d: [DOY%d] gregorian shift of JD %d += %d\n", 
                           __FILE__, __LINE__, fFields[bestField],jd, gregShift);
       #endif
                       jd -= gregShift;
                   } else if ( bestField == UCAL_WEEK_OF_MONTH ) {
                       int32_t weekShift = 14;
       #if defined (U_DEBUG_CAL)
      -                fprintf(stderr, "%s:%d: [WOY/WOM] gregorian week shift of %d += %d\n",
      +                fprintf(stderr, "%s:%d: [WOY/WOM] gregorian week shift of %d += %d\n", 
                           __FILE__, __LINE__, jd, weekShift);
       #endif
                       jd += weekShift; // shift by weeks for week based fields.
      @@ -544,7 +546,7 @@ int32_t GregorianCalendar::handleComputeMonthStart(int32_t eyear, int32_t month,
       
           nonConstThis->fIsGregorian = (eyear >= fGregorianCutoverYear);
       #if defined (U_DEBUG_CAL)
      -    fprintf(stderr, "%s:%d: (hcms%d/%d) fIsGregorian %s, fInvertGregorian %s\n",
      +    fprintf(stderr, "%s:%d: (hcms%d/%d) fIsGregorian %s, fInvertGregorian %s\n", 
               __FILE__, __LINE__, eyear,month, fIsGregorian?"T":"F", fInvertGregorian?"T":"F");
       #endif
           if (fInvertGregorian) {
      @@ -556,7 +558,7 @@ int32_t GregorianCalendar::handleComputeMonthStart(int32_t eyear, int32_t month,
               // Julian calendar
               int32_t gregShift = Grego::gregorianShift(eyear);
       #if defined (U_DEBUG_CAL)
      -        fprintf(stderr, "%s:%d: (hcms%d/%d) gregorian shift of %d += %d\n",
      +        fprintf(stderr, "%s:%d: (hcms%d/%d) gregorian shift of %d += %d\n", 
                   __FILE__, __LINE__, eyear, month, julianDay, gregShift);
       #endif
               julianDay += gregShift;
      @@ -628,12 +630,12 @@ GregorianCalendar::yearLength() const
       * 3, we want it to go to Feb 28.  Adjustments which might run into this
       * problem call this method to retain the proper month.
       */
      -void
      -GregorianCalendar::pinDayOfMonth()
      +void 
      +GregorianCalendar::pinDayOfMonth() 
       {
           int32_t monthLen = monthLength(internalGet(UCAL_MONTH));
           int32_t dom = internalGet(UCAL_DATE);
      -    if(dom > monthLen)
      +    if(dom > monthLen) 
               set(UCAL_DATE, monthLen);
       }
       
      @@ -689,8 +691,8 @@ GregorianCalendar::boundsCheck(int32_t value, UCalendarDateFields field) const
       
       // -------------------------------------
       
      -UDate
      -GregorianCalendar::getEpochDay(UErrorCode& status)
      +UDate 
      +GregorianCalendar::getEpochDay(UErrorCode& status) 
       {
           complete(status);
           // Divide by 1000 (convert to seconds) in order to prevent overflow when
      @@ -782,7 +784,7 @@ double GregorianCalendar::computeJulianDayOfYear(UBool isGregorian,
       
       // -------------------------------------
       
      -double
      +double 
       GregorianCalendar::millisToJulianDay(UDate millis)
       {
           return (double)kEpochStartAsJulianDay + ClockMath::floorDivide(millis, (double)kOneDay);
      @@ -799,9 +801,9 @@ GregorianCalendar::julianDayToMillis(double julian)
       // -------------------------------------
       
       int32_t
      -GregorianCalendar::aggregateStamp(int32_t stamp_a, int32_t stamp_b)
      +GregorianCalendar::aggregateStamp(int32_t stamp_a, int32_t stamp_b) 
       {
      -    return (((stamp_a != kUnset && stamp_b != kUnset)
      +    return (((stamp_a != kUnset && stamp_b != kUnset) 
               ? uprv_max(stamp_a, stamp_b)
               : (int32_t)kUnset));
       }
      @@ -813,9 +815,9 @@ GregorianCalendar::aggregateStamp(int32_t stamp_a, int32_t stamp_b)
       * Note: This will be made public later. [LIU]
       */
       
      -void
      +void 
       GregorianCalendar::roll(EDateFields field, int32_t amount, UErrorCode& status) {
      -    roll((UCalendarDateFields) field, amount, status);
      +    roll((UCalendarDateFields) field, amount, status); 
       }
       
       void
      @@ -902,7 +904,7 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                                   }
       
           case UCAL_DAY_OF_MONTH:
      -        if( !inCutoverMonth ) {
      +        if( !inCutoverMonth ) { 
                   Calendar::roll(field, amount, status);
                   return;
               } else {
      @@ -917,7 +919,7 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                       msIntoMonth += monthLen;
                   }
       #if defined (U_DEBUG_CAL)
      -            fprintf(stderr, "%s:%d: roll DOM %d  -> %.0lf ms  \n",
      +            fprintf(stderr, "%s:%d: roll DOM %d  -> %.0lf ms  \n", 
                       __FILE__, __LINE__,amount, cMonthLen, cMonthStart+msIntoMonth);
       #endif
                   setTimeInMillis(cMonthStart + msIntoMonth, status);
      @@ -925,16 +927,16 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
               }
       
           case UCAL_WEEK_OF_MONTH:
      -        if( !inCutoverMonth ) {
      +        if( !inCutoverMonth ) { 
                   Calendar::roll(field, amount, status);
                   return;
               } else {
       #if defined (U_DEBUG_CAL)
      -            fprintf(stderr, "%s:%d: roll WOM %d ??????????????????? \n",
      +            fprintf(stderr, "%s:%d: roll WOM %d ??????????????????? \n", 
                       __FILE__, __LINE__,amount);
       #endif
                   // NOTE: following copied from  the old
      -            //     GregorianCalendar::roll( WEEK_OF_MONTH )  code
      +            //     GregorianCalendar::roll( WEEK_OF_MONTH )  code 
       
                   // This is tricky, because during the roll we may have to shift
                   // to a different day of the week.  For example:
      @@ -972,7 +974,7 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                   // Normalize the DAY_OF_WEEK so that 0 is the first day of the week
                   // in this locale.  We have dow in 0..6.
                   int32_t dow = internalGet(UCAL_DAY_OF_WEEK) - getFirstDayOfWeek();
      -            if (dow < 0)
      +            if (dow < 0) 
                       dow += 7;
       
                   // Find the day of month, compensating for cutover discontinuity.
      @@ -981,7 +983,7 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                   // Find the day of the week (normalized for locale) for the first
                   // of the month.
                   int32_t fdm = (dow - dom + 1) % 7;
      -            if (fdm < 0)
      +            if (fdm < 0) 
                       fdm += 7;
       
                   // Get the first day of the first full week of the month,
      @@ -1009,14 +1011,14 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                   // Now roll between start and (limit - 1).
                   int32_t gap = limit - start;
                   int32_t newDom = (dom + amount*7 - start) % gap;
      -            if (newDom < 0)
      +            if (newDom < 0) 
                       newDom += gap;
                   newDom += start;
       
                   // Finally, pin to the real start and end of the month.
      -            if (newDom < 1)
      +            if (newDom < 1) 
                       newDom = 1;
      -            if (newDom > monthLen)
      +            if (newDom > monthLen) 
                       newDom = monthLen;
       
                   // Set the DAY_OF_MONTH.  We rely on the fact that this field
      @@ -1029,7 +1031,7 @@ GregorianCalendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& s
                   // If we are in the cutover month, manipulate ms directly.  Don't do
                   // this in general because it doesn't work across DST boundaries
                   // (details, details).  This takes care of the discontinuity.
      -            setTimeInMillis(cMonthStart + (newDom-1)*kOneDay, status);
      +            setTimeInMillis(cMonthStart + (newDom-1)*kOneDay, status);                
                   return;
               }
       
      @@ -1210,7 +1212,7 @@ int32_t GregorianCalendar::handleGetExtendedYear() {
               year = handleGetExtendedYearFromWeekFields(internalGet(UCAL_YEAR_WOY), internalGet(UCAL_WEEK_OF_YEAR));
       #if defined (U_DEBUG_CAL)
               //    if(internalGet(UCAL_YEAR_WOY) != year) {
      -        fprintf(stderr, "%s:%d: hGEYFWF[%d,%d] ->  %d\n",
      +        fprintf(stderr, "%s:%d: hGEYFWF[%d,%d] ->  %d\n", 
                   __FILE__, __LINE__,internalGet(UCAL_YEAR_WOY),internalGet(UCAL_WEEK_OF_YEAR),year);
               //}
       #endif
      @@ -1238,7 +1240,7 @@ int32_t GregorianCalendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy,
       UBool
       GregorianCalendar::inDaylightTime(UErrorCode& status) const
       {
      -    if (U_FAILURE(status) || !getTimeZone().useDaylightTime())
      +    if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) 
               return FALSE;
       
           // Force an update of the state of the Calendar.
      @@ -1267,7 +1269,7 @@ GregorianCalendar::getType() const {
       
       /**
        * The system maintains a static default century start date and Year.  They are
      - * initialized the first time they are used.  Once the system default century date
      + * initialized the first time they are used.  Once the system default century date 
        * and year are set, they do not change.
        */
       static UDate           gSystemDefaultCenturyStart       = DBL_MIN;
      diff --git a/deps/icu-small/source/i18n/gregoimp.cpp b/deps/icu-small/source/i18n/gregoimp.cpp
      index 6b3277107f5217..1b313602d61f13 100644
      --- a/deps/icu-small/source/i18n/gregoimp.cpp
      +++ b/deps/icu-small/source/i18n/gregoimp.cpp
      @@ -1,3 +1,5 @@
      +// Copyright (C) 2016 and later: Unicode, Inc. and others.
      +// License & terms of use: http://www.unicode.org/copyright.html
       /*
        **********************************************************************
        * Copyright (c) 2003-2008, International Business Machines
      @@ -18,10 +20,6 @@
       #include "cstring.h"
       #include "uassert.h"
       
      -#if defined(U_DEBUG_CALDATA)
      -#include 
      -#endif
      -
       U_NAMESPACE_BEGIN
       
       int32_t ClockMath::floorDivide(int32_t numerator, int32_t denominator) {
      @@ -113,9 +111,9 @@ void Grego::dayToFields(double day, int32_t& year, int32_t& month,
           } else {
               ++year;
           }
      -
      +    
           UBool isLeap = isLeapYear(year);
      -
      +    
           // Gregorian day zero is a Monday.
           dow = (int32_t) uprv_fmod(day + 1, 7);
           dow += (dow < 0) ? (UCAL_SUNDAY + 7) : UCAL_SUNDAY;
      @@ -157,171 +155,6 @@ int32_t Grego::dayOfWeekInMonth(int32_t year, int32_t month, int32_t dom) {
           return weekInMonth;
       }
       
      -/* ---- CalendarData ------ */
      -
      -#define U_CALENDAR_KEY "calendar"
      -#define U_GREGORIAN_KEY "gregorian"
      -#define U_FORMAT_KEY "format"
      -#define U_DEFAULT_KEY "default"
      -#define U_CALENDAR_DATA ((char*)0)
      -
      -
      -// CalendarData::CalendarData(const Locale& loc, UErrorCode& status)
      -//   : fFillin(NULL), fBundle(NULL), fFallback(NULL) {
      -//   initData(loc.getBaseName(), (char*) "???", status);
      -// }
      -
      -CalendarData::CalendarData(const Locale& loc, const char *type, UErrorCode& status)
      -  : fFillin(NULL), fOtherFillin(NULL), fBundle(NULL), fFallback(NULL) {
      -  initData(loc.getBaseName(), type, status);
      -}
      -
      -void CalendarData::initData(const char *locale, const char *type, UErrorCode& status) {
      -  fOtherFillin = ures_open(U_CALENDAR_DATA, locale, &status);
      -  fFillin = ures_getByKey(fOtherFillin, U_CALENDAR_KEY, fFillin, &status);
      -
      -  if((type != NULL) &&
      -     (*type != '\0') &&
      -     (uprv_strcmp(type, U_GREGORIAN_KEY)))
      -  {
      -    fBundle = ures_getByKeyWithFallback(fFillin, type, NULL, &status);
      -    fFallback = ures_getByKeyWithFallback(fFillin, U_GREGORIAN_KEY, NULL, &status);
      -
      -#if defined (U_DEBUG_CALDATA)
      -    fprintf(stderr, "%p: CalendarData(%s, %s, %s) -> main(%p, %s)=%s, fallback(%p, %s)=%s\n",
      -            this, locale, type, u_errorName(status), fBundle, type, fBundle?ures_getLocale(fBundle, &status):"",
      -            fFallback, U_GREGORIAN_KEY, fFallback?ures_getLocale(fFallback, &status):"");
      -#endif
      -
      -  } else {
      -    fBundle = ures_getByKeyWithFallback(fFillin, U_GREGORIAN_KEY, NULL, &status);
      -#if defined (U_DEBUG_CALDATA)
      -    fprintf(stderr, "%p: CalendarData(%s, %s, %s) -> main(%p, %s)=%s, fallback = NULL\n",
      -            this, locale, type, u_errorName(status), fBundle, U_GREGORIAN_KEY, fBundle?ures_getLocale(fBundle, &status):"" );
      -#endif
      -  }
      -}
      -
      -CalendarData::~CalendarData() {
      -    ures_close(fFillin);
      -    ures_close(fBundle);
      -    ures_close(fFallback);
      -    ures_close(fOtherFillin);
      -}
      -
      -UResourceBundle*
      -CalendarData::getByKey(const char *key, UErrorCode& status) {
      -    if(U_FAILURE(status)) {
      -        return NULL;
      -    }
      -
      -    if(fBundle) {
      -        fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s -> %s - from MAIN %s\n",this, key, u_errorName(status), ures_getLocale(fFillin, &status));
      -#endif
      -    }
      -    if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) {
      -        status = U_ZERO_ERROR; // retry with fallback (gregorian)
      -        fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s -> %s - from FALLBACK %s\n",this, key, u_errorName(status), ures_getLocale(fFillin, &status));
      -#endif
      -    }
      -    return fFillin;
      -}
      -
      -UResourceBundle* CalendarData::getByKey2(const char *key, const char *subKey, UErrorCode& status) {
      -    if(U_FAILURE(status)) {
      -        return NULL;
      -    }
      -
      -    if(fBundle) {
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: //\n");
      -#endif
      -        fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status);
      -        fOtherFillin = ures_getByKeyWithFallback(fFillin, U_FORMAT_KEY, fOtherFillin, &status);
      -        fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s/format/%s -> %s - from MAIN %s\n", this, key, subKey, u_errorName(status), ures_getLocale(fFillin, &status));
      -#endif
      -    }
      -    if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) {
      -        status = U_ZERO_ERROR; // retry with fallback (gregorian)
      -        fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status);
      -        fOtherFillin = ures_getByKeyWithFallback(fFillin, U_FORMAT_KEY, fOtherFillin, &status);
      -        fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s/format/%s -> %s - from FALLBACK %s\n",this, key, subKey, u_errorName(status), ures_getLocale(fFillin,&status));
      -#endif
      -    }
      -
      -//// handling of 'default' keyword on failure: Commented out for 3.0.
      -//   if((status == U_MISSING_RESOURCE_ERROR) &&
      -//      uprv_strcmp(subKey,U_DEFAULT_KEY)) { // avoid recursion
      -// #if defined (U_DEBUG_CALDATA)
      -//     fprintf(stderr, "%p: - attempting fallback -\n", this);
      -//     fflush(stderr);
      -// #endif
      -//     UErrorCode subStatus = U_ZERO_ERROR;
      -//     int32_t len;
      -//     char kwBuf[128] = "";
      -//     const UChar *kw;
      -//     /* fFillin = */ getByKey2(key, U_DEFAULT_KEY, subStatus);
      -//     kw = ures_getString(fFillin, &len, &subStatus);
      -//     if(len>126) { // too big
      -//       len = 0;
      -//     }
      -//     if(U_SUCCESS(subStatus) && (len>0)) {
      -//       u_UCharsToChars(kw, kwBuf, len+1);
      -//       if(*kwBuf && uprv_strcmp(kwBuf,subKey)) {
      -// #if defined (U_DEBUG_CALDATA)
      -//         fprintf(stderr, "%p: trying  %s/format/default -> \"%s\"\n",this, key, kwBuf);
      -// #endif
      -//         // now try again with the default
      -//         status = U_ZERO_ERROR;
      -//         /* fFillin = */ getByKey2(key, kwBuf, status);
      -//       }
      -// #if defined (U_DEBUG_CALDATA)
      -//     } else {
      -//       fprintf(stderr, "%p: could not load  %s/format/default  - fail out (%s)\n",this, key, kwBuf, u_errorName(status));
      -// #endif
      -//     }
      -//   }
      -
      -    return fFillin;
      -}
      -
      -UResourceBundle* CalendarData::getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status) {
      -    if(U_FAILURE(status)) {
      -        return NULL;
      -    }
      -
      -    if(fBundle) {
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: //\n");
      -#endif
      -        fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status);
      -        fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status);
      -        fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s/%s/%s -> %s - from MAIN %s\n", this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin, &status));
      -#endif
      -    }
      -    if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) {
      -        status = U_ZERO_ERROR; // retry with fallback (gregorian)
      -        fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status);
      -        fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status);
      -        fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status);
      -#if defined (U_DEBUG_CALDATA)
      -        fprintf(stderr, "%p: get %s/%s/%s -> %s - from FALLBACK %s\n",this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin,&status));
      -#endif
      -    }
      -
      -    return fFillin;
      -}
      -
       U_NAMESPACE_END
       
       #endif
      diff --git a/deps/icu-small/source/i18n/gregoimp.h b/deps/icu-small/source/i18n/gregoimp.h
      index b3048946c705db..27303a6ac5284c 100644
      --- a/deps/icu-small/source/i18n/gregoimp.h
      +++ b/deps/icu-small/source/i18n/gregoimp.h
      @@ -1,3 +1,5 @@
      +// Copyright (C) 2016 and later: Unicode, Inc. and others.
      +// License & terms of use: http://www.unicode.org/copyright.html
       /*
        **********************************************************************
        * Copyright (c) 2003-2008, International Business Machines
      @@ -166,7 +168,7 @@ class Grego {
            * @return the day number, with day 0 == Jan 1 1970
            */
           static double fieldsToDay(int32_t year, int32_t month, int32_t dom);
      -
      +    
           /**
            * Convert a 1970-epoch day number to proleptic Gregorian year,
            * month, day-of-month, and day-of-week.
      @@ -239,9 +241,9 @@ class Grego {
            */
           static inline int32_t millisToJulianDay(double millis);
       
      -    /**
      +    /** 
            * Calculates the Gregorian day shift value for an extended year.
      -     * @param eyear Extended year
      +     * @param eyear Extended year 
            * @returns number of days to ADD to Julian in order to convert from J->G
            */
           static inline int32_t gregorianShift(int32_t eyear);
      @@ -291,71 +293,6 @@ inline int32_t Grego::gregorianShift(int32_t eyear) {
         return gregShift;
       }
       
      -/**
      - * This utility class provides convenient access to the data needed for a calendar.
      - * @internal ICU 3.0
      - */
      -class CalendarData : public UMemory {
      -public:
      -    /**
      -     * Construct a CalendarData from the given locale.
      -     * @param loc locale to use. The 'calendar' keyword will be ignored.
      -     * @param type calendar type. NULL indicates the gregorian calendar.
      -     * No default lookup is done.
      -     * @param status error code
      -     */
      -    CalendarData(const Locale& loc, const char *type, UErrorCode& status);
      -
      -    /**
      -     * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()!
      -     * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API.
      -     *
      -     * @param key Resource key to data
      -     * @param status Error Status
      -     * @internal
      -     */
      -    UResourceBundle* getByKey(const char *key, UErrorCode& status);
      -
      -    /**
      -     * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()!
      -     * There is an implicit key of 'format'
      -     * data is located in:   "calendar/key/format/subKey"
      -     * for example,  calendar/dayNames/format/abbreviated
      -     * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API.
      -     *
      -     * @param key Resource key to data
      -     * @param subKey Resource key to data
      -     * @param status Error Status
      -     * @internal
      -     */
      -    UResourceBundle* getByKey2(const char *key, const char *subKey, UErrorCode& status);
      -
      -    /**
      -     * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()!
      -     * data is located in:   "calendar/key/contextKey/subKey"
      -     * for example,  calendar/dayNames/standalone/narrow
      -     * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API.
      -     *
      -     * @param key Resource key to data
      -     * @param contextKey Resource key to data
      -     * @param subKey Resource key to data
      -     * @param status Error Status
      -     * @internal
      -     */
      -    UResourceBundle* getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status);
      -
      -    ~CalendarData();
      -
      -private:
      -    void initData(const char *locale, const char *type, UErrorCode& status);
      -
      -    UResourceBundle *fFillin;
      -    UResourceBundle *fOtherFillin;
      -    UResourceBundle *fBundle;
      -    UResourceBundle *fFallback;
      -    CalendarData(); // Not implemented.
      -};
      -
       U_NAMESPACE_END
       
       #endif // !UCONFIG_NO_FORMATTING
      diff --git a/deps/icu-small/source/i18n/hebrwcal.cpp b/deps/icu-small/source/i18n/hebrwcal.cpp
      index 96673e5788d85b..7bba33fe566692 100644
      --- a/deps/icu-small/source/i18n/hebrwcal.cpp
      +++ b/deps/icu-small/source/i18n/hebrwcal.cpp
      @@ -1,3 +1,5 @@
      +// Copyright (C) 2016 and later: Unicode, Inc. and others.
      +// License & terms of use: http://www.unicode.org/copyright.html
       /*
       ******************************************************************************
       * Copyright (C) 2003-2016, International Business Machines Corporation
      @@ -185,7 +187,7 @@ HebrewCalendar::HebrewCalendar(const HebrewCalendar& other) : Calendar(other) {
       /**
       * Add a signed amount to a specified field, using this calendar's rules.
       * For example, to add three days to the current date, you can call
      -* add(Calendar.DATE, 3).
      +* add(Calendar.DATE, 3). 
       * 

      * When adding to certain fields, the values of other fields may conflict and * need to be changed. For example, when adding one to the {@link #MONTH MONTH} field @@ -215,7 +217,7 @@ void HebrewCalendar::add(UCalendarDateFields field, int32_t amount, UErrorCode& return; } switch (field) { - case UCAL_MONTH: + case UCAL_MONTH: { // We can't just do a set(MONTH, get(MONTH) + amount). The // reason is ADAR_1. Suppose amount is +2 and we land in @@ -279,7 +281,7 @@ void HebrewCalendar::add(EDateFields field, int32_t amount, UErrorCode& status) * example, to roll the current date up by three days, you can call * roll(Calendar.DATE, 3). If the * field is rolled past its maximum allowable value, it will "wrap" back -* to its minimum and continue rolling. +* to its minimum and continue rolling. * For example, calling roll(Calendar.DATE, 10) * on a Hebrew calendar set to "25 Av 5758" will result in the date "5 Av 5758". *

      @@ -551,7 +553,7 @@ void HebrewCalendar::validateField(UCalendarDateFields field, UErrorCode &status *

    • DAY_OF_MONTH *
    • DAY_OF_YEAR *
    • EXTENDED_YEAR
    -* +* * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, * which will be set when this method is called. Subclasses can * also call the getGregorianXxx() methods to obtain Gregorian @@ -606,7 +608,7 @@ void HebrewCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) internalSet(UCAL_EXTENDED_YEAR, year); internalSet(UCAL_MONTH, month); internalSet(UCAL_DAY_OF_MONTH, dayOfMonth); - internalSet(UCAL_DAY_OF_YEAR, dayOfYear); + internalSet(UCAL_DAY_OF_YEAR, dayOfYear); } //------------------------------------------------------------------------- @@ -667,7 +669,7 @@ UBool HebrewCalendar::inDaylightTime(UErrorCode& status) const { // copied from GregorianCalendar - if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) + if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) return FALSE; // Force an update of the state of the Calendar. @@ -678,7 +680,7 @@ HebrewCalendar::inDaylightTime(UErrorCode& status) const /** * The system maintains a static default century start date and Year. They are - * initialized the first time they are used. Once the system default century date + * initialized the first time they are used. Once the system default century date * and year are set, they do not change. */ static UDate gSystemDefaultCenturyStart = DBL_MIN; @@ -727,3 +729,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HebrewCalendar) U_NAMESPACE_END #endif // UCONFIG_NO_FORMATTING + diff --git a/deps/icu-small/source/i18n/hebrwcal.h b/deps/icu-small/source/i18n/hebrwcal.h index 4cb2d3ebbfe9d9..e0f291bf60b30b 100644 --- a/deps/icu-small/source/i18n/hebrwcal.h +++ b/deps/icu-small/source/i18n/hebrwcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -87,26 +89,26 @@ class U_I18N_API HebrewCalendar : public Calendar { * @internal */ enum EEras { - /** - * Constant for Tishri, the 1st month of the Hebrew year. + /** + * Constant for Tishri, the 1st month of the Hebrew year. */ TISHRI, /** - * Constant for Heshvan, the 2nd month of the Hebrew year. + * Constant for Heshvan, the 2nd month of the Hebrew year. */ HESHVAN, /** - * Constant for Kislev, the 3rd month of the Hebrew year. + * Constant for Kislev, the 3rd month of the Hebrew year. */ KISLEV, /** - * Constant for Tevet, the 4th month of the Hebrew year. + * Constant for Tevet, the 4th month of the Hebrew year. */ TEVET, /** - * Constant for Shevat, the 5th month of the Hebrew year. + * Constant for Shevat, the 5th month of the Hebrew year. */ SHEVAT, @@ -117,38 +119,38 @@ class U_I18N_API HebrewCalendar : public Calendar { */ ADAR_1, - /** - * Constant for the Adar, the 7th month of the Hebrew year. + /** + * Constant for the Adar, the 7th month of the Hebrew year. */ ADAR, /** - * Constant for Nisan, the 8th month of the Hebrew year. + * Constant for Nisan, the 8th month of the Hebrew year. */ NISAN, /** - * Constant for Iyar, the 9th month of the Hebrew year. + * Constant for Iyar, the 9th month of the Hebrew year. */ IYAR, /** - * Constant for Sivan, the 10th month of the Hebrew year. + * Constant for Sivan, the 10th month of the Hebrew year. */ SIVAN, /** - * Constant for Tammuz, the 11th month of the Hebrew year. + * Constant for Tammuz, the 11th month of the Hebrew year. */ TAMUZ, /** - * Constant for Av, the 12th month of the Hebrew year. + * Constant for Av, the 12th month of the Hebrew year. */ AV, /** - * Constant for Elul, the 13th month of the Hebrew year. + * Constant for Elul, the 13th month of the Hebrew year. */ ELUL }; @@ -191,7 +193,7 @@ class U_I18N_API HebrewCalendar : public Calendar { * @internal */ virtual Calendar* clone(void) const; - + public: /** * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual @@ -274,7 +276,7 @@ class U_I18N_API HebrewCalendar : public Calendar { virtual void roll(EDateFields field, int32_t amount, UErrorCode& status); /** - * @internal + * @internal */ static UBool isLeapYear(int32_t year) ; @@ -429,14 +431,14 @@ class U_I18N_API HebrewCalendar : public Calendar { static int32_t startOfYear(int32_t year, UErrorCode& status); static int32_t absoluteDayToDayOfWeek(int32_t day) ; - + /** - * @internal + * @internal */ int32_t yearType(int32_t year) const; /** - * @internal + * @internal */ static int32_t monthsInYear(int32_t year) ; }; @@ -445,5 +447,6 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ -#endif +#endif //eof + diff --git a/deps/icu-small/source/i18n/i18n.rc b/deps/icu-small/source/i18n/i18n.rc index cc516ee0a0589e..c31ef3ad5f78cd 100644 --- a/deps/icu-small/source/i18n/i18n.rc +++ b/deps/icu-small/source/i18n/i18n.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // @@ -16,7 +18,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// +// LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #pragma code_page(1252) @@ -27,17 +29,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "../common/msvcres.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "#include \0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "\r\n" "\0" @@ -105,3 +107,4 @@ END ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED + diff --git a/deps/icu-small/source/i18n/identifier_info.cpp b/deps/icu-small/source/i18n/identifier_info.cpp deleted file mode 100644 index 05882830a5baae..00000000000000 --- a/deps/icu-small/source/i18n/identifier_info.cpp +++ /dev/null @@ -1,310 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 2012-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ - -#include "unicode/utypes.h" - -#include "unicode/uchar.h" -#include "unicode/utf16.h" - -#include "identifier_info.h" -#include "mutex.h" -#include "scriptset.h" -#include "ucln_in.h" -#include "uvector.h" - -U_NAMESPACE_BEGIN - -static UnicodeSet *ASCII; -static ScriptSet *JAPANESE; -static ScriptSet *CHINESE; -static ScriptSet *KOREAN; -static ScriptSet *CONFUSABLE_WITH_LATIN; -static UInitOnce gIdentifierInfoInitOnce = U_INITONCE_INITIALIZER; - - -U_CDECL_BEGIN -static UBool U_CALLCONV -IdentifierInfo_cleanup(void) { - delete ASCII; - ASCII = NULL; - delete JAPANESE; - JAPANESE = NULL; - delete CHINESE; - CHINESE = NULL; - delete KOREAN; - KOREAN = NULL; - delete CONFUSABLE_WITH_LATIN; - CONFUSABLE_WITH_LATIN = NULL; - gIdentifierInfoInitOnce.reset(); - return TRUE; -} - -static void U_CALLCONV -IdentifierInfo_init(UErrorCode &status) { - ASCII = new UnicodeSet(0, 0x7f); - JAPANESE = new ScriptSet(); - CHINESE = new ScriptSet(); - KOREAN = new ScriptSet(); - CONFUSABLE_WITH_LATIN = new ScriptSet(); - if (ASCII == NULL || JAPANESE == NULL || CHINESE == NULL || KOREAN == NULL - || CONFUSABLE_WITH_LATIN == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - ASCII->freeze(); - JAPANESE->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_HIRAGANA, status) - .set(USCRIPT_KATAKANA, status); - CHINESE->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_BOPOMOFO, status); - KOREAN->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_HANGUL, status); - CONFUSABLE_WITH_LATIN->set(USCRIPT_CYRILLIC, status).set(USCRIPT_GREEK, status) - .set(USCRIPT_CHEROKEE, status); - ucln_i18n_registerCleanup(UCLN_I18N_IDENTIFIER_INFO, IdentifierInfo_cleanup); -} -U_CDECL_END - - -IdentifierInfo::IdentifierInfo(UErrorCode &status): - fIdentifier(NULL), fRequiredScripts(NULL), fScriptSetSet(NULL), - fCommonAmongAlternates(NULL), fNumerics(NULL), fIdentifierProfile(NULL) { - umtx_initOnce(gIdentifierInfoInitOnce, &IdentifierInfo_init, status); - if (U_FAILURE(status)) { - return; - } - - fIdentifier = new UnicodeString(); - fRequiredScripts = new ScriptSet(); - fScriptSetSet = uhash_open(uhash_hashScriptSet, uhash_compareScriptSet, NULL, &status); - uhash_setKeyDeleter(fScriptSetSet, uhash_deleteScriptSet); - fCommonAmongAlternates = new ScriptSet(); - fNumerics = new UnicodeSet(); - fIdentifierProfile = new UnicodeSet(0, 0x10FFFF); - - if (U_SUCCESS(status) && (fIdentifier == NULL || fRequiredScripts == NULL || fScriptSetSet == NULL || - fCommonAmongAlternates == NULL || fNumerics == NULL || fIdentifierProfile == NULL)) { - status = U_MEMORY_ALLOCATION_ERROR; - } -} - -IdentifierInfo::~IdentifierInfo() { - delete fIdentifier; - delete fRequiredScripts; - uhash_close(fScriptSetSet); - delete fCommonAmongAlternates; - delete fNumerics; - delete fIdentifierProfile; -} - - -IdentifierInfo &IdentifierInfo::clear() { - fRequiredScripts->resetAll(); - uhash_removeAll(fScriptSetSet); - fNumerics->clear(); - fCommonAmongAlternates->resetAll(); - return *this; -} - - -IdentifierInfo &IdentifierInfo::setIdentifierProfile(const UnicodeSet &identifierProfile) { - *fIdentifierProfile = identifierProfile; - return *this; -} - - -const UnicodeSet &IdentifierInfo::getIdentifierProfile() const { - return *fIdentifierProfile; -} - - -IdentifierInfo &IdentifierInfo::setIdentifier(const UnicodeString &identifier, UErrorCode &status) { - if (U_FAILURE(status)) { - return *this; - } - *fIdentifier = identifier; - clear(); - ScriptSet scriptsForCP; - UChar32 cp; - for (int32_t i = 0; i < identifier.length(); i += U16_LENGTH(cp)) { - cp = identifier.char32At(i); - // Store a representative character for each kind of decimal digit - if (u_charType(cp) == U_DECIMAL_DIGIT_NUMBER) { - // Just store the zero character as a representative for comparison. Unicode guarantees it is cp - value - fNumerics->add(cp - (UChar32)u_getNumericValue(cp)); - } - UScriptCode extensions[500]; - int32_t extensionsCount = uscript_getScriptExtensions(cp, extensions, UPRV_LENGTHOF(extensions), &status); - if (U_FAILURE(status)) { - return *this; - } - scriptsForCP.resetAll(); - for (int32_t j=0; jUnion(scriptsForCP); - break; - default: - if (!fRequiredScripts->intersects(scriptsForCP) - && !uhash_geti(fScriptSetSet, &scriptsForCP)) { - // If the set hasn't been added already, add it - // (Add a copy, fScriptSetSet takes ownership of the copy.) - uhash_puti(fScriptSetSet, new ScriptSet(scriptsForCP), 1, &status); - } - break; - } - } - // Now make a final pass through ScriptSetSet to remove alternates that came before singles. - // [Kana], [Kana Hira] => [Kana] - // This is relatively infrequent, so doesn't have to be optimized. - // We also compute any commonalities among the alternates. - if (uhash_count(fScriptSetSet) > 0) { - fCommonAmongAlternates->setAll(); - for (int32_t it = UHASH_FIRST;;) { - const UHashElement *nextHashEl = uhash_nextElement(fScriptSetSet, &it); - if (nextHashEl == NULL) { - break; - } - ScriptSet *next = static_cast(nextHashEl->key.pointer); - // [Kana], [Kana Hira] => [Kana] - if (fRequiredScripts->intersects(*next)) { - uhash_removeElement(fScriptSetSet, nextHashEl); - } else { - fCommonAmongAlternates->intersect(*next); - // [[Arab Syrc Thaa]; [Arab Syrc]] => [[Arab Syrc]] - for (int32_t otherIt = UHASH_FIRST;;) { - const UHashElement *otherHashEl = uhash_nextElement(fScriptSetSet, &otherIt); - if (otherHashEl == NULL) { - break; - } - ScriptSet *other = static_cast(otherHashEl->key.pointer); - if (next != other && next->contains(*other)) { - uhash_removeElement(fScriptSetSet, nextHashEl); - break; - } - } - } - } - } - if (uhash_count(fScriptSetSet) == 0) { - fCommonAmongAlternates->resetAll(); - } - return *this; -} - - -const UnicodeString *IdentifierInfo::getIdentifier() const { - return fIdentifier; -} - -const ScriptSet *IdentifierInfo::getScripts() const { - return fRequiredScripts; -} - -const UHashtable *IdentifierInfo::getAlternates() const { - return fScriptSetSet; -} - - -const UnicodeSet *IdentifierInfo::getNumerics() const { - return fNumerics; -} - -const ScriptSet *IdentifierInfo::getCommonAmongAlternates() const { - return fCommonAmongAlternates; -} - -#if !UCONFIG_NO_NORMALIZATION - -URestrictionLevel IdentifierInfo::getRestrictionLevel(UErrorCode &status) const { - if (!fIdentifierProfile->containsAll(*fIdentifier) || getNumerics()->size() > 1) { - return USPOOF_UNRESTRICTIVE; - } - if (ASCII->containsAll(*fIdentifier)) { - return USPOOF_ASCII; - } - // This is a bit tricky. We look at a number of factors. - // The number of scripts in the text. - // Plus 1 if there is some commonality among the alternates (eg [Arab Thaa]; [Arab Syrc]) - // Plus number of alternates otherwise (this only works because we only test cardinality up to 2.) - - // Note: the requiredScripts set omits COMMON and INHERITED; they are taken out at the - // time it is created, in setIdentifier(). - int32_t cardinalityPlus = fRequiredScripts->countMembers() + - (fCommonAmongAlternates->countMembers() == 0 ? uhash_count(fScriptSetSet) : 1); - if (cardinalityPlus < 2) { - return USPOOF_SINGLE_SCRIPT_RESTRICTIVE; - } - if (containsWithAlternates(*JAPANESE, *fRequiredScripts) || containsWithAlternates(*CHINESE, *fRequiredScripts) - || containsWithAlternates(*KOREAN, *fRequiredScripts)) { - return USPOOF_HIGHLY_RESTRICTIVE; - } - if (cardinalityPlus == 2 && - fRequiredScripts->test(USCRIPT_LATIN, status) && - !fRequiredScripts->intersects(*CONFUSABLE_WITH_LATIN)) { - return USPOOF_MODERATELY_RESTRICTIVE; - } - return USPOOF_MINIMALLY_RESTRICTIVE; -} - -#endif /* !UCONFIG_NO_NORMALIZATION */ - -int32_t IdentifierInfo::getScriptCount() const { - // Note: Common and Inherited scripts were removed by setIdentifier(), and do not appear in fRequiredScripts. - int32_t count = fRequiredScripts->countMembers() + - (fCommonAmongAlternates->countMembers() == 0 ? uhash_count(fScriptSetSet) : 1); - return count; -} - - - -UBool IdentifierInfo::containsWithAlternates(const ScriptSet &container, const ScriptSet &containee) const { - if (!container.contains(containee)) { - return FALSE; - } - for (int32_t iter = UHASH_FIRST; ;) { - const UHashElement *hashEl = uhash_nextElement(fScriptSetSet, &iter); - if (hashEl == NULL) { - break; - } - ScriptSet *alternatives = static_cast(hashEl->key.pointer); - if (!container.intersects(*alternatives)) { - return false; - } - } - return true; -} - -UnicodeString &IdentifierInfo::displayAlternates(UnicodeString &dest, const UHashtable *alternates, UErrorCode &status) { - UVector sorted(status); - if (U_FAILURE(status)) { - return dest; - } - for (int32_t pos = UHASH_FIRST; ;) { - const UHashElement *el = uhash_nextElement(alternates, &pos); - if (el == NULL) { - break; - } - ScriptSet *ss = static_cast(el->key.pointer); - sorted.addElement(ss, status); - } - sorted.sort(uhash_compareScriptSet, status); - UnicodeString separator = UNICODE_STRING_SIMPLE("; "); - for (int32_t i=0; i0) { - dest.append(separator); - } - ScriptSet *ss = static_cast(sorted.elementAt(i)); - ss->displayScripts(dest); - } - return dest; -} - -U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/identifier_info.h b/deps/icu-small/source/i18n/identifier_info.h deleted file mode 100644 index 1dee627e1c57bf..00000000000000 --- a/deps/icu-small/source/i18n/identifier_info.h +++ /dev/null @@ -1,189 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* indentifier_info.h -* -* created on: 2013 Jan 7 -* created by: Andy Heninger -*/ - -#ifndef __IDENTIFIER_INFO_H__ -#define __IDENTIFIER_INFO_H__ - -#include "unicode/utypes.h" - -#include "unicode/uniset.h" -#include "unicode/uspoof.h" -#include "uhash.h" - -U_NAMESPACE_BEGIN - -class ScriptSet; - -// TODO(andy): review consistency of reference vs pointer arguments to the funcions. - -/** - * This class analyzes a possible identifier for script and identifier status. Use it by calling setIdentifierProfile - * then setIdentifier. Available methods include: - *
      - *
    1. call getScripts for the specific scripts in the identifier. The identifier contains at least one character in - * each of these. - *
    2. call getAlternates to get cases where a character is not limited to a single script. For example, it could be - * either Katakana or Hiragana. - *
    3. call getCommonAmongAlternates to find out if any scripts are common to all the alternates. - *
    4. call getNumerics to get a representative character (with value zero) for each of the decimal number systems in - * the identifier. - *
    5. call getRestrictionLevel to see what the UTS36 restriction level is. - *
    - * - * This is a port from ICU4J of class com.ibm.icu.text.IdentifierInfo - */ -class U_I18N_API IdentifierInfo : public UMemory { - - public: - /** - * Create an identifier info object. Subsequently, call setIdentifier(), etc. - * @internal - */ - IdentifierInfo(UErrorCode &status); - - /** - * Destructor - */ - virtual ~IdentifierInfo(); - - private: - /* Disallow copying for now. Can be added if there's a need. */ - IdentifierInfo(const IdentifierInfo &other); - - public: - - /** - * Set the identifier profile: the characters that are to be allowed in the identifier. - * - * @param identifierProfile the characters that are to be allowed in the identifier - * @return this - * @internal - */ - IdentifierInfo &setIdentifierProfile(const UnicodeSet &identifierProfile); - - /** - * Get the identifier profile: the characters that are to be allowed in the identifier. - * - * @return The characters that are to be allowed in the identifier. - * @internal - */ - const UnicodeSet &getIdentifierProfile() const; - - - /** - * Set an identifier to analyze. Afterwards, call methods like getScripts() - * - * @param identifier the identifier to analyze - * @param status Errorcode, set if errors occur. - * @return this - * @internal - */ - IdentifierInfo &setIdentifier(const UnicodeString &identifier, UErrorCode &status); - - - /** - * Get the identifier that was analyzed. The returned string is owned by the ICU library, - * and must not be deleted by the caller. - * - * @return the identifier that was analyzed. - * @internal - */ - const UnicodeString *getIdentifier() const; - - - /** - * Get the scripts found in the identifiers. - * - * @return the set of explicit scripts. - * @internal - */ - const ScriptSet *getScripts() const; - - /** - * Get the set of alternate scripts found in the identifiers. That is, when a character can be in two scripts, then - * the set consisting of those scripts will be returned. - * - * @return a uhash, with each key being of type (ScriptSet *). - * This is a set, not a map, so the value stored in the uhash is not relevant. - * (It is, in fact, 1). - * Ownership of the uhash and its contents remains with the IndetifierInfo object, - * and remains valid until a new identifer is set or until the object is deleted. - * @internal - */ - const UHashtable *getAlternates() const; - - /** - * Get the representative characters (zeros) for the numerics found in the identifier. - * - * @return the set of explicit scripts. - * @internal - */ - const UnicodeSet *getNumerics() const; - - /** - * Find out which scripts are in common among the alternates. - * - * @return the set of scripts that are in common among the alternates. - * @internal - */ - const ScriptSet *getCommonAmongAlternates() const; - - /** - * Get the number of scripts appearing in the identifier. - * Note: Common and Inherited scripts are omitted from the count. - * Note: Result may be high when the identifier contains characters - * with alternate scripts. The distinction between - * 0, 1 and > 1 will remain valid, however. - * @return the number of scripts. - */ - int32_t getScriptCount() const; - -#if !UCONFIG_NO_NORMALIZATION - - /** - * Find the "tightest" restriction level that the identifier satisfies. - * - * @return the restriction level. - * @internal - */ - URestrictionLevel getRestrictionLevel(UErrorCode &status) const; - -#endif /*!UCONFIG_NO_NORMALIZATION */ - - UnicodeString toString() const; - - /** - * Produce a readable string of alternates. - * - * @param alternates a UHashtable of UScriptSets. - * Keys only, no meaningful values in the UHash. - * @return display form - * @internal - */ - static UnicodeString &displayAlternates(UnicodeString &dest, const UHashtable *alternates, UErrorCode &status); - - private: - - IdentifierInfo & clear(); - UBool containsWithAlternates(const ScriptSet &container, const ScriptSet &containee) const; - - UnicodeString *fIdentifier; - ScriptSet *fRequiredScripts; - UHashtable *fScriptSetSet; - ScriptSet *fCommonAmongAlternates; - UnicodeSet *fNumerics; - UnicodeSet *fIdentifierProfile; -}; - -U_NAMESPACE_END - -#endif // __IDENTIFIER_INFO_H__ diff --git a/deps/icu-small/source/i18n/indiancal.cpp b/deps/icu-small/source/i18n/indiancal.cpp index 722d3adcdc0acf..3033c4f71e20c4 100644 --- a/deps/icu-small/source/i18n/indiancal.cpp +++ b/deps/icu-small/source/i18n/indiancal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2003-2014, International Business Machines Corporation * and others. All Rights Reserved. @@ -49,10 +51,10 @@ IndianCalendar::IndianCalendar(const IndianCalendar& other) : Calendar(other) { IndianCalendar::~IndianCalendar() { } -const char *IndianCalendar::getType() const { +const char *IndianCalendar::getType() const { return "indian"; } - + static const int32_t LIMITS[UCAL_FIELD_COUNT][4] = { // Minimum Greatest Least Maximum // Minimum Maximum @@ -90,13 +92,13 @@ int32_t IndianCalendar::handleGetLimit(UCalendarDateFields field, ELimitType lim } /* - * Determine whether the given gregorian year is a Leap year + * Determine whether the given gregorian year is a Leap year */ static UBool isGregorianLeap(int32_t year) { - return ((year % 4) == 0) && (!(((year % 100) == 0) && ((year % 400) != 0))); + return ((year % 4) == 0) && (!(((year % 100) == 0) && ((year % 400) != 0))); } - + //---------------------------------------------------------------------- // Calendar framework //---------------------------------------------------------------------- @@ -188,7 +190,7 @@ static int32_t* jdToGregorian(double jd, int32_t gregorianDate[3]) { return gregorianDate; } - + //------------------------------------------------------------------------- // Functions for converting from field values to milliseconds.... //------------------------------------------------------------------------- @@ -202,7 +204,7 @@ static double IndianToJD(int32_t year, int32_t month, int32_t date) { if(isGregorianLeap(gyear)) { leapMonth = 31; start = gregorianToJD(gyear, 3, 21); - } + } else { leapMonth = 30; start = gregorianToJD(gyear, 3, 22); @@ -238,7 +240,7 @@ static double IndianToJD(int32_t year, int32_t month, int32_t date) { */ int32_t IndianCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, UBool /* useMonth */ ) const { - //month is 0 based; converting it to 1-based + //month is 0 based; converting it to 1-based int32_t imonth; // If the month is out of range, adjust it into range, and adjust the extended eyar accordingly @@ -249,9 +251,9 @@ int32_t IndianCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, UB if(month == 12){ imonth = 1; } else { - imonth = month + 1; + imonth = month + 1; } - + double jd = IndianToJD(eyear ,imonth, 1); return (int32_t)jd; @@ -282,7 +284,7 @@ int32_t IndianCalendar::handleGetExtendedYear() { *
  • MONTH *
  • DAY_OF_MONTH *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -329,7 +331,7 @@ void IndianCalendar::handleComputeFields(int32_t julianDay, UErrorCode& /* stat internalSet(UCAL_MONTH, IndianMonth); internalSet(UCAL_DAY_OF_MONTH, IndianDayOfMonth); internalSet(UCAL_DAY_OF_YEAR, yday + 1); // yday is 0-based -} +} UBool IndianCalendar::inDaylightTime(UErrorCode& status) const @@ -373,7 +375,7 @@ IndianCalendar::internalGetDefaultCenturyStart() const { // lazy-evaluate systemDefaultCenturyStart UBool needsUpdate; - { + { Mutex m; needsUpdate = (fgSystemDefaultCenturyStart == fgSystemDefaultCentury); } @@ -393,7 +395,7 @@ IndianCalendar::internalGetDefaultCenturyStartYear() const { // lazy-evaluate systemDefaultCenturyStartYear UBool needsUpdate; - { + { Mutex m; needsUpdate = (fgSystemDefaultCenturyStart == fgSystemDefaultCentury); @@ -445,3 +447,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndianCalendar) U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/indiancal.h b/deps/icu-small/source/i18n/indiancal.h index 62ff1c78e744b9..12d46c70c775c6 100644 --- a/deps/icu-small/source/i18n/indiancal.h +++ b/deps/icu-small/source/i18n/indiancal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2003-2008, International Business Machines Corporation @@ -73,28 +75,28 @@ class IndianCalendar : public Calendar { * @internal */ enum EEras { - /** - * Constant for Chaitra, the 1st month of the Indian year. + /** + * Constant for Chaitra, the 1st month of the Indian year. */ CHAITRA, /** - * Constant for Vaisakha, the 2nd month of the Indian year. + * Constant for Vaisakha, the 2nd month of the Indian year. */ VAISAKHA, /** - * Constant for Jyaistha, the 3rd month of the Indian year. + * Constant for Jyaistha, the 3rd month of the Indian year. */ JYAISTHA, /** - * Constant for Asadha, the 4th month of the Indian year. + * Constant for Asadha, the 4th month of the Indian year. */ ASADHA, /** - * Constant for Sravana, the 5th month of the Indian year. + * Constant for Sravana, the 5th month of the Indian year. */ SRAVANA, @@ -103,33 +105,33 @@ class IndianCalendar : public Calendar { */ BHADRA, - /** - * Constant for the Asvina, the 7th month of the Indian year. + /** + * Constant for the Asvina, the 7th month of the Indian year. */ ASVINA, /** - * Constant for Kartika, the 8th month of the Indian year. + * Constant for Kartika, the 8th month of the Indian year. */ KARTIKA, /** - * Constant for Agrahayana, the 9th month of the Indian year. + * Constant for Agrahayana, the 9th month of the Indian year. */ AGRAHAYANA, /** - * Constant for Pausa, the 10th month of the Indian year. + * Constant for Pausa, the 10th month of the Indian year. */ PAUSA, /** - * Constant for Magha, the 11th month of the Indian year. + * Constant for Magha, the 11th month of the Indian year. */ MAGHA, /** - * Constant for Phalguna, the 12th month of the Indian year. + * Constant for Phalguna, the 12th month of the Indian year. */ PHALGUNA }; @@ -171,7 +173,7 @@ class IndianCalendar : public Calendar { * @internal */ //void setCivil(ECivil beCivil, UErrorCode &status); - + /** * Returns true if this object is using the fixed-cycle civil * calendar, or false if using the religious, astronomical @@ -188,7 +190,7 @@ class IndianCalendar : public Calendar { private: /** - * Determine whether a year is the gregorian year a leap year + * Determine whether a year is the gregorian year a leap year */ //static UBool isGregorianLeap(int32_t year); //---------------------------------------------------------------------- @@ -199,7 +201,7 @@ class IndianCalendar : public Calendar { * @internal */ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; - + /** * Return the length (in days) of the given month. * @@ -208,7 +210,7 @@ class IndianCalendar : public Calendar { * @internal */ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; - + /** * Return the number of days in the given Indian year * @internal @@ -244,7 +246,7 @@ class IndianCalendar : public Calendar { *
  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -253,7 +255,7 @@ class IndianCalendar : public Calendar { virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); // UObject stuff - public: + public: /** * @return The class ID for this object. All objects of a given class have the * same class ID. Objects of other classes have different class IDs. @@ -344,13 +346,13 @@ class IndianCalendar : public Calendar { static const UDate fgSystemDefaultCentury; /** - * Returns the beginning date of the 100-year window that dates + * Returns the beginning date of the 100-year window that dates * with 2-digit years are considered to fall within. */ UDate internalGetDefaultCenturyStart(void) const; /** - * Returns the first year of the 100-year window that dates with + * Returns the first year of the 100-year window that dates with * 2-digit years are considered to fall within. */ int32_t internalGetDefaultCenturyStartYear(void) const; @@ -367,3 +369,6 @@ U_NAMESPACE_END #endif #endif + + + diff --git a/deps/icu-small/source/i18n/inputext.cpp b/deps/icu-small/source/i18n/inputext.cpp index 5c75d5d42cbf8a..c78828f32dfd37 100644 --- a/deps/icu-small/source/i18n/inputext.cpp +++ b/deps/icu-small/source/i18n/inputext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -66,7 +68,7 @@ void InputText::setDeclaredEncoding(const char* encoding, int32_t len) } } -UBool InputText::isSet() const +UBool InputText::isSet() const { return fRawInput != NULL; } @@ -74,7 +76,7 @@ UBool InputText::isSet() const /** * MungeInput - after getting a set of raw input data to be analyzed, preprocess * it by removing what appears to be html markup. -* +* * @internal */ void InputText::MungeInput(UBool fStripTags) { @@ -122,7 +124,7 @@ void InputText::MungeInput(UBool fStripTags) { // essentially nothing but markup abandon the markup stripping. // Detection will have to work on the unstripped input. // - if (openTags<5 || openTags/5 < badTags || + if (openTags<5 || openTags/5 < badTags || (fInputLen < 100 && fRawLength>600)) { int32_t limit = fRawLength; @@ -159,3 +161,4 @@ void InputText::MungeInput(UBool fStripTags) { U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/inputext.h b/deps/icu-small/source/i18n/inputext.h index 12b915a0bdecfa..efffb613eed1ad 100644 --- a/deps/icu-small/source/i18n/inputext.h +++ b/deps/icu-small/source/i18n/inputext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2008, International Business Machines @@ -21,7 +23,7 @@ #if !UCONFIG_NO_CONVERSION -U_NAMESPACE_BEGIN +U_NAMESPACE_BEGIN class InputText : public UMemory { @@ -33,7 +35,7 @@ class InputText : public UMemory void setText(const char *in, int32_t len); void setDeclaredEncoding(const char *encoding, int32_t len); - UBool isSet() const; + UBool isSet() const; void MungeInput(UBool fStripTags); // The text to be checked. Markup will have been @@ -42,14 +44,14 @@ class InputText : public UMemory int32_t fInputLen; // Length of the byte data in fInputBytes. // byte frequency statistics for the input text. // Value is percent, not absolute. - // Value is rounded up, so zero really means zero occurences. + // Value is rounded up, so zero really means zero occurences. int16_t *fByteStats; UBool fC1Bytes; // True if any bytes in the range 0x80 - 0x9F are in the input;false by default char *fDeclaredEncoding; const uint8_t *fRawInput; // Original, untouched input bytes. // If user gave us a byte array, this is it. - // If user gave us a stream, it's read to a + // If user gave us a stream, it's read to a // buffer here. int32_t fRawLength; // Length of data in fRawInput array. diff --git a/deps/icu-small/source/i18n/islamcal.cpp b/deps/icu-small/source/i18n/islamcal.cpp index f343ebd88b69c7..123b245f2d97e6 100644 --- a/deps/icu-small/source/i18n/islamcal.cpp +++ b/deps/icu-small/source/i18n/islamcal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2015, International Business Machines Corporation @@ -367,7 +369,7 @@ UBool IslamicCalendar::civilLeapYear(int32_t year) */ int32_t IslamicCalendar::yearStart(int32_t year) const{ if (cType == CIVIL || cType == TBLA || - (cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEAR_END))) + (cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEAR_END))) { return (year-1)*354 + ClockMath::floorDivide((3+11*year),30); } else if(cType==ASTRONOMICAL){ @@ -419,7 +421,7 @@ int32_t IslamicCalendar::trueMonthStart(int32_t month) const if (start==0) { // Make a guess at when the month started, using the average length - UDate origin = HIJRA_MILLIS + UDate origin = HIJRA_MILLIS + uprv_floor(month * CalendarAstronomer::SYNODIC_MONTH) * kOneDay; // moonAge will fail due to memory allocation error @@ -461,7 +463,7 @@ trueMonthStartEnd : /** * Return the "age" of the moon at the given time; this is the difference * in ecliptic latitude between the moon and the sun. This method simply -* calls CalendarAstronomer.moonAge, converts to degrees, +* calls CalendarAstronomer.moonAge, converts to degrees, * and adjusts the result to be in the range [-180, 180]. * * @param time The time at which the moon's age is desired, @@ -567,7 +569,7 @@ int32_t IslamicCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, U month = (month % 12) + 11; } return monthStart(eyear, month) + ((cType == TBLA)? ASTRONOMICAL_EPOC: CIVIL_EPOC) - 1; -} +} //------------------------------------------------------------------------- // Functions for converting from milliseconds to field values @@ -596,7 +598,7 @@ int32_t IslamicCalendar::handleGetExtendedYear() { *
  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR -* +* * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -652,14 +654,14 @@ void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) }else{ int y =UMALQURA_YEAR_START-1, m =0; long d = 1; - while(d > 0){ - y++; + while(d > 0){ + y++; d = days - yearStart(y) +1; if(d == handleGetYearLength(y)){ m=11; break; }else if(d < handleGetYearLength(y) ){ - int monthLen = handleGetMonthLength(y, m); + int monthLen = handleGetMonthLength(y, m); m=0; while(d > monthLen){ d -= monthLen; @@ -688,14 +690,14 @@ void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) internalSet(UCAL_EXTENDED_YEAR, year); internalSet(UCAL_MONTH, month); internalSet(UCAL_DAY_OF_MONTH, dayOfMonth); - internalSet(UCAL_DAY_OF_YEAR, dayOfYear); -} + internalSet(UCAL_DAY_OF_YEAR, dayOfYear); +} UBool IslamicCalendar::inDaylightTime(UErrorCode& status) const { // copied from GregorianCalendar - if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) + if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) return FALSE; // Force an update of the state of the Calendar. @@ -706,7 +708,7 @@ IslamicCalendar::inDaylightTime(UErrorCode& status) const /** * The system maintains a static default century start date and Year. They are - * initialized the first time they are used. Once the system default century date + * initialized the first time they are used. Once the system default century date * and year are set, they do not change. */ static UDate gSystemDefaultCenturyStart = DBL_MIN; @@ -734,7 +736,7 @@ int32_t IslamicCalendar::defaultCenturyStartYear() const } -void U_CALLCONV +U_CFUNC void U_CALLCONV IslamicCalendar::initializeSystemDefaultCentury() { // initialize systemDefaultCentury and systemDefaultCenturyYear based @@ -760,3 +762,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IslamicCalendar) U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/islamcal.h b/deps/icu-small/source/i18n/islamcal.h index 8597ace92930b6..7f6faed8867a93 100644 --- a/deps/icu-small/source/i18n/islamcal.h +++ b/deps/icu-small/source/i18n/islamcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -30,7 +32,7 @@ U_NAMESPACE_BEGIN * is used as the civil calendar in most of the Arab world and the * liturgical calendar of the Islamic faith worldwide. This calendar * is also known as the "Hijri" calendar, since it starts at the time - * of Mohammed's emigration (or "hijra") to Medinah on Thursday, + * of Mohammed's emigration (or "hijra") to Medinah on Thursday, * July 15, 622 AD (Julian). *

    * The Islamic calendar is strictly lunar, and thus an Islamic year of twelve @@ -86,10 +88,10 @@ class U_I18N_API IslamicCalendar : public Calendar { //------------------------------------------------------------------------- // Constants... //------------------------------------------------------------------------- - + /** * Calendar type - civil or religious or um alqura - * @internal + * @internal */ enum ECalculationType { ASTRONOMICAL, @@ -97,86 +99,86 @@ class U_I18N_API IslamicCalendar : public Calendar { UMALQURA, TBLA }; - + /** * Constants for the months * @internal */ enum EMonths { /** - * Constant for Muharram, the 1st month of the Islamic year. + * Constant for Muharram, the 1st month of the Islamic year. * @internal */ MUHARRAM = 0, /** - * Constant for Safar, the 2nd month of the Islamic year. + * Constant for Safar, the 2nd month of the Islamic year. * @internal */ SAFAR = 1, /** - * Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year. - * @internal + * Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year. + * @internal */ RABI_1 = 2, /** - * Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year. - * @internal + * Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year. + * @internal */ RABI_2 = 3, /** - * Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year. - * @internal + * Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year. + * @internal */ JUMADA_1 = 4, /** - * Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year. - * @internal + * Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year. + * @internal */ JUMADA_2 = 5, /** - * Constant for Rajab, the 7th month of the Islamic year. - * @internal + * Constant for Rajab, the 7th month of the Islamic year. + * @internal */ RAJAB = 6, /** - * Constant for Sha'ban, the 8th month of the Islamic year. - * @internal + * Constant for Sha'ban, the 8th month of the Islamic year. + * @internal */ SHABAN = 7, /** - * Constant for Ramadan, the 9th month of the Islamic year. - * @internal + * Constant for Ramadan, the 9th month of the Islamic year. + * @internal */ RAMADAN = 8, /** - * Constant for Shawwal, the 10th month of the Islamic year. - * @internal + * Constant for Shawwal, the 10th month of the Islamic year. + * @internal */ SHAWWAL = 9, /** - * Constant for Dhu al-Qi'dah, the 11th month of the Islamic year. - * @internal + * Constant for Dhu al-Qi'dah, the 11th month of the Islamic year. + * @internal */ DHU_AL_QIDAH = 10, /** - * Constant for Dhu al-Hijjah, the 12th month of the Islamic year. - * @internal + * Constant for Dhu al-Hijjah, the 12th month of the Islamic year. + * @internal */ DHU_AL_HIJJAH = 11, - + ISLAMIC_MONTH_MAX - }; + }; //------------------------------------------------------------------------- @@ -215,7 +217,7 @@ class U_I18N_API IslamicCalendar : public Calendar { * @internal */ void setCalculationType(ECalculationType type, UErrorCode &status); - + /** * Returns true if this object is using the fixed-cycle civil * calendar, or false if using the religious, astronomical @@ -235,7 +237,7 @@ class U_I18N_API IslamicCalendar : public Calendar { * Determine whether a year is a leap year in the Islamic civil calendar */ static UBool civilLeapYear(int32_t year); - + /** * Return the day # on which the given year starts. Days are counted * from the Hijri epoch, origin 0. @@ -250,7 +252,7 @@ class U_I18N_API IslamicCalendar : public Calendar { * @param year The hijri month, 0-based */ int32_t monthStart(int32_t year, int32_t month) const; - + /** * Find the day number on which a particular month of the true/lunar * Islamic calendar starts. @@ -264,7 +266,7 @@ class U_I18N_API IslamicCalendar : public Calendar { /** * Return the "age" of the moon at the given time; this is the difference * in ecliptic latitude between the moon and the sun. This method simply - * calls CalendarAstronomer.moonAge, converts to degrees, + * calls CalendarAstronomer.moonAge, converts to degrees, * and adjusts the resultto be in the range [-180, 180]. * * @param time The time at which the moon's age is desired, @@ -275,7 +277,7 @@ class U_I18N_API IslamicCalendar : public Calendar { //------------------------------------------------------------------------- // Internal data.... // - + /** * CIVIL if this object uses the fixed-cycle Islamic civil calendar, * and ASTRONOMICAL if it approximates the true religious calendar using @@ -291,7 +293,7 @@ class U_I18N_API IslamicCalendar : public Calendar { * @internal */ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; - + /** * Return the length (in days) of the given month. * @@ -300,13 +302,13 @@ class U_I18N_API IslamicCalendar : public Calendar { * @internal */ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; - + /** * Return the number of days in the given Islamic year * @internal */ virtual int32_t handleGetYearLength(int32_t extendedYear) const; - + //------------------------------------------------------------------------- // Functions for converting from field values to milliseconds.... //------------------------------------------------------------------------- @@ -336,7 +338,7 @@ class U_I18N_API IslamicCalendar : public Calendar { *

  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -345,7 +347,7 @@ class U_I18N_API IslamicCalendar : public Calendar { virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); // UObject stuff - public: + public: /** * @return The class ID for this object. All objects of a given class have the * same class ID. Objects of other classes have different class IDs. @@ -417,10 +419,13 @@ class U_I18N_API IslamicCalendar : public Calendar { * are considered to fall within so that its start date is 80 years * before the current time. */ - static void initializeSystemDefaultCentury(void); + static void U_CALLCONV initializeSystemDefaultCentury(void); }; U_NAMESPACE_END #endif #endif + + + diff --git a/deps/icu-small/source/i18n/japancal.cpp b/deps/icu-small/source/i18n/japancal.cpp index e9b5483620ea7d..93ab8008b1aa45 100644 --- a/deps/icu-small/source/i18n/japancal.cpp +++ b/deps/icu-small/source/i18n/japancal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2009,2012,2016 International Business Machines Corporation and @@ -33,7 +35,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(JapaneseCalendar) // Gregorian date of each emperor's ascension // Years are AD, months are 1-based. -static const struct { +static const struct { int16_t year; int8_t month; int8_t day; @@ -280,7 +282,7 @@ static const struct { #define kEraCount UPRV_LENGTHOF(kEraInfo) /** - * The current era, for reference. + * The current era, for reference. */ static const int32_t kCurrentEra = (kEraCount-1); // int32_t to match the calendar field type @@ -322,7 +324,7 @@ const char *JapaneseCalendar::getType() const return "japanese"; } -int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) +int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) { int32_t era = internalGetEra(); // TODO do we assume we can trust 'era'? What if it is denormalized? @@ -339,7 +341,7 @@ int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) return month; } -int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) +int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) { int32_t era = internalGetEra(); int32_t day = 1; @@ -457,7 +459,7 @@ void JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status } /* -Disable pivoting +Disable pivoting */ UBool JapaneseCalendar::haveDefaultCentury() const { diff --git a/deps/icu-small/source/i18n/japancal.h b/deps/icu-small/source/i18n/japancal.h index f4c405eba9805a..6aef7eabeebfd5 100644 --- a/deps/icu-small/source/i18n/japancal.h +++ b/deps/icu-small/source/i18n/japancal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2008, International Business Machines Corporation @@ -41,7 +43,7 @@ U_NAMESPACE_BEGIN * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the rest * of the year was in the Heisei era, e.g. "January 7, 1 Heisei". This class * handles this distinction correctly when computing dates. However, in lenient - * mode either form of date is acceptable as input. + * mode either form of date is acceptable as input. *

    * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji), * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei). Constants @@ -57,7 +59,7 @@ class JapaneseCalendar : public GregorianCalendar { public: /** - * Useful constants for JapaneseCalendar. + * Useful constants for JapaneseCalendar. * @internal */ U_I18N_API static uint32_t U_EXPORT2 getCurrentEra(void); // the current era @@ -102,7 +104,7 @@ class JapaneseCalendar : public GregorianCalendar { virtual Calendar* clone(void) const; /** - * Return the extended year defined by the current fields. In the + * Return the extended year defined by the current fields. In the * Japanese calendar case, this is equal to the equivalent extended Gregorian year. * @internal */ @@ -151,7 +153,7 @@ class JapaneseCalendar : public GregorianCalendar { /** * @return FALSE - no default century in Japanese - * @internal + * @internal */ virtual UBool haveDefaultCentury() const; @@ -170,7 +172,7 @@ class JapaneseCalendar : public GregorianCalendar { JapaneseCalendar(); // default constructor not implemented protected: - /** + /** * Calculate the era for internal computation * @internal */ @@ -190,7 +192,7 @@ class JapaneseCalendar : public GregorianCalendar { /*** * Called by computeJulianDay. Returns the default month (0-based) for the year, - * taking year and era into account. Will return the first month of the given era, if + * taking year and era into account. Will return the first month of the given era, if * the current year is an ascension year. * @param eyear the extended year * @internal @@ -214,3 +216,4 @@ U_NAMESPACE_END #endif //eof + diff --git a/deps/icu-small/source/i18n/measfmt.cpp b/deps/icu-small/source/i18n/measfmt.cpp index f8f46a9a95d654..b5a9156ec2cee7 100644 --- a/deps/icu-small/source/i18n/measfmt.cpp +++ b/deps/icu-small/source/i18n/measfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -39,7 +41,7 @@ #include "standardplural.h" #include "unifiedcache.h" -#define MEAS_UNIT_COUNT 134 +#define MEAS_UNIT_COUNT 138 #define WIDTH_INDEX_COUNT (UMEASFMT_WIDTH_NARROW + 1) U_NAMESPACE_BEGIN @@ -64,9 +66,9 @@ class NumericDateFormatters : public UMemory { const UnicodeString &hm, const UnicodeString &ms, const UnicodeString &hms, - UErrorCode &status) : + UErrorCode &status) : hourMinute(hm, status), - minuteSecond(ms, status), + minuteSecond(ms, status), hourMinuteSecond(hms, status) { const TimeZone *gmt = TimeZone::getGMT(); hourMinute.setTimeZone(*gmt); @@ -108,6 +110,7 @@ class MeasureFormatCacheData : public SharedObject { UMeasureFormatWidth widthFallback[WIDTH_INDEX_COUNT]; /** Measure unit -> format width -> array of patterns ("{0} meters") (plurals + PER_UNIT_INDEX) */ SimpleFormatter *patterns[MEAS_UNIT_COUNT][WIDTH_INDEX_COUNT][PATTERN_COUNT]; + const UChar* dnams[MEAS_UNIT_COUNT][WIDTH_INDEX_COUNT]; SimpleFormatter perFormatters[WIDTH_INDEX_COUNT]; MeasureFormatCacheData(); @@ -157,6 +160,7 @@ MeasureFormatCacheData::MeasureFormatCacheData() { currencyFormats[i] = NULL; } uprv_memset(patterns, 0, sizeof(patterns)); + uprv_memset(dnams, 0, sizeof(dnams)); integerFormat = NULL; numericDateFormatters = NULL; } @@ -172,6 +176,7 @@ MeasureFormatCacheData::~MeasureFormatCacheData() { } } } + // Note: the contents of 'dnams' are pointers into the resource bundle delete integerFormat; delete numericDateFormatters; } @@ -213,117 +218,135 @@ static const UChar gNarrow[] = { 0x4E, 0x61, 0x72, 0x72, 0x6F, 0x77 }; * C++: Each inner sink class has a reference to the main outer sink. * Java: Use non-static inner classes instead. */ -struct UnitDataSink : public ResourceTableSink { - /** - * Sink for a table of display patterns. For example, - * unitsShort/duration/hour contains other{"{0} hrs"}. - */ - struct UnitPatternSink : public ResourceTableSink { - UnitPatternSink(UnitDataSink &sink) : outer(sink) {} - ~UnitPatternSink(); - - void setFormatterIfAbsent(int32_t index, const ResourceValue &value, - int32_t minPlaceholders, UErrorCode &errorCode) { - SimpleFormatter **patterns = - &outer.cacheData.patterns[outer.unitIndex][outer.width][0]; - if (U_SUCCESS(errorCode) && patterns[index] == NULL) { +struct UnitDataSink : public ResourceSink { + + // Output data. + MeasureFormatCacheData &cacheData; + + // Path to current data. + UMeasureFormatWidth width; + const char *type; + int32_t unitIndex; + + UnitDataSink(MeasureFormatCacheData &outputData) + : cacheData(outputData), + width(UMEASFMT_WIDTH_COUNT), type(NULL), unitIndex(0) {} + ~UnitDataSink(); + + void setFormatterIfAbsent(int32_t index, const ResourceValue &value, + int32_t minPlaceholders, UErrorCode &errorCode) { + SimpleFormatter **patterns = &cacheData.patterns[unitIndex][width][0]; + if (U_SUCCESS(errorCode) && patterns[index] == NULL) { + if (minPlaceholders >= 0) { patterns[index] = new SimpleFormatter( - value.getUnicodeString(errorCode), minPlaceholders, 1, errorCode); - if (U_SUCCESS(errorCode) && patterns[index] == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - } + value.getUnicodeString(errorCode), minPlaceholders, 1, errorCode); + } + if (U_SUCCESS(errorCode) && patterns[index] == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; } } + } - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - if (uprv_strcmp(key, "dnam") == 0) { - // Skip the unit display name for now. - } else if (uprv_strcmp(key, "per") == 0) { - // For example, "{0}/h". - setFormatterIfAbsent(MeasureFormatCacheData::PER_UNIT_INDEX, value, 1, errorCode); - } else { - // The key must be one of the plural form strings. For example: - // one{"{0} hr"} - // other{"{0} hrs"} - setFormatterIfAbsent(StandardPlural::indexFromString(key, errorCode), value, 0, - errorCode); - } + void setDnamIfAbsent(const ResourceValue &value, UErrorCode& errorCode) { + if (cacheData.dnams[unitIndex][width] == NULL) { + int32_t length; + cacheData.dnams[unitIndex][width] = value.getString(length, errorCode); } - UnitDataSink &outer; - } patternSink; + } /** - * Sink for a table of per-unit tables. For example, + * Consume a display pattern. For example, + * unitsShort/duration/hour contains other{"{0} hrs"}. + */ + void consumePattern(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + if (uprv_strcmp(key, "dnam") == 0) { + // The display name for the unit in the current width. + setDnamIfAbsent(value, errorCode); + } else if (uprv_strcmp(key, "per") == 0) { + // For example, "{0}/h". + setFormatterIfAbsent(MeasureFormatCacheData::PER_UNIT_INDEX, value, 1, errorCode); + } else { + // The key must be one of the plural form strings. For example: + // one{"{0} hr"} + // other{"{0} hrs"} + setFormatterIfAbsent(StandardPlural::indexFromString(key, errorCode), value, 0, + errorCode); + } + } + + /** + * Consume a table of per-unit tables. For example, * unitsShort/duration contains tables for duration-unit subtypes day & hour. */ - struct UnitSubtypeSink : public ResourceTableSink { - UnitSubtypeSink(UnitDataSink &sink) : outer(sink) {} - ~UnitSubtypeSink(); - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.unitIndex = MeasureUnit::internalGetIndexForTypeAndSubtype(outer.type, key); - if (outer.unitIndex >= 0) { - return &outer.patternSink; + void consumeSubtypeTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + unitIndex = MeasureUnit::internalGetIndexForTypeAndSubtype(type, key); + if (unitIndex < 0) { + // TODO: How to handle unexpected data? + // See http://bugs.icu-project.org/trac/ticket/12597 + return; + } + + if (value.getType() == URES_STRING) { + // Units like "coordinate" that don't have plural variants + setFormatterIfAbsent(StandardPlural::OTHER, value, 0, errorCode); + } else if (value.getType() == URES_TABLE) { + // Units that have plural variants + ResourceTable patternTableTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; patternTableTable.getKeyAndValue(i, key, value); ++i) { + consumePattern(key, value, errorCode); } - return NULL; + } else { + // TODO: How to handle unexpected data? + // See http://bugs.icu-project.org/trac/ticket/12597 + return; } - UnitDataSink &outer; - } subtypeSink; + } /** - * Sink for compound x-per-y display pattern. For example, + * Consume compound x-per-y display pattern. For example, * unitsShort/compound/per may be "{0}/{1}". */ - struct UnitCompoundSink : public ResourceTableSink { - UnitCompoundSink(UnitDataSink &sink) : outer(sink) {} - ~UnitCompoundSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_SUCCESS(errorCode) && uprv_strcmp(key, "per") == 0) { - outer.cacheData.perFormatters[outer.width]. - applyPatternMinMaxArguments(value.getUnicodeString(errorCode), 2, 2, errorCode); - } + void consumeCompoundPattern(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode) && uprv_strcmp(key, "per") == 0) { + cacheData.perFormatters[width]. + applyPatternMinMaxArguments(value.getUnicodeString(errorCode), 2, 2, errorCode); } - UnitDataSink &outer; - } compoundSink; + } /** - * Sink for a table of unit type tables. For example, + * Consume a table of unit type tables. For example, * unitsShort contains tables for area & duration. * It also contains a table for the compound/per pattern. */ - struct UnitTypeSink : public ResourceTableSink { - UnitTypeSink(UnitDataSink &sink) : outer(sink) {} - ~UnitTypeSink(); - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - if (uprv_strcmp(key, "currency") == 0) { - // Skip. - } else if (uprv_strcmp(key, "compound") == 0) { - if (!outer.cacheData.hasPerFormatter(outer.width)) { - return &outer.compoundSink; + void consumeUnitTypesTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + if (uprv_strcmp(key, "currency") == 0) { + // Skip. + } else if (uprv_strcmp(key, "compound") == 0) { + if (!cacheData.hasPerFormatter(width)) { + ResourceTable compoundTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; compoundTable.getKeyAndValue(i, key, value); ++i) { + consumeCompoundPattern(key, value, errorCode); } - } else { - outer.type = key; - return &outer.subtypeSink; } - return NULL; + } else { + type = key; + ResourceTable subtypeTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; subtypeTable.getKeyAndValue(i, key, value); ++i) { + consumeSubtypeTable(key, value, errorCode); + } } - UnitDataSink &outer; - } typeSink; + } - UnitDataSink(MeasureFormatCacheData &outputData) - : patternSink(*this), subtypeSink(*this), compoundSink(*this), typeSink(*this), - cacheData(outputData), - width(UMEASFMT_WIDTH_COUNT), type(NULL), unitIndex(0) {} - ~UnitDataSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + void consumeAlias(const char *key, const ResourceValue &value, UErrorCode &errorCode) { // Handle aliases like // units:alias{"/LOCALE/unitsShort"} // which should only occur in the root bundle. - if (U_FAILURE(errorCode) || value.getType() != URES_ALIAS) { return; } UMeasureFormatWidth sourceWidth = widthFromKey(key); if (sourceWidth == UMEASFMT_WIDTH_COUNT) { // Alias from something we don't care about. @@ -342,12 +365,15 @@ struct UnitDataSink : public ResourceTableSink { } cacheData.widthFallback[sourceWidth] = targetWidth; } - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { + + void consumeTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { if (U_SUCCESS(errorCode) && (width = widthFromKey(key)) != UMEASFMT_WIDTH_COUNT) { - return &typeSink; + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + consumeUnitTypesTable(key, value, errorCode); + } } - return NULL; } static UMeasureFormatWidth widthFromKey(const char *key) { @@ -382,20 +408,22 @@ struct UnitDataSink : public ResourceTableSink { return UMEASFMT_WIDTH_COUNT; } - // Output data. - MeasureFormatCacheData &cacheData; - - // Path to current data. - UMeasureFormatWidth width; - const char *type; - int32_t unitIndex; + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + // Main entry point to sink + ResourceTable widthsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; widthsTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_ALIAS) { + consumeAlias(key, value, errorCode); + } else { + consumeTable(key, value, errorCode); + } + } + } }; // Virtual destructors must be defined out of line. -UnitDataSink::UnitPatternSink::~UnitPatternSink() {} -UnitDataSink::UnitSubtypeSink::~UnitSubtypeSink() {} -UnitDataSink::UnitCompoundSink::~UnitCompoundSink() {} -UnitDataSink::UnitTypeSink::~UnitTypeSink() {} UnitDataSink::~UnitDataSink() {} } // namespace @@ -405,7 +433,7 @@ static UBool loadMeasureUnitData( MeasureFormatCacheData &cacheData, UErrorCode &status) { UnitDataSink sink(cacheData); - ures_getAllTableItemsWithFallback(resource, "", sink, status); + ures_getAllItemsWithFallback(resource, "", sink, status); return U_SUCCESS(status); } @@ -484,8 +512,14 @@ const MeasureFormatCacheData *LocaleCacheKey::createObje } for (int32_t i = 0; i < WIDTH_INDEX_COUNT; ++i) { + // NumberFormat::createInstance can erase warning codes from status, so pass it + // a separate status instance + UErrorCode localStatus = U_ZERO_ERROR; result->adoptCurrencyFormat(i, NumberFormat::createInstance( - localeId, currencyStyles[i], status)); + localeId, currencyStyles[i], localStatus)); + if (localStatus != U_ZERO_ERROR) { + status = localStatus; + } if (U_FAILURE(status)) { return NULL; } @@ -585,7 +619,7 @@ MeasureFormat::MeasureFormat( const Locale &locale, UMeasureFormatWidth w, NumberFormat *nfToAdopt, - UErrorCode &status) + UErrorCode &status) : cache(NULL), numberFormat(NULL), pluralRules(NULL), @@ -795,6 +829,24 @@ UnicodeString &MeasureFormat::formatMeasures( return appendTo; } +UnicodeString MeasureFormat::getUnitDisplayName(const MeasureUnit& unit, UErrorCode& /*status*/) const { + UMeasureFormatWidth width = getRegularWidth(this->width); + const UChar* const* styleToDnam = cache->dnams[unit.getIndex()]; + const UChar* dnam = styleToDnam[width]; + if (dnam == NULL) { + int32_t fallbackWidth = cache->widthFallback[width]; + dnam = styleToDnam[fallbackWidth]; + } + + UnicodeString result; + if (dnam == NULL) { + result.setToBogus(); + } else { + result.setTo(dnam, -1); + } + return result; +} + void MeasureFormat::initMeasureFormat( const Locale &locale, UMeasureFormatWidth w, @@ -863,7 +915,7 @@ UBool MeasureFormat::setMeasureFormatLocale(const Locale &locale, UErrorCode &st } initMeasureFormat(locale, width, NULL, status); return U_SUCCESS(status); -} +} const NumberFormat &MeasureFormat::getNumberFormat() const { return **numberFormat; @@ -917,7 +969,7 @@ UnicodeString &MeasureFormat::formatNumeric( if (U_FAILURE(status)) { return appendTo; } - UDate millis = + UDate millis = (UDate) (((uprv_trunc(hms[0].getDouble(status)) * 60.0 + uprv_trunc(hms[1].getDouble(status))) * 60.0 + uprv_trunc(hms[2].getDouble(status))) * 1000.0); diff --git a/deps/icu-small/source/i18n/measunit.cpp b/deps/icu-small/source/i18n/measunit.cpp index ad540b5085e36e..d780b80ce252a7 100644 --- a/deps/icu-small/source/i18n/measunit.cpp +++ b/deps/icu-small/source/i18n/measunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -38,20 +40,21 @@ static const int32_t gOffsets[] = { 16, 20, 24, - 284, - 294, - 305, + 28, + 288, + 298, 309, - 315, + 313, 319, - 338, - 339, - 350, - 356, - 361, + 323, + 342, + 343, + 354, + 360, 365, 369, - 394 + 373, + 398 }; static const int32_t gIndexes[] = { @@ -61,20 +64,21 @@ static const int32_t gIndexes[] = { 16, 20, 24, - 24, - 34, - 45, + 28, + 28, + 38, 49, - 55, + 53, 59, - 78, - 79, - 90, - 96, - 101, + 63, + 82, + 83, + 94, + 100, 105, 109, - 134 + 113, + 138 }; // Must be sorted alphabetically. @@ -84,6 +88,7 @@ static const char * const gTypes[] = { "area", "concentr", "consumption", + "coordinate", "currency", "digital", "duration", @@ -126,6 +131,10 @@ static const char * const gSubTypes[] = { "liter-per-kilometer", "mile-per-gallon", "mile-per-gallon-imperial", + "east", + "north", + "south", + "west", "ADP", "AED", "AFA", @@ -500,14 +509,14 @@ static const char * const gSubTypes[] = { // Must be sorted by first value and then second value. static int32_t unitPerUnitToSingleUnit[][4] = { - {326, 296, 16, 0}, - {328, 302, 16, 2}, - {330, 296, 16, 3}, - {330, 383, 4, 2}, - {330, 384, 4, 3}, - {344, 381, 3, 1}, - {347, 11, 15, 4}, - {386, 326, 4, 1} + {330, 300, 17, 0}, + {332, 306, 17, 2}, + {334, 300, 17, 3}, + {334, 387, 4, 2}, + {334, 388, 4, 3}, + {348, 385, 3, 1}, + {351, 11, 16, 4}, + {390, 330, 4, 1} }; MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) { @@ -606,444 +615,460 @@ MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) { return MeasureUnit::create(4, 3, status); } +MeasureUnit *MeasureUnit::createEast(UErrorCode &status) { + return MeasureUnit::create(5, 0, status); +} + +MeasureUnit *MeasureUnit::createNorth(UErrorCode &status) { + return MeasureUnit::create(5, 1, status); +} + +MeasureUnit *MeasureUnit::createSouth(UErrorCode &status) { + return MeasureUnit::create(5, 2, status); +} + +MeasureUnit *MeasureUnit::createWest(UErrorCode &status) { + return MeasureUnit::create(5, 3, status); +} + MeasureUnit *MeasureUnit::createBit(UErrorCode &status) { - return MeasureUnit::create(6, 0, status); + return MeasureUnit::create(7, 0, status); } MeasureUnit *MeasureUnit::createByte(UErrorCode &status) { - return MeasureUnit::create(6, 1, status); + return MeasureUnit::create(7, 1, status); } MeasureUnit *MeasureUnit::createGigabit(UErrorCode &status) { - return MeasureUnit::create(6, 2, status); + return MeasureUnit::create(7, 2, status); } MeasureUnit *MeasureUnit::createGigabyte(UErrorCode &status) { - return MeasureUnit::create(6, 3, status); + return MeasureUnit::create(7, 3, status); } MeasureUnit *MeasureUnit::createKilobit(UErrorCode &status) { - return MeasureUnit::create(6, 4, status); + return MeasureUnit::create(7, 4, status); } MeasureUnit *MeasureUnit::createKilobyte(UErrorCode &status) { - return MeasureUnit::create(6, 5, status); + return MeasureUnit::create(7, 5, status); } MeasureUnit *MeasureUnit::createMegabit(UErrorCode &status) { - return MeasureUnit::create(6, 6, status); + return MeasureUnit::create(7, 6, status); } MeasureUnit *MeasureUnit::createMegabyte(UErrorCode &status) { - return MeasureUnit::create(6, 7, status); + return MeasureUnit::create(7, 7, status); } MeasureUnit *MeasureUnit::createTerabit(UErrorCode &status) { - return MeasureUnit::create(6, 8, status); + return MeasureUnit::create(7, 8, status); } MeasureUnit *MeasureUnit::createTerabyte(UErrorCode &status) { - return MeasureUnit::create(6, 9, status); + return MeasureUnit::create(7, 9, status); } MeasureUnit *MeasureUnit::createCentury(UErrorCode &status) { - return MeasureUnit::create(7, 0, status); + return MeasureUnit::create(8, 0, status); } MeasureUnit *MeasureUnit::createDay(UErrorCode &status) { - return MeasureUnit::create(7, 1, status); + return MeasureUnit::create(8, 1, status); } MeasureUnit *MeasureUnit::createHour(UErrorCode &status) { - return MeasureUnit::create(7, 2, status); + return MeasureUnit::create(8, 2, status); } MeasureUnit *MeasureUnit::createMicrosecond(UErrorCode &status) { - return MeasureUnit::create(7, 3, status); + return MeasureUnit::create(8, 3, status); } MeasureUnit *MeasureUnit::createMillisecond(UErrorCode &status) { - return MeasureUnit::create(7, 4, status); + return MeasureUnit::create(8, 4, status); } MeasureUnit *MeasureUnit::createMinute(UErrorCode &status) { - return MeasureUnit::create(7, 5, status); + return MeasureUnit::create(8, 5, status); } MeasureUnit *MeasureUnit::createMonth(UErrorCode &status) { - return MeasureUnit::create(7, 6, status); + return MeasureUnit::create(8, 6, status); } MeasureUnit *MeasureUnit::createNanosecond(UErrorCode &status) { - return MeasureUnit::create(7, 7, status); + return MeasureUnit::create(8, 7, status); } MeasureUnit *MeasureUnit::createSecond(UErrorCode &status) { - return MeasureUnit::create(7, 8, status); + return MeasureUnit::create(8, 8, status); } MeasureUnit *MeasureUnit::createWeek(UErrorCode &status) { - return MeasureUnit::create(7, 9, status); + return MeasureUnit::create(8, 9, status); } MeasureUnit *MeasureUnit::createYear(UErrorCode &status) { - return MeasureUnit::create(7, 10, status); + return MeasureUnit::create(8, 10, status); } MeasureUnit *MeasureUnit::createAmpere(UErrorCode &status) { - return MeasureUnit::create(8, 0, status); + return MeasureUnit::create(9, 0, status); } MeasureUnit *MeasureUnit::createMilliampere(UErrorCode &status) { - return MeasureUnit::create(8, 1, status); + return MeasureUnit::create(9, 1, status); } MeasureUnit *MeasureUnit::createOhm(UErrorCode &status) { - return MeasureUnit::create(8, 2, status); + return MeasureUnit::create(9, 2, status); } MeasureUnit *MeasureUnit::createVolt(UErrorCode &status) { - return MeasureUnit::create(8, 3, status); + return MeasureUnit::create(9, 3, status); } MeasureUnit *MeasureUnit::createCalorie(UErrorCode &status) { - return MeasureUnit::create(9, 0, status); + return MeasureUnit::create(10, 0, status); } MeasureUnit *MeasureUnit::createFoodcalorie(UErrorCode &status) { - return MeasureUnit::create(9, 1, status); + return MeasureUnit::create(10, 1, status); } MeasureUnit *MeasureUnit::createJoule(UErrorCode &status) { - return MeasureUnit::create(9, 2, status); + return MeasureUnit::create(10, 2, status); } MeasureUnit *MeasureUnit::createKilocalorie(UErrorCode &status) { - return MeasureUnit::create(9, 3, status); + return MeasureUnit::create(10, 3, status); } MeasureUnit *MeasureUnit::createKilojoule(UErrorCode &status) { - return MeasureUnit::create(9, 4, status); + return MeasureUnit::create(10, 4, status); } MeasureUnit *MeasureUnit::createKilowattHour(UErrorCode &status) { - return MeasureUnit::create(9, 5, status); + return MeasureUnit::create(10, 5, status); } MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) { - return MeasureUnit::create(10, 0, status); + return MeasureUnit::create(11, 0, status); } MeasureUnit *MeasureUnit::createHertz(UErrorCode &status) { - return MeasureUnit::create(10, 1, status); + return MeasureUnit::create(11, 1, status); } MeasureUnit *MeasureUnit::createKilohertz(UErrorCode &status) { - return MeasureUnit::create(10, 2, status); + return MeasureUnit::create(11, 2, status); } MeasureUnit *MeasureUnit::createMegahertz(UErrorCode &status) { - return MeasureUnit::create(10, 3, status); + return MeasureUnit::create(11, 3, status); } MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) { - return MeasureUnit::create(11, 0, status); + return MeasureUnit::create(12, 0, status); } MeasureUnit *MeasureUnit::createCentimeter(UErrorCode &status) { - return MeasureUnit::create(11, 1, status); + return MeasureUnit::create(12, 1, status); } MeasureUnit *MeasureUnit::createDecimeter(UErrorCode &status) { - return MeasureUnit::create(11, 2, status); + return MeasureUnit::create(12, 2, status); } MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) { - return MeasureUnit::create(11, 3, status); + return MeasureUnit::create(12, 3, status); } MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) { - return MeasureUnit::create(11, 4, status); + return MeasureUnit::create(12, 4, status); } MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) { - return MeasureUnit::create(11, 5, status); + return MeasureUnit::create(12, 5, status); } MeasureUnit *MeasureUnit::createInch(UErrorCode &status) { - return MeasureUnit::create(11, 6, status); + return MeasureUnit::create(12, 6, status); } MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) { - return MeasureUnit::create(11, 7, status); + return MeasureUnit::create(12, 7, status); } MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) { - return MeasureUnit::create(11, 8, status); + return MeasureUnit::create(12, 8, status); } MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) { - return MeasureUnit::create(11, 9, status); + return MeasureUnit::create(12, 9, status); } MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) { - return MeasureUnit::create(11, 10, status); + return MeasureUnit::create(12, 10, status); } MeasureUnit *MeasureUnit::createMile(UErrorCode &status) { - return MeasureUnit::create(11, 11, status); + return MeasureUnit::create(12, 11, status); } MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) { - return MeasureUnit::create(11, 12, status); + return MeasureUnit::create(12, 12, status); } MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) { - return MeasureUnit::create(11, 13, status); + return MeasureUnit::create(12, 13, status); } MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) { - return MeasureUnit::create(11, 14, status); + return MeasureUnit::create(12, 14, status); } MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) { - return MeasureUnit::create(11, 15, status); + return MeasureUnit::create(12, 15, status); } MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) { - return MeasureUnit::create(11, 16, status); + return MeasureUnit::create(12, 16, status); } MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) { - return MeasureUnit::create(11, 17, status); + return MeasureUnit::create(12, 17, status); } MeasureUnit *MeasureUnit::createYard(UErrorCode &status) { - return MeasureUnit::create(11, 18, status); + return MeasureUnit::create(12, 18, status); } MeasureUnit *MeasureUnit::createLux(UErrorCode &status) { - return MeasureUnit::create(12, 0, status); + return MeasureUnit::create(13, 0, status); } MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) { - return MeasureUnit::create(13, 0, status); + return MeasureUnit::create(14, 0, status); } MeasureUnit *MeasureUnit::createGram(UErrorCode &status) { - return MeasureUnit::create(13, 1, status); + return MeasureUnit::create(14, 1, status); } MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) { - return MeasureUnit::create(13, 2, status); + return MeasureUnit::create(14, 2, status); } MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) { - return MeasureUnit::create(13, 3, status); + return MeasureUnit::create(14, 3, status); } MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) { - return MeasureUnit::create(13, 4, status); + return MeasureUnit::create(14, 4, status); } MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) { - return MeasureUnit::create(13, 5, status); + return MeasureUnit::create(14, 5, status); } MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) { - return MeasureUnit::create(13, 6, status); + return MeasureUnit::create(14, 6, status); } MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) { - return MeasureUnit::create(13, 7, status); + return MeasureUnit::create(14, 7, status); } MeasureUnit *MeasureUnit::createPound(UErrorCode &status) { - return MeasureUnit::create(13, 8, status); + return MeasureUnit::create(14, 8, status); } MeasureUnit *MeasureUnit::createStone(UErrorCode &status) { - return MeasureUnit::create(13, 9, status); + return MeasureUnit::create(14, 9, status); } MeasureUnit *MeasureUnit::createTon(UErrorCode &status) { - return MeasureUnit::create(13, 10, status); + return MeasureUnit::create(14, 10, status); } MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) { - return MeasureUnit::create(14, 0, status); + return MeasureUnit::create(15, 0, status); } MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) { - return MeasureUnit::create(14, 1, status); + return MeasureUnit::create(15, 1, status); } MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) { - return MeasureUnit::create(14, 2, status); + return MeasureUnit::create(15, 2, status); } MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) { - return MeasureUnit::create(14, 3, status); + return MeasureUnit::create(15, 3, status); } MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) { - return MeasureUnit::create(14, 4, status); + return MeasureUnit::create(15, 4, status); } MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) { - return MeasureUnit::create(14, 5, status); + return MeasureUnit::create(15, 5, status); } MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) { - return MeasureUnit::create(15, 0, status); + return MeasureUnit::create(16, 0, status); } MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) { - return MeasureUnit::create(15, 1, status); + return MeasureUnit::create(16, 1, status); } MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) { - return MeasureUnit::create(15, 2, status); + return MeasureUnit::create(16, 2, status); } MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) { - return MeasureUnit::create(15, 3, status); + return MeasureUnit::create(16, 3, status); } MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) { - return MeasureUnit::create(15, 4, status); + return MeasureUnit::create(16, 4, status); } MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) { - return MeasureUnit::create(16, 0, status); + return MeasureUnit::create(17, 0, status); } MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) { - return MeasureUnit::create(16, 1, status); + return MeasureUnit::create(17, 1, status); } MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) { - return MeasureUnit::create(16, 2, status); + return MeasureUnit::create(17, 2, status); } MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) { - return MeasureUnit::create(16, 3, status); + return MeasureUnit::create(17, 3, status); } MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) { - return MeasureUnit::create(17, 0, status); + return MeasureUnit::create(18, 0, status); } MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) { - return MeasureUnit::create(17, 1, status); + return MeasureUnit::create(18, 1, status); } MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) { - return MeasureUnit::create(17, 2, status); + return MeasureUnit::create(18, 2, status); } MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) { - return MeasureUnit::create(17, 3, status); + return MeasureUnit::create(18, 3, status); } MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) { - return MeasureUnit::create(18, 0, status); + return MeasureUnit::create(19, 0, status); } MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) { - return MeasureUnit::create(18, 1, status); + return MeasureUnit::create(19, 1, status); } MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) { - return MeasureUnit::create(18, 2, status); + return MeasureUnit::create(19, 2, status); } MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) { - return MeasureUnit::create(18, 3, status); + return MeasureUnit::create(19, 3, status); } MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) { - return MeasureUnit::create(18, 4, status); + return MeasureUnit::create(19, 4, status); } MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) { - return MeasureUnit::create(18, 5, status); + return MeasureUnit::create(19, 5, status); } MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) { - return MeasureUnit::create(18, 6, status); + return MeasureUnit::create(19, 6, status); } MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) { - return MeasureUnit::create(18, 7, status); + return MeasureUnit::create(19, 7, status); } MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) { - return MeasureUnit::create(18, 8, status); + return MeasureUnit::create(19, 8, status); } MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) { - return MeasureUnit::create(18, 9, status); + return MeasureUnit::create(19, 9, status); } MeasureUnit *MeasureUnit::createCup(UErrorCode &status) { - return MeasureUnit::create(18, 10, status); + return MeasureUnit::create(19, 10, status); } MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) { - return MeasureUnit::create(18, 11, status); + return MeasureUnit::create(19, 11, status); } MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) { - return MeasureUnit::create(18, 12, status); + return MeasureUnit::create(19, 12, status); } MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) { - return MeasureUnit::create(18, 13, status); + return MeasureUnit::create(19, 13, status); } MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) { - return MeasureUnit::create(18, 14, status); + return MeasureUnit::create(19, 14, status); } MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) { - return MeasureUnit::create(18, 15, status); + return MeasureUnit::create(19, 15, status); } MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) { - return MeasureUnit::create(18, 16, status); + return MeasureUnit::create(19, 16, status); } MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) { - return MeasureUnit::create(18, 17, status); + return MeasureUnit::create(19, 17, status); } MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) { - return MeasureUnit::create(18, 18, status); + return MeasureUnit::create(19, 18, status); } MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) { - return MeasureUnit::create(18, 19, status); + return MeasureUnit::create(19, 19, status); } MeasureUnit *MeasureUnit::createPint(UErrorCode &status) { - return MeasureUnit::create(18, 20, status); + return MeasureUnit::create(19, 20, status); } MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) { - return MeasureUnit::create(18, 21, status); + return MeasureUnit::create(19, 21, status); } MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) { - return MeasureUnit::create(18, 22, status); + return MeasureUnit::create(19, 22, status); } MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) { - return MeasureUnit::create(18, 23, status); + return MeasureUnit::create(19, 23, status); } MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) { - return MeasureUnit::create(18, 24, status); + return MeasureUnit::create(19, 24, status); } // End generated code @@ -1064,7 +1089,7 @@ static int32_t binarySearch( } return -1; } - + MeasureUnit::MeasureUnit(const MeasureUnit &other) : fTypeId(other.fTypeId), fSubTypeId(other.fSubTypeId) { uprv_strcpy(fCurrency, other.fCurrency); @@ -1236,7 +1261,7 @@ void MeasureUnit::initTime(const char *timeId) { fTypeId = result; result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId); U_ASSERT(result != -1); - fSubTypeId = result - gOffsets[fTypeId]; + fSubTypeId = result - gOffsets[fTypeId]; } void MeasureUnit::initCurrency(const char *isoCurrency) { diff --git a/deps/icu-small/source/i18n/measure.cpp b/deps/icu-small/source/i18n/measure.cpp index eb610e6f8fde46..3459e71b8077ca 100644 --- a/deps/icu-small/source/i18n/measure.cpp +++ b/deps/icu-small/source/i18n/measure.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/msgfmt.cpp b/deps/icu-small/source/i18n/msgfmt.cpp index 1fe2c8d622e04b..4658528050cfe1 100644 --- a/deps/icu-small/source/i18n/msgfmt.cpp +++ b/deps/icu-small/source/i18n/msgfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/msgfmt_impl.h b/deps/icu-small/source/i18n/msgfmt_impl.h index 0f56dee885ad53..d8e38f0493703c 100644 --- a/deps/icu-small/source/i18n/msgfmt_impl.h +++ b/deps/icu-small/source/i18n/msgfmt_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and @@ -15,7 +17,7 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING - + #include "unicode/msgfmt.h" #include "uvector.h" #include "unicode/strenum.h" diff --git a/deps/icu-small/source/i18n/name2uni.cpp b/deps/icu-small/source/i18n/name2uni.cpp index 45705e676a4014..14515921013708 100644 --- a/deps/icu-small/source/i18n/name2uni.cpp +++ b/deps/icu-small/source/i18n/name2uni.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines @@ -217,7 +219,7 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos openPos = -1; // close off candidate continue; // *** reprocess char32At(cursor) } - + // Check if c is a legal char. We assume here that // legal.contains(OPEN_DELIM) is FALSE, so when we abort a // name, we don't have to go back to openPos+1. @@ -229,7 +231,7 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos mode = 0; } } - + // Invalid character else { --cursor; // Backup and reprocess this character @@ -241,7 +243,7 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos cursor += U16_LENGTH(c); } - + offsets.contextLimit += limit - offsets.limit; offsets.limit = limit; // In incremental mode, only advance the cursor up to the last diff --git a/deps/icu-small/source/i18n/name2uni.h b/deps/icu-small/source/i18n/name2uni.h index 1324ec3e8d273d..2ba4c8f792b357 100644 --- a/deps/icu-small/source/i18n/name2uni.h +++ b/deps/icu-small/source/i18n/name2uni.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrlist.h b/deps/icu-small/source/i18n/nfrlist.h index 95e837883851ca..6b5b1e64377903 100644 --- a/deps/icu-small/source/i18n/nfrlist.h +++ b/deps/icu-small/source/i18n/nfrlist.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2012, International Business Machines @@ -36,7 +38,7 @@ class NFRuleList : public UMemory { uint32_t fCount; uint32_t fCapacity; public: - NFRuleList(uint32_t capacity = 10) + NFRuleList(uint32_t capacity = 10) : fStuff(capacity ? (NFRule**)uprv_malloc(capacity * sizeof(NFRule*)) : NULL) , fCount(0) , fCapacity(capacity) {} @@ -50,9 +52,9 @@ class NFRuleList : public UMemory { } NFRule* operator[](uint32_t index) const { return fStuff != NULL ? fStuff[index] : NULL; } NFRule* remove(uint32_t index) { - if (fStuff == NULL) { - return NULL; - } + if (fStuff == NULL) { + return NULL; + } NFRule* result = fStuff[index]; fCount -= 1; for (uint32_t i = index; i < fCount; ++i) { // assumes small arrays @@ -66,10 +68,10 @@ class NFRuleList : public UMemory { fStuff = (NFRule**)uprv_realloc(fStuff, fCapacity * sizeof(NFRule*)); // assume success } if (fStuff != NULL) { - fStuff[fCount++] = thing; + fStuff[fCount++] = thing; } else { - fCapacity = 0; - fCount = 0; + fCapacity = 0; + fCount = 0; } } uint32_t size() const { return fCount; } diff --git a/deps/icu-small/source/i18n/nfrs.cpp b/deps/icu-small/source/i18n/nfrs.cpp index 88f903cf201b76..94777b830cb467 100644 --- a/deps/icu-small/source/i18n/nfrs.cpp +++ b/deps/icu-small/source/i18n/nfrs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -815,7 +817,7 @@ int64_t util64_fromDouble(double d) { } else if (d > mant) { d = mant; } - UBool neg = d < 0; + UBool neg = d < 0; if (neg) { d = -d; } @@ -827,7 +829,7 @@ int64_t util64_fromDouble(double d) { return result; } -int64_t util64_pow(int32_t r, uint32_t e) { +int64_t util64_pow(int32_t r, uint32_t e) { if (r == 0) { return 0; } else if (e == 0) { @@ -841,12 +843,12 @@ int64_t util64_pow(int32_t r, uint32_t e) { } } -static const uint8_t asciiDigits[] = { +static const uint8_t asciiDigits[] = { 0x30u, 0x31u, 0x32u, 0x33u, 0x34u, 0x35u, 0x36u, 0x37u, 0x38u, 0x39u, 0x61u, 0x62u, 0x63u, 0x64u, 0x65u, 0x66u, 0x67u, 0x68u, 0x69u, 0x6au, 0x6bu, 0x6cu, 0x6du, 0x6eu, 0x6fu, 0x70u, 0x71u, 0x72u, 0x73u, 0x74u, 0x75u, 0x76u, - 0x77u, 0x78u, 0x79u, 0x7au, + 0x77u, 0x78u, 0x79u, 0x7au, }; static const UChar kUMinus = (UChar)0x002d; @@ -927,7 +929,7 @@ int64_t util64_utoi(const UChar* str, uint32_t radix) } uint32_t util64_toa(int64_t w, char* buf, uint32_t len, uint32_t radix, UBool raw) -{ +{ if (radix > 36) { radix = 36; } else if (radix < 2) { @@ -973,7 +975,7 @@ uint32_t util64_toa(int64_t w, char* buf, uint32_t len, uint32_t radix, UBool ra #endif uint32_t util64_tou(int64_t w, UChar* buf, uint32_t len, uint32_t radix, UBool raw) -{ +{ if (radix > 36) { radix = 36; } else if (radix < 2) { @@ -1022,3 +1024,4 @@ U_NAMESPACE_END /* U_HAVE_RBNF */ #endif + diff --git a/deps/icu-small/source/i18n/nfrs.h b/deps/icu-small/source/i18n/nfrs.h index 47c17e6fb5f502..b6aa579eb7233a 100644 --- a/deps/icu-small/source/i18n/nfrs.h +++ b/deps/icu-small/source/i18n/nfrs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -64,7 +66,7 @@ class NFRuleSet : public UMemory { const NFRule * findNormalRule(int64_t number) const; const NFRule * findDoubleRule(double number) const; const NFRule * findFractionRuleSetRule(double number) const; - + friend class NFSubstitution; private: @@ -105,3 +107,4 @@ U_NAMESPACE_END // NFRS_H #endif + diff --git a/deps/icu-small/source/i18n/nfrule.cpp b/deps/icu-small/source/i18n/nfrule.cpp index b162b197abe866..a188fe11a9e645 100644 --- a/deps/icu-small/source/i18n/nfrule.cpp +++ b/deps/icu-small/source/i18n/nfrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -1095,14 +1097,14 @@ NFRule::stripPrefix(UnicodeString& text, const UnicodeString& prefix, ParsePosit { // if the prefix text is empty, dump out without doing anything if (prefix.length() != 0) { - UErrorCode status = U_ZERO_ERROR; + UErrorCode status = U_ZERO_ERROR; // use prefixLength() to match the beginning of // "text" against "prefix". This function returns the // number of characters from "text" that matched (or 0 if // we didn't match the whole prefix) int32_t pfl = prefixLength(text, prefix, status); if (U_FAILURE(status)) { // Memory allocation error. - return; + return; } if (pfl != 0) { // if we got a successful match, update the parse position @@ -1157,9 +1159,9 @@ NFRule::matchToDelimiter(const UnicodeString& text, // use "sub"'s doParse() method to match the text before the // instance of "delimiter" we just found. if (!allIgnorable(delimiter, status)) { - if (U_FAILURE(status)) { //Memory allocation error. - return 0; - } + if (U_FAILURE(status)) { //Memory allocation error. + return 0; + } ParsePosition tempPP; Formattable result; diff --git a/deps/icu-small/source/i18n/nfrule.h b/deps/icu-small/source/i18n/nfrule.h index b4bc2cf28fbb7c..fe00cbe11cbb30 100644 --- a/deps/icu-small/source/i18n/nfrule.h +++ b/deps/icu-small/source/i18n/nfrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines @@ -44,9 +46,9 @@ class NFRule : public UMemory { }; static void makeRules(UnicodeString& definition, - NFRuleSet* ruleSet, - const NFRule* predecessor, - const RuleBasedNumberFormat* rbnf, + NFRuleSet* ruleSet, + const NFRule* predecessor, + const RuleBasedNumberFormat* rbnf, NFRuleList& ruleList, UErrorCode& status); @@ -69,9 +71,9 @@ class NFRule : public UMemory { void doFormat(int64_t number, UnicodeString& toAppendTo, int32_t pos, int32_t recursionCount, UErrorCode& status) const; void doFormat(double number, UnicodeString& toAppendTo, int32_t pos, int32_t recursionCount, UErrorCode& status) const; - UBool doParse(const UnicodeString& text, - ParsePosition& pos, - UBool isFractional, + UBool doParse(const UnicodeString& text, + ParsePosition& pos, + UBool isFractional, double upperBound, Formattable& result) const; @@ -79,7 +81,7 @@ class NFRule : public UMemory { void _appendRuleText(UnicodeString& result) const; - int32_t findTextLenient(const UnicodeString& str, const UnicodeString& key, + int32_t findTextLenient(const UnicodeString& str, const UnicodeString& key, int32_t startingAt, int32_t* resultCount) const; void setDecimalFormatSymbols(const DecimalFormatSymbols &newSymbols, UErrorCode& status); @@ -88,17 +90,17 @@ class NFRule : public UMemory { void parseRuleDescriptor(UnicodeString& descriptor, UErrorCode& status); void extractSubstitutions(const NFRuleSet* ruleSet, const UnicodeString &ruleText, const NFRule* predecessor, UErrorCode& status); NFSubstitution* extractSubstitution(const NFRuleSet* ruleSet, const NFRule* predecessor, UErrorCode& status); - + int16_t expectedExponent() const; int32_t indexOfAnyRulePrefix() const; double matchToDelimiter(const UnicodeString& text, int32_t startPos, double baseValue, - const UnicodeString& delimiter, ParsePosition& pp, const NFSubstitution* sub, + const UnicodeString& delimiter, ParsePosition& pp, const NFSubstitution* sub, double upperBound) const; void stripPrefix(UnicodeString& text, const UnicodeString& prefix, ParsePosition& pp) const; int32_t prefixLength(const UnicodeString& str, const UnicodeString& prefix, UErrorCode& status) const; UBool allIgnorable(const UnicodeString& str, UErrorCode& status) const; - int32_t findText(const UnicodeString& str, const UnicodeString& key, + int32_t findText(const UnicodeString& str, const UnicodeString& key, int32_t startingAt, int32_t* resultCount) const; private: @@ -123,3 +125,4 @@ U_NAMESPACE_END // NFRULE_H #endif + diff --git a/deps/icu-small/source/i18n/nfsubs.cpp b/deps/icu-small/source/i18n/nfsubs.cpp index ea570dc453c8f2..16bbdc17dab896 100644 --- a/deps/icu-small/source/i18n/nfsubs.cpp +++ b/deps/icu-small/source/i18n/nfsubs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -84,7 +86,7 @@ class MultiplierSubstitution : public NFSubstitution { } virtual ~MultiplierSubstitution(); - virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { + virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { divisor = uprv_pow(radix, exponent); ldivisor = util64_fromDouble(divisor); @@ -135,7 +137,7 @@ class ModulusSubstitution : public NFSubstitution { UErrorCode& status); virtual ~ModulusSubstitution(); - virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { + virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { divisor = uprv_pow(radix, exponent); ldivisor = util64_fromDouble(divisor); @@ -152,7 +154,7 @@ class ModulusSubstitution : public NFSubstitution { virtual int64_t transformNumber(int64_t number) const { return number % ldivisor; } virtual double transformNumber(double number) const { return uprv_fmod(number, divisor); } - virtual UBool doParse(const UnicodeString& text, + virtual UBool doParse(const UnicodeString& text, ParsePosition& parsePosition, double baseValue, double upperBound, @@ -275,7 +277,7 @@ class NumeratorSubstitution : public NFSubstitution { NFRuleSet* _ruleSet, const UnicodeString& description, UErrorCode& status) - : NFSubstitution(_pos, _ruleSet, fixdesc(description), status), denominator(_denominator) + : NFSubstitution(_pos, _ruleSet, fixdesc(description), status), denominator(_denominator) { ldenominator = util64_fromDouble(denominator); withZeros = description.endsWith(LTLT, 2); @@ -289,7 +291,7 @@ class NumeratorSubstitution : public NFSubstitution { virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/, int32_t /*recursionCount*/, UErrorCode& /*status*/) const {} virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const; - virtual UBool doParse(const UnicodeString& text, + virtual UBool doParse(const UnicodeString& text, ParsePosition& parsePosition, double baseValue, double upperBound, @@ -1057,7 +1059,7 @@ FractionalPartSubstitution::doSubstitution(double number, UnicodeString& toInser dl.set(number); dl.roundFixedPoint(20); // round to 20 fraction digits. dl.reduce(); // Removes any trailing zeros. - + UBool pad = FALSE; for (int32_t didx = dl.getCount()-1; didx>=dl.getDecimalAt(); didx--) { // Loop iterates over fraction digits, starting with the LSD. @@ -1232,8 +1234,8 @@ NumeratorSubstitution::doSubstitution(double number, UnicodeString& toInsertInto } } -UBool -NumeratorSubstitution::doParse(const UnicodeString& text, +UBool +NumeratorSubstitution::doParse(const UnicodeString& text, ParsePosition& parsePosition, double baseValue, double upperBound, @@ -1314,8 +1316,9 @@ NumeratorSubstitution::operator==(const NFSubstitution& rhs) const UOBJECT_DEFINE_RTTI_IMPLEMENTATION(NumeratorSubstitution) const UChar NumeratorSubstitution::LTLT[] = { 0x003c, 0x003c }; - + U_NAMESPACE_END /* U_HAVE_RBNF */ #endif + diff --git a/deps/icu-small/source/i18n/nfsubs.h b/deps/icu-small/source/i18n/nfsubs.h index e7a950a2dd0127..62d963dd48aed2 100644 --- a/deps/icu-small/source/i18n/nfsubs.h +++ b/deps/icu-small/source/i18n/nfsubs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -33,13 +35,13 @@ class NFSubstitution : public UObject { int32_t pos; const NFRuleSet* ruleSet; DecimalFormat* numberFormat; - + protected: NFSubstitution(int32_t pos, const NFRuleSet* ruleSet, const UnicodeString& description, UErrorCode& status); - + /** * Get the Ruleset of the object. * @return the Ruleset of the object. @@ -51,21 +53,21 @@ class NFSubstitution : public UObject { * @return the numberformat of this object. */ const DecimalFormat* getNumberFormat() const { return numberFormat; } - + public: - static NFSubstitution* makeSubstitution(int32_t pos, - const NFRule* rule, + static NFSubstitution* makeSubstitution(int32_t pos, + const NFRule* rule, const NFRule* predecessor, - const NFRuleSet* ruleSet, - const RuleBasedNumberFormat* rbnf, + const NFRuleSet* ruleSet, + const RuleBasedNumberFormat* rbnf, const UnicodeString& description, UErrorCode& status); - + /** * Destructor. */ virtual ~NFSubstitution(); - + /** * Return true if the given Format objects are semantically equal. * Objects of different subclasses are considered unequal. @@ -81,7 +83,7 @@ class NFSubstitution : public UObject { * @return true if the given Format objects are semantically unequal. */ UBool operator!=(const NFSubstitution& rhs) const { return !operator==(rhs); } - + /** * Sets the substitution's divisor. Used by NFRule.setBaseValue(). * A no-op for all substitutions except multiplier and modulus @@ -90,19 +92,19 @@ class NFSubstitution : public UObject { * @param exponent The exponent of the divisor */ virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status); - + /** * Replaces result with the string describing the substitution. * @param result Output param which will receive the string. */ virtual void toString(UnicodeString& result) const; - + void setDecimalFormatSymbols(const DecimalFormatSymbols &newSymbols, UErrorCode& status); //----------------------------------------------------------------------- // formatting //----------------------------------------------------------------------- - + /** * Performs a mathematical operation on the number, formats it using * either ruleSet or decimalFormat, and inserts the result into @@ -126,7 +128,7 @@ class NFSubstitution : public UObject { * position to determine exactly where to insert the new text) */ virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const; - + protected: /** * Subclasses override this function to perform some kind of @@ -149,12 +151,12 @@ class NFSubstitution : public UObject { * @return The result of performing the opreration on the number */ virtual double transformNumber(double number) const = 0; - + public: //----------------------------------------------------------------------- // parsing //----------------------------------------------------------------------- - + /** * Parses a string using the rule set or DecimalFormat belonging * to this substitution. If there's a match, a mathematical @@ -184,13 +186,13 @@ class NFSubstitution : public UObject { * no match this is new Long(0) (not null), and parsePosition * is left unchanged. */ - virtual UBool doParse(const UnicodeString& text, - ParsePosition& parsePosition, + virtual UBool doParse(const UnicodeString& text, + ParsePosition& parsePosition, double baseValue, - double upperBound, + double upperBound, UBool lenientParse, Formattable& result) const; - + /** * Derives a new value from the two values passed in. The two values * are typically either the base values of two rules (the one containing @@ -204,7 +206,7 @@ class NFSubstitution : public UObject { * partial parse result */ virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const = 0; - + /** * Calculates an upper bound when searching for a rule that matches * this substitution. Rules with base values greater than or equal @@ -215,24 +217,24 @@ class NFSubstitution : public UObject { * this substitution. */ virtual double calcUpperBound(double oldUpperBound) const = 0; - + //----------------------------------------------------------------------- // simple accessors //----------------------------------------------------------------------- - + /** * Returns the substitution's position in the rule that owns it. * @return The substitution's position in the rule that owns it. */ int32_t getPos() const { return pos; } - + /** * Returns the character used in the textual representation of * substitutions of this type. Used by toString(). * @return This substitution's token character. */ virtual UChar tokenChar() const = 0; - + /** * Returns true if this is a modulus substitution. (We didn't do this * with instanceof partially because it causes source files to @@ -240,7 +242,7 @@ class NFSubstitution : public UObject { * @return true if this object is an instance of ModulusSubstitution */ virtual UBool isModulusSubstitution() const; - + private: NFSubstitution(const NFSubstitution &other); // forbid copying of this class NFSubstitution &operator=(const NFSubstitution &other); // forbid copying of this class diff --git a/deps/icu-small/source/i18n/nortrans.cpp b/deps/icu-small/source/i18n/nortrans.cpp index 038a6836c3bca2..da0206776ced93 100644 --- a/deps/icu-small/source/i18n/nortrans.cpp +++ b/deps/icu-small/source/i18n/nortrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/nortrans.h b/deps/icu-small/source/i18n/nortrans.h index 634f534f7d410e..79d1be3b072179 100644 --- a/deps/icu-small/source/i18n/nortrans.h +++ b/deps/icu-small/source/i18n/nortrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2010, International Business Machines diff --git a/deps/icu-small/source/i18n/nultrans.cpp b/deps/icu-small/source/i18n/nultrans.cpp index 820c43d07e9fe4..600873e3735f41 100644 --- a/deps/icu-small/source/i18n/nultrans.cpp +++ b/deps/icu-small/source/i18n/nultrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2005, International Business Machines diff --git a/deps/icu-small/source/i18n/nultrans.h b/deps/icu-small/source/i18n/nultrans.h index 699c323f8c6e06..a9856bde5b2b2e 100644 --- a/deps/icu-small/source/i18n/nultrans.h +++ b/deps/icu-small/source/i18n/nultrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/numfmt.cpp b/deps/icu-small/source/i18n/numfmt.cpp index 3f10bbf1b44e40..ef0851911f6621 100644 --- a/deps/icu-small/source/i18n/numfmt.cpp +++ b/deps/icu-small/source/i18n/numfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and @@ -119,7 +121,7 @@ static const UChar * const gLastResortNumberPatterns[UNUM_FORMAT_STYLE_COUNT] = gLastResortIsoCurrencyPat, // UNUM_CURRENCY_ISO gLastResortPluralCurrencyPat, // UNUM_CURRENCY_PLURAL gLastResortAccountingCurrencyPat, // UNUM_CURRENCY_ACCOUNTING - gLastResortCurrencyPat, // UNUM_CASH_CURRENCY + gLastResortCurrencyPat, // UNUM_CASH_CURRENCY NULL, // UNUM_DECIMAL_COMPACT_SHORT NULL, // UNUM_DECIMAL_COMPACT_LONG gLastResortCurrencyPat, // UNUM_CURRENCY_STANDARD @@ -435,13 +437,13 @@ NumberFormat::format(int64_t number, // ------------------------------------- -// Decimal Number format() default implementation +// Decimal Number format() default implementation // Subclasses do not normally override this function, but rather the DigitList // formatting functions.. // The expected call chain from here is // this function -> // NumberFormat::format(Formattable -> -// DecimalFormat::format(DigitList +// DecimalFormat::format(DigitList // // Or, for subclasses of Formattable that do not know about DigitList, // this Function -> @@ -450,7 +452,7 @@ NumberFormat::format(int64_t number, // XXXFormat::format(double UnicodeString& -NumberFormat::format(const StringPiece &decimalNum, +NumberFormat::format(StringPiece decimalNum, UnicodeString& toAppendTo, FieldPositionIterator* fpi, UErrorCode& status) const @@ -543,7 +545,7 @@ UnicodeString& NumberFormat::format(const DigitList &number, UnicodeString& appendTo, FieldPosition& pos, - UErrorCode &status) const { + UErrorCode &status) const { // DecimalFormat overrides this function, and handles DigitList based big decimals. // Other subclasses (ChoiceFormat, RuleBasedNumberFormat) do not (yet) handle DigitLists, // so this default implementation falls back to formatting decimal numbers as doubles. @@ -683,7 +685,7 @@ NumberFormat::parseObject(const UnicodeString& source, UnicodeString& NumberFormat::format(double number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } @@ -693,7 +695,7 @@ NumberFormat::format(double number, UnicodeString& appendTo) const UnicodeString& NumberFormat::format(int32_t number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } @@ -703,7 +705,7 @@ NumberFormat::format(int32_t number, UnicodeString& appendTo) const UnicodeString& NumberFormat::format(int64_t number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } @@ -1063,7 +1065,7 @@ NumberFormat::createInstance(const Locale& loc, UNumberFormatStyle kind, UErrorC } return result; } - + // ------------------------------------- // Checks if the thousand/10 thousand grouping is used in the @@ -1408,7 +1410,7 @@ NumberFormat::makeInstance(const Locale& desiredLocale, const UChar *patResStr = ures_getStringByKeyWithFallback(resource, gFormatKeys[style], &patLen, &status); // Didn't find a pattern specific to the numbering system, so fall back to "latn" - if ( status == U_MISSING_RESOURCE_ERROR && uprv_strcmp(gLatn,ns->getName())) { + if ( status == U_MISSING_RESOURCE_ERROR && uprv_strcmp(gLatn,ns->getName())) { status = U_ZERO_ERROR; resource = ures_getByKeyWithFallback(numElements, gLatn, resource, &status); resource = ures_getByKeyWithFallback(resource, gPatterns, resource, &status); @@ -1423,7 +1425,7 @@ NumberFormat::makeInstance(const Locale& desiredLocale, if (U_FAILURE(status)) { return NULL; } - if(style==UNUM_CURRENCY || style == UNUM_CURRENCY_ISO || style == UNUM_CURRENCY_ACCOUNTING + if(style==UNUM_CURRENCY || style == UNUM_CURRENCY_ISO || style == UNUM_CURRENCY_ACCOUNTING || style == UNUM_CASH_CURRENCY || style == UNUM_CURRENCY_STANDARD){ const UChar* currPattern = symbolsToAdopt->getCurrencyPattern(); if(currPattern!=NULL){ diff --git a/deps/icu-small/source/i18n/numsys.cpp b/deps/icu-small/source/i18n/numsys.cpp index 498a8b38914393..ce7c4d530449d3 100644 --- a/deps/icu-small/source/i18n/numsys.cpp +++ b/deps/icu-small/source/i18n/numsys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines Corporation and @@ -67,7 +69,7 @@ NumberingSystem::NumberingSystem() { * @draft ICU 4.2 */ -NumberingSystem::NumberingSystem(const NumberingSystem& other) +NumberingSystem::NumberingSystem(const NumberingSystem& other) : UObject(other) { *this=other; } @@ -98,7 +100,7 @@ NumberingSystem::createInstance(int32_t radix_in, UBool isAlgorithmic_in, const ns->setAlgorithmic(isAlgorithmic_in); ns->setName(NULL); return ns; - + } @@ -115,7 +117,7 @@ NumberingSystem::createInstance(const Locale & inLocale, UErrorCode& status) { int32_t count = inLocale.getKeywordValue("numbers",buffer, sizeof(buffer),status); if ( count > 0 ) { // @numbers keyword was specified in the locale buffer[count] = '\0'; // Make sure it is null terminated. - if ( !uprv_strcmp(buffer,gDefault) || !uprv_strcmp(buffer,gNative) || + if ( !uprv_strcmp(buffer,gDefault) || !uprv_strcmp(buffer,gNative) || !uprv_strcmp(buffer,gTraditional) || !uprv_strcmp(buffer,gFinance)) { nsResolved = FALSE; } @@ -133,13 +135,13 @@ NumberingSystem::createInstance(const Locale & inLocale, UErrorCode& status) { count = 0; const UChar *nsName = ures_getStringByKeyWithFallback(numberElementsRes, buffer, &count, &localStatus); if ( count > 0 && count < ULOC_KEYWORDS_CAPACITY ) { // numbering system found - u_UCharsToChars(nsName,buffer,count); + u_UCharsToChars(nsName,buffer,count); buffer[count] = '\0'; // Make sure it is null terminated. nsResolved = TRUE; - } + } if (!nsResolved) { // Fallback behavior per TR35 - traditional falls back to native, finance and native fall back to default - if (!uprv_strcmp(buffer,gNative) || !uprv_strcmp(buffer,gFinance)) { + if (!uprv_strcmp(buffer,gNative) || !uprv_strcmp(buffer,gFinance)) { uprv_strcpy(buffer,gDefault); } else if (!uprv_strcmp(buffer,gTraditional)) { uprv_strcpy(buffer,gNative); @@ -257,7 +259,7 @@ StringEnumeration* NumberingSystem::getAvailableNames(UErrorCode &status) { if (U_FAILURE(status)) { return NULL; } - + UErrorCode rbstatus = U_ZERO_ERROR; UResourceBundle *numberingSystemsInfo = ures_openDirect(NULL, "numberingSystems", &rbstatus); numberingSystemsInfo = ures_getByKey(numberingSystemsInfo,"numberingSystems",numberingSystemsInfo,&rbstatus); diff --git a/deps/icu-small/source/i18n/numsys_impl.h b/deps/icu-small/source/i18n/numsys_impl.h index 5b7f4f3f3a25b8..c4683b0335e5e8 100644 --- a/deps/icu-small/source/i18n/numsys_impl.h +++ b/deps/icu-small/source/i18n/numsys_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and @@ -15,7 +17,7 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING - + #include "unicode/numsys.h" #include "uvector.h" #include "unicode/strenum.h" diff --git a/deps/icu-small/source/i18n/olsontz.cpp b/deps/icu-small/source/i18n/olsontz.cpp index 56b36c36662aef..65b532ae64d73c 100644 --- a/deps/icu-small/source/i18n/olsontz.cpp +++ b/deps/icu-small/source/i18n/olsontz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2013, International Business Machines @@ -204,7 +206,7 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, if (U_SUCCESS(ec)) { UnicodeString ruleID(TRUE, ruleIdUStr, len); UResourceBundle *rule = TimeZone::loadRule(top, ruleID, NULL, ec); - const int32_t *ruleData = ures_getIntVector(rule, &len, &ec); + const int32_t *ruleData = ures_getIntVector(rule, &len, &ec); if (U_SUCCESS(ec) && len == 11) { UnicodeString emptyStr; finalZone = new SimpleTimeZone( @@ -223,7 +225,7 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, finalStartYear = ruleYear; // Note: Setting finalStartYear to the finalZone is problematic. When a date is around - // year boundary, SimpleTimeZone may return false result when DST is observed at the + // year boundary, SimpleTimeZone may return false result when DST is observed at the // beginning of year. We could apply safe margin (day or two), but when one of recurrent // rules falls around year boundary, it could return false result. Without setting the // start year, finalZone works fine around the year boundary of the start year. @@ -438,7 +440,7 @@ void printTime(double ms) { int32_t year, month, dom, dow; double millis=0; double days = ClockMath::floorDivide(((double)ms), (double)U_MILLIS_PER_DAY, millis); - + Grego::dayToFields(days, year, month, dom, dow); U_DEBUG_TZ_MSG((" getHistoricalOffset: time %.1f (%04d.%02d.%02d+%.1fh)\n", ms, year, month+1, dom, (millis/kOneHour))); @@ -447,7 +449,7 @@ void printTime(double ms) { int64_t OlsonTimeZone::transitionTimeInSeconds(int16_t transIdx) const { - U_ASSERT(transIdx >= 0 && transIdx < transitionCount()); + U_ASSERT(transIdx >= 0 && transIdx < transitionCount()); if (transIdx < transitionCountPre32) { return (((int64_t)((uint32_t)transitionTimesPre32[transIdx << 1])) << 32) @@ -502,7 +504,7 @@ OlsonTimeZone::getHistoricalOffset(UDate date, UBool local, UBool dstToStd = dstBefore && !dstAfter; UBool stdToDst = !dstBefore && dstAfter; - + if (offsetAfter - offsetBefore >= 0) { // Positive transition, which makes a non-existing local time range if (((NonExistingTimeOpt & kStdDstMask) == kStandard && dstToStd) @@ -588,7 +590,7 @@ UBool OlsonTimeZone::useDaylightTime() const { } return FALSE; } -int32_t +int32_t OlsonTimeZone::getDSTSavings() const{ if (finalZone != NULL){ return finalZone->getDSTSavings(); @@ -620,7 +622,7 @@ OlsonTimeZone::hasSameRules(const TimeZone &other) const { if (typeMapData == z->typeMapData) { return TRUE; } - + // If the pointers are not equal, the zones may still // be equal if their rules and transitions are equal if ((finalZone == NULL && z->finalZone != NULL) @@ -693,7 +695,7 @@ OlsonTimeZone::deleteTransitionRules(void) { static void U_CALLCONV initRules(OlsonTimeZone *This, UErrorCode &status) { This->initTransitionRules(status); } - + void OlsonTimeZone::checkTransitionRules(UErrorCode& status) const { OlsonTimeZone *ncThis = const_cast(this); diff --git a/deps/icu-small/source/i18n/olsontz.h b/deps/icu-small/source/i18n/olsontz.h index 115a0773c5b3c3..13b364de89cec8 100644 --- a/deps/icu-small/source/i18n/olsontz.h +++ b/deps/icu-small/source/i18n/olsontz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2013, International Business Machines @@ -42,52 +44,52 @@ class SimpleTimeZone; * * a. Zone (table). A zone is a table resource contains several * type of resources below: - * + * * - typeOffsets:intvector (Required) - * + * * Sets of UTC raw/dst offset pairs in seconds. Entries at * 2n represents raw offset and 2n+1 represents dst offset * paired with the raw offset at 2n. The very first pair represents * the initial zone offset (before the first transition) always. * - * - trans:intvector (Optional) - * + * - trans:intvector (Optional) + * * List of transition times represented by 32bit seconds from the * epoch (1970-01-01T00:00Z) in ascending order. - * + * * - transPre32/transPost32:intvector (Optional) - * + * * List of transition times before/after 32bit minimum seconds. * Each time is represented by a pair of 32bit integer. - * + * * - typeMap:bin (Optional) - * + * * Array of bytes representing the mapping between each transition * time (transPre32/trans/transPost32) and its corresponding offset * data (typeOffsets). - * + * * - finalRule:string (Optional) - * + * * If a recurrent transition rule is applicable to a zone forever * after the final transition time, finalRule represents the rule * in Rules data. - * + * * - finalRaw:int (Optional) - * + * * When finalRule is available, finalRaw is required and specifies * the raw (base) offset of the rule. - * + * * - finalYear:int (Optional) - * + * * When finalRule is available, finalYear is required and specifies * the start year of the rule. - * + * * - links:intvector (Optional) - * + * * When this zone data is shared with other zones, links specifies * all zones including the zone itself. Each zone is referenced by * integer index. - * + * * b. Link (int, length 1). A link zone is an int resource. The * integer is the zone number of the target zone. The key of this * resource is an alternate name for the target zone. This data @@ -160,7 +162,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * TimeZone API. */ virtual UClassID getDynamicClassID() const; - + /** * TimeZone API. Do not call this; prefer getOffset(UDate,...). */ diff --git a/deps/icu-small/source/i18n/persncal.cpp b/deps/icu-small/source/i18n/persncal.cpp index e1b30b8aee6959..278273fb91b99f 100644 --- a/deps/icu-small/source/i18n/persncal.cpp +++ b/deps/icu-small/source/i18n/persncal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -68,7 +70,7 @@ static const int32_t PERSIAN_EPOCH = 1948320; // Constructors... //------------------------------------------------------------------------- -const char *PersianCalendar::getType() const { +const char *PersianCalendar::getType() const { return "persian"; } @@ -111,7 +113,7 @@ UBool PersianCalendar::isLeapYear(int32_t year) ClockMath::floorDivide(25 * year + 11, 33, remainder); return (remainder < 8); } - + /** * Return the day # on which the given year starts. Days are counted * from the Persian epoch, origin 0. @@ -119,7 +121,7 @@ UBool PersianCalendar::isLeapYear(int32_t year) int32_t PersianCalendar::yearStart(int32_t year) { return handleComputeMonthStart(year,0,FALSE); } - + /** * Return the day # on which the given month starts. Days are counted * from the Persian epoch, origin 0. @@ -130,7 +132,7 @@ int32_t PersianCalendar::yearStart(int32_t year) { int32_t PersianCalendar::monthStart(int32_t year, int32_t month) const { return handleComputeMonthStart(year,month,TRUE); } - + //---------------------------------------------------------------------- // Calendar framework //---------------------------------------------------------------------- @@ -157,7 +159,7 @@ int32_t PersianCalendar::handleGetMonthLength(int32_t extendedYear, int32_t mont int32_t PersianCalendar::handleGetYearLength(int32_t extendedYear) const { return isLeapYear(extendedYear) ? 366 : 365; } - + //------------------------------------------------------------------------- // Functions for converting from field values to milliseconds.... //------------------------------------------------------------------------- @@ -203,7 +205,7 @@ int32_t PersianCalendar::handleGetExtendedYear() { *

  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. */ @@ -229,13 +231,13 @@ void PersianCalendar::handleComputeFields(int32_t julianDay, UErrorCode &/*statu internalSet(UCAL_MONTH, month); internalSet(UCAL_DAY_OF_MONTH, dayOfMonth); internalSet(UCAL_DAY_OF_YEAR, dayOfYear); -} +} UBool PersianCalendar::inDaylightTime(UErrorCode& status) const { // copied from GregorianCalendar - if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) + if (U_FAILURE(status) || !getTimeZone().useDaylightTime()) return FALSE; // Force an update of the state of the Calendar. @@ -290,3 +292,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(PersianCalendar) U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/persncal.h b/deps/icu-small/source/i18n/persncal.h index ff18f6158cd68f..e244fee20e760a 100644 --- a/deps/icu-small/source/i18n/persncal.h +++ b/deps/icu-small/source/i18n/persncal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -56,79 +58,79 @@ class PersianCalendar : public Calendar { */ enum EMonths { /** - * Constant for Farvardin, the 1st month of the Persian year. + * Constant for Farvardin, the 1st month of the Persian year. * @internal */ FARVARDIN = 0, /** - * Constant for Ordibehesht, the 2nd month of the Persian year. + * Constant for Ordibehesht, the 2nd month of the Persian year. * @internal */ ORDIBEHESHT = 1, /** - * Constant for Khordad, the 3rd month of the Persian year. - * @internal + * Constant for Khordad, the 3rd month of the Persian year. + * @internal */ KHORDAD = 2, /** - * Constant for Tir, the 4th month of the Persian year. - * @internal + * Constant for Tir, the 4th month of the Persian year. + * @internal */ TIR = 3, /** - * Constant for Mordad, the 5th month of the Persian year. - * @internal + * Constant for Mordad, the 5th month of the Persian year. + * @internal */ MORDAD = 4, /** - * Constant for Shahrivar, the 6th month of the Persian year. - * @internal + * Constant for Shahrivar, the 6th month of the Persian year. + * @internal */ SHAHRIVAR = 5, /** - * Constant for Mehr, the 7th month of the Persian year. - * @internal + * Constant for Mehr, the 7th month of the Persian year. + * @internal */ MEHR = 6, /** - * Constant for Aban, the 8th month of the Persian year. - * @internal + * Constant for Aban, the 8th month of the Persian year. + * @internal */ ABAN = 7, /** - * Constant for Azar, the 9th month of the Persian year. - * @internal + * Constant for Azar, the 9th month of the Persian year. + * @internal */ AZAR = 8, /** - * Constant for Dei, the 10th month of the Persian year. - * @internal + * Constant for Dei, the 10th month of the Persian year. + * @internal */ DEI = 9, /** - * Constant for Bahman, the 11th month of the Persian year. - * @internal + * Constant for Bahman, the 11th month of the Persian year. + * @internal */ BAHMAN = 10, /** - * Constant for Esfand, the 12th month of the Persian year. - * @internal + * Constant for Esfand, the 12th month of the Persian year. + * @internal */ ESFAND = 11, - + PERSIAN_MONTH_MAX - }; + }; @@ -169,7 +171,7 @@ class PersianCalendar : public Calendar { * Determine whether a year is a leap year in the Persian calendar */ static UBool isLeapYear(int32_t year); - + /** * Return the day # on which the given year starts. Days are counted * from the Hijri epoch, origin 0. @@ -184,7 +186,7 @@ class PersianCalendar : public Calendar { * @param year The hijri shamsi month, 0-based */ int32_t monthStart(int32_t year, int32_t month) const; - + //---------------------------------------------------------------------- // Calendar framework //---------------------------------------------------------------------- @@ -193,7 +195,7 @@ class PersianCalendar : public Calendar { * @internal */ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; - + /** * Return the length (in days) of the given month. * @@ -202,13 +204,13 @@ class PersianCalendar : public Calendar { * @internal */ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; - + /** * Return the number of days in the given Persian year * @internal */ virtual int32_t handleGetYearLength(int32_t extendedYear) const; - + //------------------------------------------------------------------------- // Functions for converting from field values to milliseconds.... //------------------------------------------------------------------------- @@ -238,7 +240,7 @@ class PersianCalendar : public Calendar { *
  • DAY_OF_MONTH *
  • DAY_OF_YEAR *
  • EXTENDED_YEAR - * + * * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this * method is called. The getGregorianXxx() methods return Gregorian * calendar equivalents for the given Julian day. @@ -247,7 +249,7 @@ class PersianCalendar : public Calendar { virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); // UObject stuff - public: + public: /** * @return The class ID for this object. All objects of a given class have the * same class ID. Objects of other classes have different class IDs. @@ -316,3 +318,6 @@ U_NAMESPACE_END #endif #endif + + + diff --git a/deps/icu-small/source/i18n/pluralaffix.cpp b/deps/icu-small/source/i18n/pluralaffix.cpp index b541f120df51b6..f6a51a79ef9ab7 100644 --- a/deps/icu-small/source/i18n/pluralaffix.cpp +++ b/deps/icu-small/source/i18n/pluralaffix.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/pluralaffix.h b/deps/icu-small/source/i18n/pluralaffix.h index 5212fc714bcccf..81e9c7aa389a40 100644 --- a/deps/icu-small/source/i18n/pluralaffix.h +++ b/deps/icu-small/source/i18n/pluralaffix.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -28,7 +30,7 @@ class FieldPositionHandler; // Export an explicit template instantiation. // -// MSVC requires this, even though it should not be necessary. +// MSVC requires this, even though it should not be necessary. // No direct access leaks out of the i18n library. // // Macintosh produces duplicate definition linker errors with the explicit template @@ -50,7 +52,7 @@ template class U_I18N_API PluralMap; * To use one of these objects, build it up first using append() and * setVariant() methods. Once built, leave unchanged and let multiple threads * safely access. - * + * * The following code is sample code for building up: * one: US Dollar - * other: US Dollars - diff --git a/deps/icu-small/source/i18n/plurfmt.cpp b/deps/icu-small/source/i18n/plurfmt.cpp index 9ff2bffc9d99ca..8a000ce6e97bd9 100644 --- a/deps/icu-small/source/i18n/plurfmt.cpp +++ b/deps/icu-small/source/i18n/plurfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2015, International Business Machines Corporation and @@ -216,14 +218,14 @@ PluralFormat::format(const Formattable& obj, UnicodeString PluralFormat::format(int32_t number, UErrorCode& status) const { - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); UnicodeString result; return format(Formattable(number), number, result, fpos, status); } UnicodeString PluralFormat::format(double number, UErrorCode& status) const { - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); UnicodeString result; return format(Formattable(number), number, result, fpos, status); } diff --git a/deps/icu-small/source/i18n/plurrule.cpp b/deps/icu-small/source/i18n/plurrule.cpp index 9d5fa5bee29248..cb5ee08d3dc746 100644 --- a/deps/icu-small/source/i18n/plurrule.cpp +++ b/deps/icu-small/source/i18n/plurrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -31,7 +33,7 @@ #include "uvectr32.h" #include "sharedpluralrules.h" #include "unifiedcache.h" -#include "digitinterval.h" +#include "digitinterval.h" #include "visibledigits.h" @@ -289,7 +291,7 @@ PluralRules::getAllKeywordValues(const UnicodeString & /* keyword */, double * / return 0; } - + static double scaleForInt(double d) { double scale = 1.0; while (d != floor(d)) { @@ -324,7 +326,7 @@ getSamplesFromString(const UnicodeString &samples, double *dest, dest[sampleCount++] = sampleValue; } } else { - + FixedDecimal fixedLo(sampleRange.tempSubStringBetween(0, tildeIndex), status); FixedDecimal fixedHi(sampleRange.tempSubStringBetween(tildeIndex+1), status); double rangeLo = fixedLo.source; @@ -340,7 +342,7 @@ getSamplesFromString(const UnicodeString &samples, double *dest, // For ranges of samples with fraction decimal digits, scale the number up so that we // are adding one in the units place. Avoids roundoffs from repetitive adds of tenths. - double scale = scaleForInt(rangeLo); + double scale = scaleForInt(rangeLo); double t = scaleForInt(rangeHi); if (t > scale) { scale = t; @@ -376,12 +378,12 @@ PluralRules::getSamples(const UnicodeString &keyword, double *dest, return 0; } int32_t numSamples = getSamplesFromString(rc->fIntegerSamples, dest, destCapacity, status); - if (numSamples == 0) { + if (numSamples == 0) { numSamples = getSamplesFromString(rc->fDecimalSamples, dest, destCapacity, status); } return numSamples; } - + RuleChain *PluralRules::rulesForKeyword(const UnicodeString &keyword) const { RuleChain *rc; @@ -523,7 +525,7 @@ PluralRuleParser::parse(const UnicodeString& ruleData, PluralRules *prules, UErr } else { curAndConstraint->rangeList->setElementAt(getNumberValue(token), rangeHiIdx); - if (curAndConstraint->rangeList->elementAti(rangeLowIdx) > + if (curAndConstraint->rangeList->elementAti(rangeLowIdx) > curAndConstraint->rangeList->elementAti(rangeHiIdx)) { // Range Lower bound > Range Upper bound. // U_UNEXPECTED_TOKEN seems a little funny, but it is consistently @@ -574,7 +576,7 @@ PluralRuleParser::parse(const UnicodeString& ruleData, PluralRules *prules, UErr // The new rule chain goes at the end of the linked list of rule chains, // unless there is an "other" keyword & chain. "other" must remain last. RuleChain *insertAfter = prules->mRules; - while (insertAfter->fNext!=NULL && + while (insertAfter->fNext!=NULL && insertAfter->fNext->fKeyword.compare(PLURAL_KEYWORD_OTHER, 5) != 0 ){ insertAfter=insertAfter->fNext; } @@ -615,7 +617,7 @@ PluralRuleParser::parse(const UnicodeString& ruleData, PluralRules *prules, UErr currentChain->fDecimalSamples.append(token); } break; - + default: break; } @@ -868,13 +870,13 @@ OrConstraint::isFulfilled(const FixedDecimal &number) { } -RuleChain::RuleChain(): fKeyword(), fNext(NULL), ruleHeader(NULL), fDecimalSamples(), fIntegerSamples(), +RuleChain::RuleChain(): fKeyword(), fNext(NULL), ruleHeader(NULL), fDecimalSamples(), fIntegerSamples(), fDecimalSamplesUnbounded(FALSE), fIntegerSamplesUnbounded(FALSE) { } -RuleChain::RuleChain(const RuleChain& other) : +RuleChain::RuleChain(const RuleChain& other) : fKeyword(other.fKeyword), fNext(NULL), ruleHeader(NULL), fDecimalSamples(other.fDecimalSamples), - fIntegerSamples(other.fIntegerSamples), fDecimalSamplesUnbounded(other.fDecimalSamplesUnbounded), + fIntegerSamples(other.fIntegerSamples), fDecimalSamplesUnbounded(other.fDecimalSamplesUnbounded), fIntegerSamplesUnbounded(other.fIntegerSamplesUnbounded) { if (other.ruleHeader != NULL) { this->ruleHeader = new OrConstraint(*(other.ruleHeader)); @@ -1043,9 +1045,9 @@ RuleChain::isKeyword(const UnicodeString& keywordParam) const { } -PluralRuleParser::PluralRuleParser() : - ruleIndex(0), token(), type(none), prevType(none), - curAndConstraint(NULL), currentChain(NULL), rangeLowIdx(-1), rangeHiIdx(-1) +PluralRuleParser::PluralRuleParser() : + ruleIndex(0), token(), type(none), prevType(none), + curAndConstraint(NULL), currentChain(NULL), rangeLowIdx(-1), rangeHiIdx(-1) { } @@ -1146,8 +1148,8 @@ PluralRuleParser::checkSyntax(UErrorCode &status) break; case tNumber: if (type != tDot2 && type != tSemiColon && type != tIs && type != tNot && - type != tIn && type != tEqual && type != tNotEqual && type != tWithin && - type != tAnd && type != tOr && type != tComma && type != tAt && + type != tIn && type != tEqual && type != tNotEqual && type != tWithin && + type != tAnd && type != tOr && type != tComma && type != tAt && type != tEOF) { status = U_UNEXPECTED_TOKEN; @@ -1192,7 +1194,7 @@ PluralRuleParser::getNextToken(UErrorCode &status) return; } int32_t curIndex= ruleIndex; - + switch (type) { case tColon: case tSemiColon: @@ -1297,7 +1299,7 @@ PluralRuleParser::charType(UChar ch) { // Set token type for reserved words in the Plural Rule syntax. -tokenType +tokenType PluralRuleParser::getKeyType(const UnicodeString &token, tokenType keyType) { if (keyType != tKeyword) { @@ -1394,7 +1396,7 @@ FixedDecimal::FixedDecimal(const VisibleDigits &digits) { FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f) { init(n, v, f); // check values. TODO make into unit test. - // + // // long visiblePower = (int) Math.pow(10, v); // if (decimalDigits > visiblePower) { // throw new IllegalArgumentException(); @@ -1536,7 +1538,7 @@ int32_t FixedDecimal::decimals(double n) { if (buf[i] != '0') { break; } - --numFractionDigits; + --numFractionDigits; } numFractionDigits -= exponent; // Fraction part of fixed point representation. return numFractionDigits; @@ -1547,7 +1549,7 @@ int32_t FixedDecimal::decimals(double n) { // v is the number of visible fraction digits in the displayed form of the number. // Example: n = 1001.234, v = 6, result = 234000 // TODO: need to think through how this is used in the plural rule context. -// This function can easily encounter integer overflow, +// This function can easily encounter integer overflow, // and can easily return noise digits when the precision of a double is exceeded. int64_t FixedDecimal::getFractionalDigits(double n, int32_t v) { @@ -1585,14 +1587,14 @@ void FixedDecimal::adjustForMinFractionDigits(int32_t minFractionDigits) { visibleDecimalDigitCount += numTrailingFractionZeros; } } - + double FixedDecimal::get(tokenType operand) const { switch(operand) { case tVariableN: return source; case tVariableI: return (double)intValue; case tVariableF: return (double)decimalDigits; - case tVariableT: return (double)decimalDigitsWithoutTrailingZeros; + case tVariableT: return (double)decimalDigitsWithoutTrailingZeros; case tVariableV: return visibleDecimalDigitCount; default: U_ASSERT(FALSE); // unexpected. diff --git a/deps/icu-small/source/i18n/plurrule_impl.h b/deps/icu-small/source/i18n/plurrule_impl.h index d829110cd03a9e..c6e4767a096a72 100644 --- a/deps/icu-small/source/i18n/plurrule_impl.h +++ b/deps/icu-small/source/i18n/plurrule_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/precision.cpp b/deps/icu-small/source/i18n/precision.cpp index c7765748adab84..086ce417f89915 100644 --- a/deps/icu-small/source/i18n/precision.cpp +++ b/deps/icu-small/source/i18n/precision.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -21,7 +23,7 @@ U_NAMESPACE_BEGIN static const int32_t gPower10[] = {1, 10, 100, 1000}; -FixedPrecision::FixedPrecision() +FixedPrecision::FixedPrecision() : fExactOnly(FALSE), fFailIfOverMax(FALSE), fRoundingMode(DecimalFormat::kRoundHalfEven) { fMin.setIntDigitCount(1); fMin.setFracDigitCount(0); diff --git a/deps/icu-small/source/i18n/precision.h b/deps/icu-small/source/i18n/precision.h index 4543108cef7596..2131491ac083b9 100644 --- a/deps/icu-small/source/i18n/precision.h +++ b/deps/icu-small/source/i18n/precision.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -56,27 +58,27 @@ class U_I18N_API FixedPrecision : public UMemory { * Default is zero. */ DigitList fRoundingIncrement; - + /** * If set, causes round() to set status to U_FORMAT_INEXACT_ERROR if * any rounding is done. Default is FALSE. */ UBool fExactOnly; - + /** * If set, causes round() to set status to U_ILLEGAL_ARGUMENT_ERROR if * rounded number has more than maximum integer digits. Default is FALSE. */ UBool fFailIfOverMax; - + /** * Controls the rounding mode that initVisibleDigits uses. * Default is DecimalFormat::kRoundHalfEven */ DecimalFormat::ERoundingMode fRoundingMode; - + FixedPrecision(); - + /** * Returns TRUE if this object equals rhs. */ @@ -89,7 +91,7 @@ class U_I18N_API FixedPrecision : public UMemory { fFailIfOverMax == rhs.fFailIfOverMax && fRoundingMode == rhs.fRoundingMode); } - + /** * Rounds value in place to prepare it for formatting. * @param value The value to be rounded. It is rounded in place. @@ -100,7 +102,7 @@ class U_I18N_API FixedPrecision : public UMemory { * @return reference to value. */ DigitList &round(DigitList &value, int32_t exponent, UErrorCode &status) const; - + /** * Returns the interval to use to format the rounded value. * @param roundedValue the already rounded value to format. @@ -110,12 +112,12 @@ class U_I18N_API FixedPrecision : public UMemory { */ DigitInterval &getInterval( const DigitList &roundedValue, DigitInterval &interval) const; - + /** * Returns TRUE if this instance allows for fast formatting of integers. */ UBool isFastFormattable() const; - + /** * Initializes a VisibleDigits. * @param value value for VisibleDigits @@ -129,7 +131,7 @@ class U_I18N_API FixedPrecision : public UMemory { DigitList &value, VisibleDigits &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigits. * @param value value for VisibleDigits @@ -141,7 +143,7 @@ class U_I18N_API FixedPrecision : public UMemory { double value, VisibleDigits &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigits. * @param value value for VisibleDigits @@ -153,7 +155,7 @@ class U_I18N_API FixedPrecision : public UMemory { int64_t value, VisibleDigits &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigitsWithExponent. * @param value value for VisibleDigits @@ -167,7 +169,7 @@ class U_I18N_API FixedPrecision : public UMemory { DigitList &value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigitsWithExponent. * @param value value for VisibleDigits @@ -179,7 +181,7 @@ class U_I18N_API FixedPrecision : public UMemory { double value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigitsWithExponent. * @param value value for VisibleDigits @@ -191,7 +193,7 @@ class U_I18N_API FixedPrecision : public UMemory { int64_t value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + private: /** * Attempts to initialize 'digits' using simple mod 10 arithmetic. @@ -216,7 +218,7 @@ class U_I18N_API FixedPrecision : public UMemory { * @param mantissa the digits. May be positive or negative. May contain * trailing zeros. * @param exponent must always be zero or negative. An exponent > 0 - * yields undefined results! + * yields undefined results! * @param digits result stored here. * @param status any error returned here. */ @@ -232,7 +234,7 @@ class U_I18N_API FixedPrecision : public UMemory { DigitInterval &getInterval( int32_t upperExponent, DigitInterval &interval) const; static UBool handleNonNumeric(DigitList &value, VisibleDigits &digits); - + friend class ScientificPrecision; }; @@ -284,7 +286,7 @@ class U_I18N_API ScientificPrecision : public UMemory { DigitList &value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigitsWithExponent. * @param value the value @@ -296,7 +298,7 @@ class U_I18N_API ScientificPrecision : public UMemory { double value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + /** * Initializes a VisibleDigitsWithExponent. * @param value the value @@ -308,7 +310,7 @@ class U_I18N_API ScientificPrecision : public UMemory { int64_t value, VisibleDigitsWithExponent &digits, UErrorCode &status) const; - + private: int32_t getMultiplier() const; diff --git a/deps/icu-small/source/i18n/quant.cpp b/deps/icu-small/source/i18n/quant.cpp index 4bfdf2a1813d63..7387ce0b443519 100644 --- a/deps/icu-small/source/i18n/quant.cpp +++ b/deps/icu-small/source/i18n/quant.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2012, International Business Machines @@ -56,7 +58,7 @@ UnicodeFunctor* Quantifier::clone() const { UnicodeMatcher* Quantifier::toMatcher() const { Quantifier *nonconst_this = const_cast(this); UnicodeMatcher *nonconst_base = static_cast(nonconst_this); - + return nonconst_base; } diff --git a/deps/icu-small/source/i18n/quant.h b/deps/icu-small/source/i18n/quant.h index f84c43133254ec..21adf19e70d87a 100644 --- a/deps/icu-small/source/i18n/quant.h +++ b/deps/icu-small/source/i18n/quant.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/quantityformatter.cpp b/deps/icu-small/source/i18n/quantityformatter.cpp index 3b04c86d46f196..c44357a53b6908 100644 --- a/deps/icu-small/source/i18n/quantityformatter.cpp +++ b/deps/icu-small/source/i18n/quantityformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/quantityformatter.h b/deps/icu-small/source/i18n/quantityformatter.h index 7f61c0dc039a70..f7bb6b5be785ec 100644 --- a/deps/icu-small/source/i18n/quantityformatter.h +++ b/deps/icu-small/source/i18n/quantityformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines @@ -33,10 +35,10 @@ class FieldPosition; * There must be a pattern for the "other" variant. * Then use the format() method. *

    - * Concurrent calls only to const methods on a QuantityFormatter object are + * Concurrent calls only to const methods on a QuantityFormatter object are * safe, but concurrent const and non-const method calls on a QuantityFormatter * object are not safe and require synchronization. - * + * */ class U_I18N_API QuantityFormatter : public UMemory { public: @@ -91,7 +93,7 @@ class U_I18N_API QuantityFormatter : public UMemory { * Formats a number with this object appending the result to appendTo. * At least the "other" variant must be added to this object for this * method to work. - * + * * @param number the single number. * @param fmt formats the number * @param rules computes the plural variant to use. diff --git a/deps/icu-small/source/i18n/rbnf.cpp b/deps/icu-small/source/i18n/rbnf.cpp index 5f78f73b86f614..fc4fd43a7bf54b 100644 --- a/deps/icu-small/source/i18n/rbnf.cpp +++ b/deps/icu-small/source/i18n/rbnf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation @@ -77,34 +79,34 @@ class LocalizationInfo : public UMemory { protected: virtual ~LocalizationInfo(); uint32_t refcount; - + public: LocalizationInfo() : refcount(0) {} - + LocalizationInfo* ref(void) { ++refcount; return this; } - + LocalizationInfo* unref(void) { if (refcount && --refcount == 0) { delete this; } return NULL; } - + virtual UBool operator==(const LocalizationInfo* rhs) const; inline UBool operator!=(const LocalizationInfo* rhs) const { return !operator==(rhs); } - + virtual int32_t getNumberOfRuleSets(void) const = 0; virtual const UChar* getRuleSetName(int32_t index) const = 0; virtual int32_t getNumberOfDisplayLocales(void) const = 0; virtual const UChar* getLocaleName(int32_t index) const = 0; virtual const UChar* getDisplayName(int32_t localeIndex, int32_t ruleIndex) const = 0; - + virtual int32_t indexForLocale(const UChar* locale) const; virtual int32_t indexForRuleSet(const UChar* ruleset) const; - + // virtual UClassID getDynamicClassID() const = 0; // static UClassID getStaticClassID(void); }; @@ -114,7 +116,7 @@ LocalizationInfo::~LocalizationInfo() {} //UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(LocalizationInfo) // if both strings are NULL, this returns TRUE -static UBool +static UBool streq(const UChar* lhs, const UChar* rhs) { if (rhs == lhs) { return TRUE; @@ -131,7 +133,7 @@ LocalizationInfo::operator==(const LocalizationInfo* rhs) const { if (this == rhs) { return TRUE; } - + int32_t rsc = getNumberOfRuleSets(); if (rsc == rhs->getNumberOfRuleSets()) { for (int i = 0; i < rsc; ++i) { @@ -193,22 +195,22 @@ class VArray { Fn_Deleter deleter; public: VArray() : buf(NULL), cap(0), size(0), deleter(NULL) {} - + VArray(Fn_Deleter del) : buf(NULL), cap(0), size(0), deleter(del) {} - + ~VArray() { if (deleter) { for (int i = 0; i < size; ++i) { (*deleter)(buf[i]); } } - uprv_free(buf); + uprv_free(buf); } - + int32_t length() { return size; } - + void add(void* elem, UErrorCode& status) { if (U_SUCCESS(status)) { if (size == cap) { @@ -236,7 +238,7 @@ class VArray { buf[size++] = elem; } } - + void** release(void) { void** result = buf; buf = NULL; @@ -260,20 +262,20 @@ friend class LocDataParser; : info(i), data(d), numRuleSets(numRS), numLocales(numLocs) { } - + public: static StringLocalizationInfo* create(const UnicodeString& info, UParseError& perror, UErrorCode& status); - + virtual ~StringLocalizationInfo(); virtual int32_t getNumberOfRuleSets(void) const { return numRuleSets; } virtual const UChar* getRuleSetName(int32_t index) const; virtual int32_t getNumberOfDisplayLocales(void) const { return numLocales; } virtual const UChar* getLocaleName(int32_t index) const; virtual const UChar* getDisplayName(int32_t localeIndex, int32_t ruleIndex) const; - + // virtual UClassID getDynamicClassID() const; // static UClassID getStaticClassID(void); - + private: void init(UErrorCode& status) const; }; @@ -298,20 +300,20 @@ class LocDataParser { UChar ch; UParseError& pe; UErrorCode& ec; - + public: - LocDataParser(UParseError& parseError, UErrorCode& status) + LocDataParser(UParseError& parseError, UErrorCode& status) : data(NULL), e(NULL), p(NULL), ch(0xffff), pe(parseError), ec(status) {} ~LocDataParser() {} - + /* * On a successful parse, return a StringLocalizationInfo*, otherwise delete locData, set perror and status, * and return NULL. The StringLocalizationInfo will adopt locData if it is created. */ StringLocalizationInfo* parse(UChar* data, int32_t len); - + private: - + void inc(void) { ++p; ch = 0xffff; } UBool checkInc(UChar c) { if (p < e && (ch == c || *p == c)) { inc(); return TRUE; } return FALSE; } UBool check(UChar c) { return p < e && (ch == c || *p == c); } @@ -321,9 +323,9 @@ class LocDataParser { while (*list && *list != c) ++list; return *list == c; } void parseError(const char* msg); - + StringLocalizationInfo* doParse(void); - + UChar** nextArray(int32_t& requiredLength); UChar* nextString(void); }; @@ -335,17 +337,17 @@ class LocDataParser { #define ERROR(msg) parseError(NULL); return NULL; #define EXPLANATION_ARG #endif + - -static const UChar DQUOTE_STOPLIST[] = { +static const UChar DQUOTE_STOPLIST[] = { QUOTE, 0 }; -static const UChar SQUOTE_STOPLIST[] = { +static const UChar SQUOTE_STOPLIST[] = { TICK, 0 }; -static const UChar NOQUOTE_STOPLIST[] = { +static const UChar NOQUOTE_STOPLIST[] = { SPACE, COMMA, CLOSE_ANGLE, OPEN_ANGLE, TICK, QUOTE, 0 }; @@ -429,11 +431,11 @@ LocDataParser::doParse(void) { if (U_SUCCESS(ec)) { int32_t numLocs = array.length() - 2; // subtract first, NULL UChar*** result = (UChar***)array.release(); - + return new StringLocalizationInfo(data, result, requiredLength-2, numLocs); // subtract first, NULL } } - + ERROR("Unknown error"); } @@ -442,7 +444,7 @@ LocDataParser::nextArray(int32_t& requiredLength) { if (U_FAILURE(ec)) { return NULL; } - + skipWhitespace(); if (!checkInc(OPEN_ANGLE)) { ERROR("Missing open angle"); @@ -482,7 +484,7 @@ LocDataParser::nextArray(int32_t& requiredLength) { ec = U_ILLEGAL_ARGUMENT_ERROR; ERROR("Array not of required length"); } - + return (UChar**)array.release(); } ERROR("Unknown Error"); @@ -491,7 +493,7 @@ LocDataParser::nextArray(int32_t& requiredLength) { UChar* LocDataParser::nextString() { UChar* result = NULL; - + skipWhitespace(); if (p < e) { const UChar* terminators; @@ -508,7 +510,7 @@ LocDataParser::nextString() { if (p == e) { ERROR("Unexpected end of data"); } - + UChar x = *p; if (p > start) { ch = x; @@ -556,7 +558,7 @@ void LocDataParser::parseError(const char* EXPLANATION_ARG) u_strncpy(pe.postContext, p, (int32_t)(limit-p)); pe.postContext[limit-p] = 0; pe.offset = (int32_t)(p - data); - + #ifdef RBNF_DEBUG fprintf(stderr, "%s at or near character %ld: ", EXPLANATION_ARG, p-data); @@ -565,7 +567,7 @@ void LocDataParser::parseError(const char* EXPLANATION_ARG) msg.append((UChar)0x002f); /* SOLIDUS/SLASH */ msg.append(p, limit-p); msg.append(UNICODE_STRING_SIMPLE("'")); - + char buf[128]; int32_t len = msg.extract(0, msg.length(), buf, 128); if (len >= 128) { @@ -576,12 +578,12 @@ void LocDataParser::parseError(const char* EXPLANATION_ARG) fprintf(stderr, "%s\n", buf); fflush(stderr); #endif - + uprv_free(data); data = NULL; p = NULL; e = NULL; - + if (U_SUCCESS(ec)) { ec = U_PARSE_ERROR; } @@ -589,17 +591,17 @@ void LocDataParser::parseError(const char* EXPLANATION_ARG) //UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringLocalizationInfo) -StringLocalizationInfo* +StringLocalizationInfo* StringLocalizationInfo::create(const UnicodeString& info, UParseError& perror, UErrorCode& status) { if (U_FAILURE(status)) { return NULL; } - + int32_t len = info.length(); if (len == 0) { return NULL; // no error; } - + UChar* p = (UChar*)uprv_malloc(len * sizeof(UChar)); if (!p) { status = U_MEMORY_ALLOCATION_ERROR; @@ -609,7 +611,7 @@ StringLocalizationInfo::create(const UnicodeString& info, UParseError& perror, U if (!U_FAILURE(status)) { status = U_ZERO_ERROR; // clear warning about non-termination } - + LocDataParser parser(perror, status); return parser.parse(p, len); } @@ -651,7 +653,7 @@ StringLocalizationInfo::getDisplayName(int32_t localeIndex, int32_t ruleIndex) c // ---------- -RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, +RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, const UnicodeString& locs, const Locale& alocale, UParseError& perror, UErrorCode& status) : ruleSets(NULL) @@ -675,7 +677,7 @@ RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, init(description, locinfo, perror, status); } -RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, +RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, const UnicodeString& locs, UParseError& perror, UErrorCode& status) : ruleSets(NULL) @@ -699,7 +701,7 @@ RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, init(description, locinfo, perror, status); } -RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, +RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* info, const Locale& alocale, UParseError& perror, UErrorCode& status) : ruleSets(NULL) @@ -722,9 +724,9 @@ RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, init(description, info, perror, status); } -RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, - UParseError& perror, - UErrorCode& status) +RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, + UParseError& perror, + UErrorCode& status) : ruleSets(NULL) , ruleSetDescriptions(NULL) , numRuleSets(0) @@ -745,10 +747,10 @@ RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, init(description, NULL, perror, status); } -RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, +RuleBasedNumberFormat::RuleBasedNumberFormat(const UnicodeString& description, const Locale& aLocale, - UParseError& perror, - UErrorCode& status) + UParseError& perror, + UErrorCode& status) : ruleSets(NULL) , ruleSetDescriptions(NULL) , numRuleSets(0) @@ -910,9 +912,9 @@ RuleBasedNumberFormat::operator==(const Format& other) const // the info here is just derived from that. if (locale == rhs.locale && lenient == rhs.lenient && - (localizations == NULL - ? rhs.localizations == NULL - : (rhs.localizations == NULL + (localizations == NULL + ? rhs.localizations == NULL + : (rhs.localizations == NULL ? FALSE : *localizations == rhs.localizations))) { @@ -986,7 +988,7 @@ RuleBasedNumberFormat::getNumberOfRuleSetNames() const return result; } -int32_t +int32_t RuleBasedNumberFormat::getNumberOfRuleSetDisplayNameLocales(void) const { if (localizations) { return localizations->getNumberOfDisplayLocales(); @@ -994,7 +996,7 @@ RuleBasedNumberFormat::getNumberOfRuleSetDisplayNameLocales(void) const { return 0; } -Locale +Locale RuleBasedNumberFormat::getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const { if (U_FAILURE(status)) { return Locale(""); @@ -1023,10 +1025,10 @@ RuleBasedNumberFormat::getRuleSetDisplayNameLocale(int32_t index, UErrorCode& st return retLocale; } -UnicodeString +UnicodeString RuleBasedNumberFormat::getRuleSetDisplayName(int32_t index, const Locale& localeParam) { if (localizations && index >= 0 && index < localizations->getNumberOfRuleSets()) { - UnicodeString localeName(localeParam.getBaseName(), -1, UnicodeString::kInvariant); + UnicodeString localeName(localeParam.getBaseName(), -1, UnicodeString::kInvariant); int32_t len = localeName.length(); UChar* localeStr = localeName.getBuffer(len + 1); while (len >= 0) { @@ -1036,7 +1038,7 @@ RuleBasedNumberFormat::getRuleSetDisplayName(int32_t index, const Locale& locale UnicodeString name(TRUE, localizations->getDisplayName(ix, index), -1); return name; } - + // trim trailing portion, skipping over ommitted sections do { --len;} while (len > 0 && localeStr[len] != 0x005f); // underscore while (len > 0 && localeStr[len-1] == 0x005F) --len; @@ -1049,7 +1051,7 @@ RuleBasedNumberFormat::getRuleSetDisplayName(int32_t index, const Locale& locale return bogus; } -UnicodeString +UnicodeString RuleBasedNumberFormat::getRuleSetDisplayName(const UnicodeString& ruleSetName, const Locale& localeParam) { if (localizations) { UnicodeString rsn(ruleSetName); @@ -1284,7 +1286,7 @@ RuleBasedNumberFormat::setLenient(UBool enabled) #endif -void +void RuleBasedNumberFormat::setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status) { if (U_SUCCESS(status)) { if (ruleSetName.isEmpty()) { @@ -1316,7 +1318,7 @@ RuleBasedNumberFormat::getDefaultRuleSetName() const { return result; } -void +void RuleBasedNumberFormat::initDefaultRuleSet() { defaultRuleSet = NULL; @@ -1488,7 +1490,7 @@ RuleBasedNumberFormat::init(const UnicodeString& rules, LocalizationInfo* locali // by appending more rule sets to the end) // {dlf} Initialization of a fraction rule set requires the default rule - // set to be known. For purposes of initialization, this is always the + // set to be known. For purposes of initialization, this is always the // last public rule set, no matter what the localization data says. initDefaultRuleSet(); @@ -1507,7 +1509,7 @@ RuleBasedNumberFormat::init(const UnicodeString& rules, LocalizationInfo* locali // The C code keeps the localization array as is, rather than building // a separate array of the public rule set names, so we have less work // to do here-- but we still need to check the names. - + if (localizationInfos) { // confirm the names, if any aren't in the rules, that's an error // it is ok if the rules contain public rule sets that are not in this list @@ -1534,10 +1536,10 @@ RuleBasedNumberFormat::setContext(UDisplayContext value, UErrorCode& status) { NumberFormat::setContext(value, status); if (U_SUCCESS(status)) { - if (!capitalizationInfoSet && - (value==UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || value==UDISPCTX_CAPITALIZATION_FOR_STANDALONE)) { - initCapitalizationContextInfo(locale); - capitalizationInfoSet = TRUE; + if (!capitalizationInfoSet && + (value==UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || value==UDISPCTX_CAPITALIZATION_FOR_STANDALONE)) { + initCapitalizationContextInfo(locale); + capitalizationInfoSet = TRUE; } #if !UCONFIG_NO_BREAK_ITERATION if ( capitalizationBrkIter == NULL && (value==UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE || diff --git a/deps/icu-small/source/i18n/rbt.cpp b/deps/icu-small/source/i18n/rbt.cpp index e38aabc832d1ec..1e4b593cce4699 100644 --- a/deps/icu-small/source/i18n/rbt.cpp +++ b/deps/icu-small/source/i18n/rbt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines @@ -61,7 +63,7 @@ void RuleBasedTransliterator::_construct(const UnicodeString& rules, * @param rules rules, separated by ';' * @param direction either FORWARD or REVERSE. * @param adoptedFilter the filter for this transliterator. - * @param parseError Struct to recieve information on position + * @param parseError Struct to recieve information on position * of error if an error is encountered * @param status Output param set to success/failure code. * @exception IllegalArgumentException if rules are malformed @@ -234,16 +236,16 @@ RuleBasedTransliterator::handleTransliterate(Replaceable& text, UTransPosition& } // Transliterator locking. Rule-based Transliterators are not thread safe; concurrent - // operations must be prevented. + // operations must be prevented. // A Complication: compound transliterators can result in recursive entries to this - // function, sometimes with different "This" objects, always with the same text. + // function, sometimes with different "This" objects, always with the same text. // Double-locking must be prevented in these cases. - // + // UBool lockedMutexAtThisLevel = FALSE; // Test whether this request is operating on the same text string as - // some other transliteration that is still in progress and holding the + // some other transliteration that is still in progress and holding the // transliteration mutex. If so, do not lock the transliteration // mutex again. // @@ -262,7 +264,7 @@ RuleBasedTransliterator::handleTransliterate(Replaceable& text, UTransPosition& gLockedText = &text; lockedMutexAtThisLevel = TRUE; } - + // Check to make sure we don't dereference a null pointer. if (fData != NULL) { while (index.start < index.limit && diff --git a/deps/icu-small/source/i18n/rbt.h b/deps/icu-small/source/i18n/rbt.h index f8a6f3cbc41116..32ab156c6bc787 100644 --- a/deps/icu-small/source/i18n/rbt.h +++ b/deps/icu-small/source/i18n/rbt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines @@ -34,18 +36,18 @@ class TransliterationRuleData; * Whitespace, as defined by Character.isWhitespace(), * is ignored. If the first non-blank character on a line is '#', * the entire line is ignored as a comment.

    - * + * *

    Each set of rules consists of two groups, one forward, and one * reverse. This is a convention that is not enforced; rules for one * direction may be omitted, with the result that translations in * that direction will not modify the source text. In addition, * bidirectional forward-reverse rules may be specified for * symmetrical transformations.

    - * + * *

    Rule syntax

    - * + * *

    Rule statements take one of the following forms:

    - * + * *
    *
    $alefmadda=\u0622;
    *
    Variable definition. The name on the @@ -73,7 +75,7 @@ class TransliterationRuleData; * the string on the left when performing reverse * transliteration.
    *
    - * + * *
    *
    ai<>$alefmadda;
    *
    Bidirectional translation rule. This @@ -82,7 +84,7 @@ class TransliterationRuleData; * transliteration, and vice versa when performing reverse * transliteration.
    *
    - * + * *

    Translation rules consist of a match pattern and an output * string. The match pattern consists of literal characters, * optionally preceded by context, and optionally followed by @@ -99,7 +101,7 @@ class TransliterationRuleData; * (or "123}456") in which the literal * pattern "123" must be followed by "456". *

    - * + * *

    The output string of a forward or reverse rule consists of * characters to replace the literal pattern characters. If the * output string contains the character '|', this is @@ -109,59 +111,59 @@ class TransliterationRuleData; * placed within the replacement text; however, it can actually be * placed into the precending or following context by using the * special character '@'. Examples:

    - * + * *
    *

    a {foo} z > | @ bar; # foo -> bar, move cursor * before a
    * {foo} xyz > bar @@|; # foo -> bar, cursor between * y and z

    *
    - * + * *

    UnicodeSet

    - * + * *

    UnicodeSet patterns may appear anywhere that * makes sense. They may appear in variable definitions. * Contrariwise, UnicodeSet patterns may themselves * contain variable references, such as "$a=[a-z];$not_a=[^$a]", * or "$range=a-z;$ll=[$range]".

    - * + * *

    UnicodeSet patterns may also be embedded directly * into rule strings. Thus, the following two rules are equivalent:

    - * + * *
    *

    $vowel=[aeiou]; $vowel>'*'; # One way to do this
    * [aeiou]>'*'; *                # * Another way

    *
    - * + * *

    See {@link UnicodeSet} for more documentation and examples.

    - * + * *

    Segments

    - * + * *

    Segments of the input string can be matched and copied to the * output string. This makes certain sets of rules simpler and more * general, and makes reordering possible. For example:

    - * + * *
    *

    ([a-z]) > $1 $1; *           # * double lowercase letters
    * ([:Lu:]) ([:Ll:]) > $2 $1; # reverse order of Lu-Ll pairs

    *
    - * + * *

    The segment of the input string to be copied is delimited by * "(" and ")". Up to * nine segments may be defined. Segments may not overlap. In the * output string, "$1" through "$9" * represent the input string segments, in left-to-right order of * definition.

    - * + * *

    Anchors

    - * + * *

    Patterns can be anchored to the beginning or the end of the text. This is done with the * special characters '^' and '$'. For example:

    - * + * *
    *

    ^ a   > 'BEG_A';   # match 'a' at start of text
    *   a   > 'A';       # match other instances @@ -170,24 +172,24 @@ class TransliterationRuleData; *   z   > 'Z';       # match other instances * of 'z'

    *
    - * + * *

    It is also possible to match the beginning or the end of the text using a UnicodeSet. * This is done by including a virtual anchor character '$' at the end of the * set pattern. Although this is usually the match chafacter for the end anchor, the set will * match either the beginning or the end of the text, depending on its placement. For * example:

    - * + * *
    *

    $x = [a-z$];   # match 'a' through 'z' OR anchor
    * $x 1    > 2;   # match '1' after a-z or at the start
    *    3 $x > 4;   # match '3' before a-z or at the end

    *
    - * + * *

    Example

    - * + * *

    The following example rules illustrate many of the features of * the rule language.

    - * + * * * * @@ -202,10 +204,10 @@ class TransliterationRuleData; * * *
    Rule 1.yz>q
    - * + * *

    Applying these rules to the string "adefabcdefz" * yields the following results:

    - * + * * * * @@ -258,23 +260,23 @@ class TransliterationRuleData; * transliteration is complete. * *
    |adefabcdefz
    - * + * *

    The order of rules is significant. If multiple rules may match * at some point, the first matching rule is applied.

    - * + * *

    Forward and reverse rules may have an empty output string. * Otherwise, an empty left or right hand side of any statement is a * syntax error.

    - * + * *

    Single quotes are used to quote any character other than a * digit or letter. To specify a single quote itself, inside or * outside of quotes, use two single quotes in a row. For example, * the rule "'>'>o''clock" changes the * string ">" to the string "o'clock". *

    - * + * *

    Notes

    - * + * *

    While a RuleBasedTransliterator is being built, it checks that * the rules are added in proper order. For example, if the rule * "a>x" is followed by the rule "ab>y", @@ -282,7 +284,7 @@ class TransliterationRuleData; * the second rule can never be triggered, since the first rule * always matches anything it matches. In other words, the first * rule masks the second rule.

    - * + * * @author Alan Liu * @internal Use transliterator factory methods instead since this class will be removed in that release. */ @@ -450,7 +452,7 @@ class RuleBasedTransliterator : public Transliterator { * is to implement a simple version of RTTI, since not all C++ * compilers support genuine RTTI. Polymorphic operator==() and * clone() methods call this method. - * + * * @return The class ID for this object. All objects of a given * class have the same class ID. Objects of other classes have * different class IDs. diff --git a/deps/icu-small/source/i18n/rbt_data.cpp b/deps/icu-small/source/i18n/rbt_data.cpp index 579c681de0e35c..4f568de5d4047c 100644 --- a/deps/icu-small/source/i18n/rbt_data.cpp +++ b/deps/icu-small/source/i18n/rbt_data.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines @@ -49,7 +51,7 @@ TransliterationRuleData::TransliterationRuleData(const TransliterationRuleData& new UnicodeString(*(const UnicodeString*)e->value.pointer); // Exit out if value could not be created. if (value == NULL) { - return; + return; } variableNames.put(*(UnicodeString*)e->key.pointer, value, status); } diff --git a/deps/icu-small/source/i18n/rbt_data.h b/deps/icu-small/source/i18n/rbt_data.h index ce833dc26dd509..29e39a59ef076c 100644 --- a/deps/icu-small/source/i18n/rbt_data.h +++ b/deps/icu-small/source/i18n/rbt_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/rbt_pars.cpp b/deps/icu-small/source/i18n/rbt_pars.cpp index c6840456ddef1a..17f7526646953c 100644 --- a/deps/icu-small/source/i18n/rbt_pars.cpp +++ b/deps/icu-small/source/i18n/rbt_pars.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines @@ -367,10 +369,10 @@ int32_t RuleHalf::parse(const UnicodeString& rule, int32_t pos, int32_t limit, U if (cursorOffset > 0 && cursor != cursorOffsetPos) { return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start, status); } - + return pos; } - + /** * Parse a section of one side of a rule, stopping at either * the limit, the END_OF_RULE character, an operator, or a @@ -407,7 +409,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l int32_t varStart = -1; // Most recent $variableReference int32_t varLimit = -1; int32_t bufStart = buf.length(); - + while (pos < limit && !done) { // Since all syntax characters are in the BMP, fetching // 16-bit code units suffices here. @@ -435,7 +437,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l if (U_FAILURE(status)) { return syntaxError(U_MALFORMED_SET, rule, start, status); } - pos = pp.getIndex(); + pos = pp.getIndex(); continue; } // Handle escapes @@ -503,7 +505,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l } switch (c) { - + //------------------------------------------------------ // Elements allowed within and out of segments //------------------------------------------------------ @@ -520,15 +522,15 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l // bufSegStart is the offset in buf to the first // character of the segment we are parsing. int32_t bufSegStart = buf.length(); - + // Record segment number now, since nextSegmentNumber // will be incremented during the call to parseSection // if there are nested segments. int32_t segmentNumber = nextSegmentNumber++; // 1-based - + // Parse the segment pos = parseSection(rule, pos, limit, buf, UnicodeString(TRUE, ILLEGAL_SEG, -1), TRUE, status); - + // After parsing a segment, the relevant characters are // in buf, starting at offset bufSegStart. Extract them // into a string matcher, and replace them with a @@ -539,7 +541,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l if (m == NULL) { return syntaxError(U_MEMORY_ALLOCATION_ERROR, rule, start, status); } - + // Record and associate object and segment number parser.setSegmentObject(segmentNumber, m, status); buf.truncate(bufSegStart); @@ -557,20 +559,20 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l !ICU_Utility::parseChar(rule, iref, SEGMENT_OPEN)) { return syntaxError(U_INVALID_FUNCTION, rule, start, status); } - + Transliterator *t = single->createInstance(); delete single; if (t == NULL) { return syntaxError(U_INVALID_FUNCTION, rule, start, status); } - + // bufSegStart is the offset in buf to the first // character of the segment we are parsing. int32_t bufSegStart = buf.length(); - + // Parse the segment pos = parseSection(rule, iref, limit, buf, UnicodeString(TRUE, ILLEGAL_FUNC, -1), TRUE, status); - + // After parsing a segment, the relevant characters are // in buf, starting at offset bufSegStart. UnicodeString output; @@ -580,7 +582,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l if (r == NULL) { return syntaxError(U_MEMORY_ALLOCATION_ERROR, rule, start, status); } - + // Replace the buffer contents with a stand-in buf.truncate(bufSegStart); buf.append(parser.generateStandInFor(r, status)); @@ -862,7 +864,7 @@ TransliteratorParser::parse(const UnicodeString& rules, /** * Return the compound filter parsed by parse(). Caller owns result. - */ + */ UnicodeSet* TransliteratorParser::orphanCompoundFilter() { UnicodeSet* f = compoundFilter; compoundFilter = NULL; @@ -891,7 +893,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, UBool parsingIDs = TRUE; int32_t ruleCount = 0; - + while (!dataVector.isEmpty()) { delete (TransliterationRuleData*)(dataVector.orphanElementAt(0)); } @@ -954,7 +956,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, // keep track of how many rules we've seen ++ruleCount; - + // We've found the start of a rule or ID. c is its first // character, and pos points past c. --pos; @@ -970,7 +972,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, } int32_t p = pos; - + if (!parsingIDs) { if (curData != NULL) { if (direction == UTRANS_FORWARD) @@ -1081,7 +1083,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, else dataVector.insertElementAt(curData, 0, status); } - + if (U_SUCCESS(status)) { // Convert the set vector to an array int32_t i, dataVectorSize = dataVector.size(); @@ -1104,7 +1106,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, data->variables[j] = static_cast(variablesVector.elementAt(j)); } - + data->variableNames.removeAll(); int32_t pos = UHASH_FIRST; const UHashElement* he = variableNames.nextElement(pos); @@ -1127,7 +1129,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, (direction == UTRANS_REVERSE && compoundFilterOffset != ruleCount)) { status = U_MISPLACED_COMPOUND_FILTER; } - } + } for (i = 0; i < dataVectorSize; i++) { TransliterationRuleData* data = (TransliterationRuleData*)dataVector.elementAt(i); @@ -1147,7 +1149,7 @@ void TransliteratorParser::setVariableRange(int32_t start, int32_t end, UErrorCo status = U_MALFORMED_PRAGMA; return; } - + curData->variablesBase = (UChar) start; if (dataVector.size() == 0) { variableNext = (UChar) start; @@ -1212,12 +1214,12 @@ UBool TransliteratorParser::resemblesPragma(const UnicodeString& rule, int32_t p */ int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status) { int32_t array[2]; - + // resemblesPragma() has already returned true, so we // know that pos points to /use\s/i; we can skip 4 characters // immediately pos += 4; - + // Here are the pragmas we recognize: // use variable range 0xE000 0xEFFF; // use maximum backup 16; @@ -1228,25 +1230,25 @@ int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos setVariableRange(array[0], array[1], status); return p; } - + p = ICU_Utility::parsePattern(rule, pos, limit, UnicodeString(TRUE, PRAGMA_MAXIMUM_BACKUP, -1), array); if (p >= 0) { pragmaMaximumBackup(array[0]); return p; } - + p = ICU_Utility::parsePattern(rule, pos, limit, UnicodeString(TRUE, PRAGMA_NFD_RULES, -1), NULL); if (p >= 0) { pragmaNormalizeRules(UNORM_NFD); return p; } - + p = ICU_Utility::parsePattern(rule, pos, limit, UnicodeString(TRUE, PRAGMA_NFC_RULES, -1), NULL); if (p >= 0) { pragmaNormalizeRules(UNORM_NFC); return p; } - + // Syntax error: unable to parse pragma return -1; } @@ -1343,7 +1345,7 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, if (left->anchorStart || left->anchorEnd || right->anchorStart || right->anchorEnd) { return syntaxError(U_MALFORMED_VARIABLE_DEFINITION, rule, start, status); - } + } // We allow anything on the right, including an empty string. UnicodeString* value = new UnicodeString(right->text); // NULL pointer check @@ -1377,7 +1379,7 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, syntaxError(U_INTERNAL_TRANSLITERATOR_ERROR, rule, start, status); // will never happen } } - + // If the direction we want doesn't match the rule // direction, do nothing. if (op != FWDREV_RULE_OP && @@ -1475,20 +1477,20 @@ int32_t TransliteratorParser::syntaxError(UErrorCode parseErrorCode, { parseError.offset = pos; parseError.line = 0 ; /* we are not using line numbers */ - + // for pre-context const int32_t LEN = U_PARSE_CONTEXT_LEN - 1; int32_t start = uprv_max(pos - LEN, 0); int32_t stop = pos; - + rule.extract(start,stop-start,parseError.preContext); //null terminate the buffer parseError.preContext[stop-start] = 0; - + //for post-context start = pos; stop = uprv_min(pos + LEN, rule.length()); - + rule.extract(start,stop-start,parseError.postContext); //null terminate the buffer parseError.postContext[stop-start]= 0; @@ -1521,7 +1523,7 @@ UChar TransliteratorParser::parseSet(const UnicodeString& rule, */ UChar TransliteratorParser::generateStandInFor(UnicodeFunctor* adopted, UErrorCode& status) { // assert(obj != null); - + // Look up previous stand-in, if any. This is a short list // (typical n is 0, 1, or 2); linear search is optimal. for (int32_t i=0; ivariablesBase + i); } } - + if (variableNext >= variableLimit) { delete adopted; status = U_VARIABLE_RANGE_EXHAUSTED; diff --git a/deps/icu-small/source/i18n/rbt_pars.h b/deps/icu-small/source/i18n/rbt_pars.h index 497c1e31820938..1099dbf1a237ac 100644 --- a/deps/icu-small/source/i18n/rbt_pars.h +++ b/deps/icu-small/source/i18n/rbt_pars.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines Corporation @@ -82,8 +84,8 @@ class TransliteratorParser : public UMemory { * Temporary table of variable names. When parsing is complete, this is * copied into data.variableNames. */ - Hashtable variableNames; - + Hashtable variableNames; + /** * String of standins for segments. Used during the parsing of a single * rule. segmentStandins.charAt(0) is the standin for "$1" and corresponds @@ -93,7 +95,7 @@ class TransliteratorParser : public UMemory { /** * Vector of StringMatcher objects for segments. Used during the - * parsing of a single rule. + * parsing of a single rule. * segmentStandins.charAt(0) is the standin for "$1" and corresponds * to StringMatcher object segmentObjects.elementAt(0), etc. */ @@ -154,7 +156,7 @@ class TransliteratorParser : public UMemory { * call returns. * @param rules rules, separated by ';' * @param direction either FORWARD or REVERSE. - * @param pe Struct to recieve information on position + * @param pe Struct to recieve information on position * of error if an error is encountered * @param ec Output param set to success/failure code. */ @@ -166,7 +168,7 @@ class TransliteratorParser : public UMemory { /** * Return the compound filter parsed by parse(). Caller owns result. * @return the compound filter parsed by parse(). - */ + */ UnicodeSet* orphanCompoundFilter(); private: @@ -326,7 +328,7 @@ class TransliteratorParser : public UMemory { * Copy constructor */ TransliteratorParser(const TransliteratorParser&); - + /** * Assignment operator */ diff --git a/deps/icu-small/source/i18n/rbt_rule.cpp b/deps/icu-small/source/i18n/rbt_rule.cpp index e88df7e5aec65a..36a07d9a9759f8 100644 --- a/deps/icu-small/source/i18n/rbt_rule.cpp +++ b/deps/icu-small/source/i18n/rbt_rule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -124,7 +126,7 @@ TransliterationRule::TransliterationRule(const UnicodeString& input, return; } } - + key = NULL; if (keyLength > 0) { key = new StringMatcher(pattern, anteContextLength, anteContextLength + keyLength, @@ -135,7 +137,7 @@ TransliterationRule::TransliterationRule(const UnicodeString& input, return; } } - + int32_t postContextLength = pattern.length() - keyLength - anteContextLength; postContext = NULL; if (postContextLength > 0) { @@ -174,7 +176,7 @@ TransliterationRule::TransliterationRule(TransliterationRule& other) : segmentsCount = 0; if (other.segmentsCount > 0) { segments = (UnicodeFunctor **)uprv_malloc(other.segmentsCount * sizeof(UnicodeFunctor *)); - uprv_memcpy(segments, other.segments, other.segmentsCount*sizeof(segments[0])); + uprv_memcpy(segments, other.segments, (size_t)other.segmentsCount*sizeof(segments[0])); } if (other.anteContext != NULL) { @@ -257,7 +259,7 @@ UBool TransliterationRule::masks(const TransliterationRule& r2) const { * r1: aakkkpppp * r2: aaakkkkkpppp * ^ - * + * * The strings must be aligned at the first character of the * key. The length of r1 to the left of the alignment point * must be <= the length of r2 to the left; ditto for the @@ -335,10 +337,10 @@ static inline int32_t posAfter(const Replaceable& str, int32_t pos) { * context and key characters match, but the text is not long * enough to match all of them. A full match means all context * and key characters match. - * + * * If a full match is obtained, perform a replacement, update pos, * and return U_MATCH. Otherwise both text and pos are unchanged. - * + * * @param text the text * @param pos the position indices * @param incremental if TRUE, test for partial matches that may @@ -381,7 +383,7 @@ UMatchDegree TransliterationRule::matchAndReplace(Replaceable& text, // 32-bit code points. This works because stand-ins are // always in the BMP and because we are doing a literal match // operation, which can be done 16-bits at a time. - + int32_t anteLimit = posBefore(text, pos.contextStart); UMatchDegree match; @@ -399,13 +401,13 @@ UMatchDegree TransliterationRule::matchAndReplace(Replaceable& text, minOText = posAfter(text, oText); // ------------------------ Start Anchor ------------------------ - + if (((flags & ANCHOR_START) != 0) && oText != anteLimit) { return U_MISMATCH; } // -------------------- Key and Post Context -------------------- - + oText = pos.start; if (key != NULL) { @@ -431,9 +433,9 @@ UMatchDegree TransliterationRule::matchAndReplace(Replaceable& text, return match; } } - + // ------------------------- Stop Anchor ------------------------ - + if (((flags & ANCHOR_END)) != 0) { if (oText != pos.contextLimit) { return U_MISMATCH; @@ -442,7 +444,7 @@ UMatchDegree TransliterationRule::matchAndReplace(Replaceable& text, return U_PARTIAL_MATCH; } } - + // =========================== REPLACE ========================== // We have a full match. The key is between pos.start and diff --git a/deps/icu-small/source/i18n/rbt_rule.h b/deps/icu-small/source/i18n/rbt_rule.h index ffbd25c6a8c55a..85937f3e3b0e2c 100644 --- a/deps/icu-small/source/i18n/rbt_rule.h +++ b/deps/icu-small/source/i18n/rbt_rule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) {1999-2001}, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** @@ -259,10 +261,10 @@ class TransliterationRule : public UMemory { * context and key characters match, but the text is not long * enough to match all of them. A full match means all context * and key characters match. - * + * * If a full match is obtained, perform a replacement, update pos, * and return U_MATCH. Otherwise both text and pos are unchanged. - * + * * @param text the text * @param pos the position indices * @param incremental if TRUE, test for partial matches that may diff --git a/deps/icu-small/source/i18n/rbt_set.cpp b/deps/icu-small/source/i18n/rbt_set.cpp index 425e3e72581233..0385766c11ba19 100644 --- a/deps/icu-small/source/i18n/rbt_set.cpp +++ b/deps/icu-small/source/i18n/rbt_set.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -141,19 +143,19 @@ static void maskingError(const icu::TransliterationRule& rule1, int32_t len; parseError.line = parseError.offset = -1; - + // for pre-context rule1.toRule(r, FALSE); len = uprv_min(r.length(), U_PARSE_CONTEXT_LEN-1); r.extract(0, len, parseError.preContext); - parseError.preContext[len] = 0; - + parseError.preContext[len] = 0; + //for post-context r.truncate(0); rule2.toRule(r, FALSE); len = uprv_min(r.length(), U_PARSE_CONTEXT_LEN-1); r.extract(0, len, parseError.postContext); - parseError.postContext[len] = 0; + parseError.postContext[len] = 0; } U_NAMESPACE_BEGIN diff --git a/deps/icu-small/source/i18n/rbt_set.h b/deps/icu-small/source/i18n/rbt_set.h index cbf3419a970558..573c079e65febb 100644 --- a/deps/icu-small/source/i18n/rbt_set.h +++ b/deps/icu-small/source/i18n/rbt_set.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines Corporation @@ -118,7 +120,7 @@ class TransliterationRuleSet : public UMemory { * @param status Output parameter filled in with success or failure status. */ virtual void freeze(UParseError& parseError, UErrorCode& status); - + /** * Transliterate the given text with the given UTransPosition * indices. Return TRUE if the transliteration should continue diff --git a/deps/icu-small/source/i18n/rbtz.cpp b/deps/icu-small/source/i18n/rbtz.cpp index 73fc480e1d3ebd..2b35c9562b3d97 100644 --- a/deps/icu-small/source/i18n/rbtz.cpp +++ b/deps/icu-small/source/i18n/rbtz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and @@ -447,7 +449,7 @@ RuleBasedTimeZone::getOffsetInternal(UDate date, UBool local, } if (rule == NULL) { // no final rules or the given time is before the first transition - // specified by the final rules -> use the last rule + // specified by the final rules -> use the last rule rule = ((Transition*)fHistoricTransitions->elementAt(idx))->to; } } else { @@ -747,7 +749,7 @@ RuleBasedTimeZone::findNext(UDate base, UBool inclusive, UDate& transitionTime, result = *tzt; found = TRUE; } else { - int32_t idx = fHistoricTransitions->size() - 1; + int32_t idx = fHistoricTransitions->size() - 1; tzt = (Transition*)fHistoricTransitions->elementAt(idx); tt = tzt->time; if (inclusive && tt == base) { @@ -830,7 +832,7 @@ RuleBasedTimeZone::findPrev(UDate base, UBool inclusive, UDate& transitionTime, result = *tzt; found = TRUE; } else if (tt < base) { - int32_t idx = fHistoricTransitions->size() - 1; + int32_t idx = fHistoricTransitions->size() - 1; tzt = (Transition*)fHistoricTransitions->elementAt(idx); tt = tzt->time; if (inclusive && tt == base) { @@ -954,3 +956,4 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ //eof + diff --git a/deps/icu-small/source/i18n/regexcmp.cpp b/deps/icu-small/source/i18n/regexcmp.cpp index 8262cfaed45c13..2657cf37cbecca 100644 --- a/deps/icu-small/source/i18n/regexcmp.cpp +++ b/deps/icu-small/source/i18n/regexcmp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: regexcmp.cpp // @@ -447,7 +449,7 @@ UBool RegexCompile::doParseActions(int32_t action) case doBadNamedCapture: error(U_REGEX_INVALID_CAPTURE_GROUP_NAME); break; - + case doOpenCaptureParen: // Open Capturing Paren, possibly named. // Compile to a @@ -1322,7 +1324,7 @@ UBool RegexCompile::doParseActions(int32_t action) error(U_MEMORY_ALLOCATION_ERROR); } break; - + case doContinueNamedBackRef: fCaptureName->append(fC.fChar); break; @@ -1349,7 +1351,7 @@ UBool RegexCompile::doParseActions(int32_t action) fCaptureName = NULL; break; } - + case doPossessivePlus: // Possessive ++ quantifier. // Compiles to @@ -2536,8 +2538,8 @@ UBool RegexCompile::compileInlineInterval() { //------------------------------------------------------------------------------ // -// caseInsensitiveStart given a single code point from a pattern string, determine the -// set of characters that could potentially begin a case-insensitive +// caseInsensitiveStart given a single code point from a pattern string, determine the +// set of characters that could potentially begin a case-insensitive // match of a string beginning with that character, using full Unicode // case insensitive matching. // @@ -2568,42 +2570,46 @@ void RegexCompile::findCaseInsensitiveStarters(UChar32 c, UnicodeSet *starterCh // Machine Generated Data. Do not hand edit. static const UChar32 RECaseFixCodePoints[] = { - 0x61, 0x66, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x77, 0x79, 0x2bc, - 0x3ac, 0x3ae, 0x3b1, 0x3b7, 0x3b9, 0x3c1, 0x3c5, 0x3c9, 0x3ce, 0x565, - 0x574, 0x57e, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, - 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f60, 0x1f61, + 0x61, 0x66, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x77, 0x79, 0x2bc, + 0x3ac, 0x3ae, 0x3b1, 0x3b7, 0x3b9, 0x3c1, 0x3c5, 0x3c9, 0x3ce, 0x565, + 0x574, 0x57e, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, + 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1f70, 0x1f74, 0x1f7c, 0x110000}; static const int16_t RECaseFixStringOffsets[] = { - 0x0, 0x1, 0x6, 0x7, 0x8, 0x9, 0xd, 0xe, 0xf, 0x10, - 0x11, 0x12, 0x13, 0x17, 0x1b, 0x20, 0x21, 0x2a, 0x2e, 0x2f, - 0x30, 0x34, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, - 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 0x51, 0x53, 0x55, 0x57, + 0x0, 0x1, 0x6, 0x7, 0x8, 0x9, 0xd, 0xe, 0xf, 0x10, + 0x11, 0x12, 0x13, 0x17, 0x1b, 0x20, 0x21, 0x2a, 0x2e, 0x2f, + 0x30, 0x34, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, + 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65, 0x66, 0x67, 0}; static const int16_t RECaseFixCounts[] = { - 0x1, 0x5, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x4, 0x4, 0x5, 0x1, 0x9, 0x4, 0x1, 0x1, - 0x4, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x5, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x4, 0x4, 0x5, 0x1, 0x9, 0x4, 0x1, 0x1, + 0x4, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0}; static const UChar RECaseFixData[] = { - 0x1e9a, 0xfb00, 0xfb01, 0xfb02, 0xfb03, 0xfb04, 0x1e96, 0x130, 0x1f0, 0xdf, - 0x1e9e, 0xfb05, 0xfb06, 0x1e97, 0x1e98, 0x1e99, 0x149, 0x1fb4, 0x1fc4, 0x1fb3, - 0x1fb6, 0x1fb7, 0x1fbc, 0x1fc3, 0x1fc6, 0x1fc7, 0x1fcc, 0x390, 0x1fd2, 0x1fd3, - 0x1fd6, 0x1fd7, 0x1fe4, 0x3b0, 0x1f50, 0x1f52, 0x1f54, 0x1f56, 0x1fe2, 0x1fe3, - 0x1fe6, 0x1fe7, 0x1ff3, 0x1ff6, 0x1ff7, 0x1ffc, 0x1ff4, 0x587, 0xfb13, 0xfb14, - 0xfb15, 0xfb17, 0xfb16, 0x1f80, 0x1f88, 0x1f81, 0x1f89, 0x1f82, 0x1f8a, 0x1f83, - 0x1f8b, 0x1f84, 0x1f8c, 0x1f85, 0x1f8d, 0x1f86, 0x1f8e, 0x1f87, 0x1f8f, 0x1f90, - 0x1f98, 0x1f91, 0x1f99, 0x1f92, 0x1f9a, 0x1f93, 0x1f9b, 0x1f94, 0x1f9c, 0x1f95, - 0x1f9d, 0x1f96, 0x1f9e, 0x1f97, 0x1f9f, 0x1fa0, 0x1fa8, 0x1fa1, 0x1fa9, 0x1fa2, - 0x1faa, 0x1fa3, 0x1fab, 0x1fa4, 0x1fac, 0x1fa5, 0x1fad, 0x1fa6, 0x1fae, 0x1fa7, + 0x1e9a, 0xfb00, 0xfb01, 0xfb02, 0xfb03, 0xfb04, 0x1e96, 0x130, 0x1f0, 0xdf, + 0x1e9e, 0xfb05, 0xfb06, 0x1e97, 0x1e98, 0x1e99, 0x149, 0x1fb4, 0x1fc4, 0x1fb3, + 0x1fb6, 0x1fb7, 0x1fbc, 0x1fc3, 0x1fc6, 0x1fc7, 0x1fcc, 0x390, 0x1fd2, 0x1fd3, + 0x1fd6, 0x1fd7, 0x1fe4, 0x3b0, 0x1f50, 0x1f52, 0x1f54, 0x1f56, 0x1fe2, 0x1fe3, + 0x1fe6, 0x1fe7, 0x1ff3, 0x1ff6, 0x1ff7, 0x1ffc, 0x1ff4, 0x587, 0xfb13, 0xfb14, + 0xfb15, 0xfb17, 0xfb16, 0x1f80, 0x1f88, 0x1f81, 0x1f89, 0x1f82, 0x1f8a, 0x1f83, + 0x1f8b, 0x1f84, 0x1f8c, 0x1f85, 0x1f8d, 0x1f86, 0x1f8e, 0x1f87, 0x1f8f, 0x1f90, + 0x1f98, 0x1f91, 0x1f99, 0x1f92, 0x1f9a, 0x1f93, 0x1f9b, 0x1f94, 0x1f9c, 0x1f95, + 0x1f9d, 0x1f96, 0x1f9e, 0x1f97, 0x1f9f, 0x1fa0, 0x1fa8, 0x1fa1, 0x1fa9, 0x1fa2, + 0x1faa, 0x1fa3, 0x1fab, 0x1fa4, 0x1fac, 0x1fa5, 0x1fad, 0x1fa6, 0x1fae, 0x1fa7, 0x1faf, 0x1fb2, 0x1fc2, 0x1ff2, 0}; // End of machine generated data. - if (u_hasBinaryProperty(c, UCHAR_CASE_SENSITIVE)) { + if (c < UCHAR_MIN_VALUE || c > UCHAR_MAX_VALUE) { + // This function should never be called with an invalid input character. + U_ASSERT(FALSE); + starterChars->clear(); + } else if (u_hasBinaryProperty(c, UCHAR_CASE_SENSITIVE)) { UChar32 caseFoldedC = u_foldCase(c, U_FOLD_CASE_DEFAULT); starterChars->set(caseFoldedC, caseFoldedC); @@ -3654,7 +3660,7 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) { U_ASSERT(loopEndLoc >= loc+4); int64_t blockLen = maxMatchLength(loc+4, loopEndLoc-1); // Recursive call. - int64_t updatedLen = (int64_t)currentLen + blockLen * maxLoopCount; + int64_t updatedLen = (int64_t)currentLen + blockLen * maxLoopCount; if (updatedLen >= INT32_MAX) { currentLen = INT32_MAX; break; @@ -4633,3 +4639,4 @@ void RegexCompile::setPushOp(int32_t op) { U_NAMESPACE_END #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS + diff --git a/deps/icu-small/source/i18n/regexcmp.h b/deps/icu-small/source/i18n/regexcmp.h index 896de17f58ead0..578fdcf73502b9 100644 --- a/deps/icu-small/source/i18n/regexcmp.h +++ b/deps/icu-small/source/i18n/regexcmp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // regexcmp.h // @@ -57,7 +59,7 @@ class U_I18N_API RegexCompile : public UMemory { void compile(const UnicodeString &pat, UParseError &pp, UErrorCode &e); void compile(UText *pat, UParseError &pp, UErrorCode &e); - + virtual ~RegexCompile(); @@ -180,7 +182,7 @@ class U_I18N_API RegexCompile : public UMemory { // string will be cleared. int64_t fPatternLength; // Length of the input pattern string. - + UVector32 fParenStack; // parentheses stack. Each frame consists of // the positions of compiled pattern operations // needing fixup, followed by negative value. The diff --git a/deps/icu-small/source/i18n/regexcst.h b/deps/icu-small/source/i18n/regexcst.h index 8e572e21207591..8a5c82963a2514 100644 --- a/deps/icu-small/source/i18n/regexcst.h +++ b/deps/icu-small/source/i18n/regexcst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------------------------------- // // Generated Header File. Do not edit by hand. @@ -5,8 +7,8 @@ // It is generated by the Perl script "regexcst.pl" from // the rule parser state definitions file "regexcst.txt". // -// Copyright (C) 2002-2016 International Business Machines Corporation -// and others. All rights reserved. +// Copyright (C) 2002-2016 International Business Machines Corporation +// and others. All rights reserved. // //--------------------------------------------------------------------------------- #ifndef RBBIRPT_H @@ -150,208 +152,208 @@ static const struct RegexTableEl gRuleParseStateTable[] = { {doNOP, 0, 0, 0, TRUE} , {doPatStart, 255, 2,0, FALSE} // 1 start , {doLiteralChar, 254, 14,0, TRUE} // 2 term - , {doLiteralChar, 130, 14,0, TRUE} // 3 - , {doSetBegin, 91 /* [ */, 123, 205, TRUE} // 4 - , {doNOP, 40 /* ( */, 27,0, TRUE} // 5 - , {doDotAny, 46 /* . */, 14,0, TRUE} // 6 - , {doCaret, 94 /* ^ */, 14,0, TRUE} // 7 - , {doDollar, 36 /* $ */, 14,0, TRUE} // 8 - , {doNOP, 92 /* \ */, 89,0, TRUE} // 9 - , {doOrOperator, 124 /* | */, 2,0, TRUE} // 10 - , {doCloseParen, 41 /* ) */, 255,0, TRUE} // 11 - , {doPatFinish, 253, 2,0, FALSE} // 12 - , {doRuleError, 255, 206,0, FALSE} // 13 + , {doLiteralChar, 130, 14,0, TRUE} // 3 + , {doSetBegin, 91 /* [ */, 123, 205, TRUE} // 4 + , {doNOP, 40 /* ( */, 27,0, TRUE} // 5 + , {doDotAny, 46 /* . */, 14,0, TRUE} // 6 + , {doCaret, 94 /* ^ */, 14,0, TRUE} // 7 + , {doDollar, 36 /* $ */, 14,0, TRUE} // 8 + , {doNOP, 92 /* \ */, 89,0, TRUE} // 9 + , {doOrOperator, 124 /* | */, 2,0, TRUE} // 10 + , {doCloseParen, 41 /* ) */, 255,0, TRUE} // 11 + , {doPatFinish, 253, 2,0, FALSE} // 12 + , {doRuleError, 255, 206,0, FALSE} // 13 , {doNOP, 42 /* * */, 68,0, TRUE} // 14 expr-quant - , {doNOP, 43 /* + */, 71,0, TRUE} // 15 - , {doNOP, 63 /* ? */, 74,0, TRUE} // 16 - , {doIntervalInit, 123 /* { */, 77,0, TRUE} // 17 - , {doNOP, 40 /* ( */, 23,0, TRUE} // 18 - , {doNOP, 255, 20,0, FALSE} // 19 + , {doNOP, 43 /* + */, 71,0, TRUE} // 15 + , {doNOP, 63 /* ? */, 74,0, TRUE} // 16 + , {doIntervalInit, 123 /* { */, 77,0, TRUE} // 17 + , {doNOP, 40 /* ( */, 23,0, TRUE} // 18 + , {doNOP, 255, 20,0, FALSE} // 19 , {doOrOperator, 124 /* | */, 2,0, TRUE} // 20 expr-cont - , {doCloseParen, 41 /* ) */, 255,0, TRUE} // 21 - , {doNOP, 255, 2,0, FALSE} // 22 + , {doCloseParen, 41 /* ) */, 255,0, TRUE} // 21 + , {doNOP, 255, 2,0, FALSE} // 22 , {doSuppressComments, 63 /* ? */, 25,0, TRUE} // 23 open-paren-quant - , {doNOP, 255, 27,0, FALSE} // 24 + , {doNOP, 255, 27,0, FALSE} // 24 , {doNOP, 35 /* # */, 50, 14, TRUE} // 25 open-paren-quant2 - , {doNOP, 255, 29,0, FALSE} // 26 + , {doNOP, 255, 29,0, FALSE} // 26 , {doSuppressComments, 63 /* ? */, 29,0, TRUE} // 27 open-paren - , {doOpenCaptureParen, 255, 2, 14, FALSE} // 28 + , {doOpenCaptureParen, 255, 2, 14, FALSE} // 28 , {doOpenNonCaptureParen, 58 /* : */, 2, 14, TRUE} // 29 open-paren-extended - , {doOpenAtomicParen, 62 /* > */, 2, 14, TRUE} // 30 - , {doOpenLookAhead, 61 /* = */, 2, 20, TRUE} // 31 - , {doOpenLookAheadNeg, 33 /* ! */, 2, 20, TRUE} // 32 - , {doNOP, 60 /* < */, 46,0, TRUE} // 33 - , {doNOP, 35 /* # */, 50, 2, TRUE} // 34 - , {doBeginMatchMode, 105 /* i */, 53,0, FALSE} // 35 - , {doBeginMatchMode, 100 /* d */, 53,0, FALSE} // 36 - , {doBeginMatchMode, 109 /* m */, 53,0, FALSE} // 37 - , {doBeginMatchMode, 115 /* s */, 53,0, FALSE} // 38 - , {doBeginMatchMode, 117 /* u */, 53,0, FALSE} // 39 - , {doBeginMatchMode, 119 /* w */, 53,0, FALSE} // 40 - , {doBeginMatchMode, 120 /* x */, 53,0, FALSE} // 41 - , {doBeginMatchMode, 45 /* - */, 53,0, FALSE} // 42 - , {doConditionalExpr, 40 /* ( */, 206,0, TRUE} // 43 - , {doPerlInline, 123 /* { */, 206,0, TRUE} // 44 - , {doBadOpenParenType, 255, 206,0, FALSE} // 45 + , {doOpenAtomicParen, 62 /* > */, 2, 14, TRUE} // 30 + , {doOpenLookAhead, 61 /* = */, 2, 20, TRUE} // 31 + , {doOpenLookAheadNeg, 33 /* ! */, 2, 20, TRUE} // 32 + , {doNOP, 60 /* < */, 46,0, TRUE} // 33 + , {doNOP, 35 /* # */, 50, 2, TRUE} // 34 + , {doBeginMatchMode, 105 /* i */, 53,0, FALSE} // 35 + , {doBeginMatchMode, 100 /* d */, 53,0, FALSE} // 36 + , {doBeginMatchMode, 109 /* m */, 53,0, FALSE} // 37 + , {doBeginMatchMode, 115 /* s */, 53,0, FALSE} // 38 + , {doBeginMatchMode, 117 /* u */, 53,0, FALSE} // 39 + , {doBeginMatchMode, 119 /* w */, 53,0, FALSE} // 40 + , {doBeginMatchMode, 120 /* x */, 53,0, FALSE} // 41 + , {doBeginMatchMode, 45 /* - */, 53,0, FALSE} // 42 + , {doConditionalExpr, 40 /* ( */, 206,0, TRUE} // 43 + , {doPerlInline, 123 /* { */, 206,0, TRUE} // 44 + , {doBadOpenParenType, 255, 206,0, FALSE} // 45 , {doOpenLookBehind, 61 /* = */, 2, 20, TRUE} // 46 open-paren-lookbehind - , {doOpenLookBehindNeg, 33 /* ! */, 2, 20, TRUE} // 47 - , {doBeginNamedCapture, 128, 64,0, FALSE} // 48 - , {doBadOpenParenType, 255, 206,0, FALSE} // 49 + , {doOpenLookBehindNeg, 33 /* ! */, 2, 20, TRUE} // 47 + , {doBeginNamedCapture, 128, 64,0, FALSE} // 48 + , {doBadOpenParenType, 255, 206,0, FALSE} // 49 , {doNOP, 41 /* ) */, 255,0, TRUE} // 50 paren-comment - , {doMismatchedParenErr, 253, 206,0, FALSE} // 51 - , {doNOP, 255, 50,0, TRUE} // 52 + , {doMismatchedParenErr, 253, 206,0, FALSE} // 51 + , {doNOP, 255, 50,0, TRUE} // 52 , {doMatchMode, 105 /* i */, 53,0, TRUE} // 53 paren-flag - , {doMatchMode, 100 /* d */, 53,0, TRUE} // 54 - , {doMatchMode, 109 /* m */, 53,0, TRUE} // 55 - , {doMatchMode, 115 /* s */, 53,0, TRUE} // 56 - , {doMatchMode, 117 /* u */, 53,0, TRUE} // 57 - , {doMatchMode, 119 /* w */, 53,0, TRUE} // 58 - , {doMatchMode, 120 /* x */, 53,0, TRUE} // 59 - , {doMatchMode, 45 /* - */, 53,0, TRUE} // 60 - , {doSetMatchMode, 41 /* ) */, 2,0, TRUE} // 61 - , {doMatchModeParen, 58 /* : */, 2, 14, TRUE} // 62 - , {doBadModeFlag, 255, 206,0, FALSE} // 63 + , {doMatchMode, 100 /* d */, 53,0, TRUE} // 54 + , {doMatchMode, 109 /* m */, 53,0, TRUE} // 55 + , {doMatchMode, 115 /* s */, 53,0, TRUE} // 56 + , {doMatchMode, 117 /* u */, 53,0, TRUE} // 57 + , {doMatchMode, 119 /* w */, 53,0, TRUE} // 58 + , {doMatchMode, 120 /* x */, 53,0, TRUE} // 59 + , {doMatchMode, 45 /* - */, 53,0, TRUE} // 60 + , {doSetMatchMode, 41 /* ) */, 2,0, TRUE} // 61 + , {doMatchModeParen, 58 /* : */, 2, 14, TRUE} // 62 + , {doBadModeFlag, 255, 206,0, FALSE} // 63 , {doContinueNamedCapture, 128, 64,0, TRUE} // 64 named-capture - , {doContinueNamedCapture, 129, 64,0, TRUE} // 65 - , {doOpenCaptureParen, 62 /* > */, 2, 14, TRUE} // 66 - , {doBadNamedCapture, 255, 206,0, FALSE} // 67 + , {doContinueNamedCapture, 129, 64,0, TRUE} // 65 + , {doOpenCaptureParen, 62 /* > */, 2, 14, TRUE} // 66 + , {doBadNamedCapture, 255, 206,0, FALSE} // 67 , {doNGStar, 63 /* ? */, 20,0, TRUE} // 68 quant-star - , {doPossessiveStar, 43 /* + */, 20,0, TRUE} // 69 - , {doStar, 255, 20,0, FALSE} // 70 + , {doPossessiveStar, 43 /* + */, 20,0, TRUE} // 69 + , {doStar, 255, 20,0, FALSE} // 70 , {doNGPlus, 63 /* ? */, 20,0, TRUE} // 71 quant-plus - , {doPossessivePlus, 43 /* + */, 20,0, TRUE} // 72 - , {doPlus, 255, 20,0, FALSE} // 73 + , {doPossessivePlus, 43 /* + */, 20,0, TRUE} // 72 + , {doPlus, 255, 20,0, FALSE} // 73 , {doNGOpt, 63 /* ? */, 20,0, TRUE} // 74 quant-opt - , {doPossessiveOpt, 43 /* + */, 20,0, TRUE} // 75 - , {doOpt, 255, 20,0, FALSE} // 76 + , {doPossessiveOpt, 43 /* + */, 20,0, TRUE} // 75 + , {doOpt, 255, 20,0, FALSE} // 76 , {doNOP, 129, 79,0, FALSE} // 77 interval-open - , {doIntervalError, 255, 206,0, FALSE} // 78 + , {doIntervalError, 255, 206,0, FALSE} // 78 , {doIntevalLowerDigit, 129, 79,0, TRUE} // 79 interval-lower - , {doNOP, 44 /* , */, 83,0, TRUE} // 80 - , {doIntervalSame, 125 /* } */, 86,0, TRUE} // 81 - , {doIntervalError, 255, 206,0, FALSE} // 82 + , {doNOP, 44 /* , */, 83,0, TRUE} // 80 + , {doIntervalSame, 125 /* } */, 86,0, TRUE} // 81 + , {doIntervalError, 255, 206,0, FALSE} // 82 , {doIntervalUpperDigit, 129, 83,0, TRUE} // 83 interval-upper - , {doNOP, 125 /* } */, 86,0, TRUE} // 84 - , {doIntervalError, 255, 206,0, FALSE} // 85 + , {doNOP, 125 /* } */, 86,0, TRUE} // 84 + , {doIntervalError, 255, 206,0, FALSE} // 85 , {doNGInterval, 63 /* ? */, 20,0, TRUE} // 86 interval-type - , {doPossessiveInterval, 43 /* + */, 20,0, TRUE} // 87 - , {doInterval, 255, 20,0, FALSE} // 88 + , {doPossessiveInterval, 43 /* + */, 20,0, TRUE} // 87 + , {doInterval, 255, 20,0, FALSE} // 88 , {doBackslashA, 65 /* A */, 2,0, TRUE} // 89 backslash - , {doBackslashB, 66 /* B */, 2,0, TRUE} // 90 - , {doBackslashb, 98 /* b */, 2,0, TRUE} // 91 - , {doBackslashd, 100 /* d */, 14,0, TRUE} // 92 - , {doBackslashD, 68 /* D */, 14,0, TRUE} // 93 - , {doBackslashG, 71 /* G */, 2,0, TRUE} // 94 - , {doBackslashh, 104 /* h */, 14,0, TRUE} // 95 - , {doBackslashH, 72 /* H */, 14,0, TRUE} // 96 - , {doNOP, 107 /* k */, 115,0, TRUE} // 97 - , {doNamedChar, 78 /* N */, 14,0, FALSE} // 98 - , {doProperty, 112 /* p */, 14,0, FALSE} // 99 - , {doProperty, 80 /* P */, 14,0, FALSE} // 100 - , {doBackslashR, 82 /* R */, 14,0, TRUE} // 101 - , {doEnterQuoteMode, 81 /* Q */, 2,0, TRUE} // 102 - , {doBackslashS, 83 /* S */, 14,0, TRUE} // 103 - , {doBackslashs, 115 /* s */, 14,0, TRUE} // 104 - , {doBackslashv, 118 /* v */, 14,0, TRUE} // 105 - , {doBackslashV, 86 /* V */, 14,0, TRUE} // 106 - , {doBackslashW, 87 /* W */, 14,0, TRUE} // 107 - , {doBackslashw, 119 /* w */, 14,0, TRUE} // 108 - , {doBackslashX, 88 /* X */, 14,0, TRUE} // 109 - , {doBackslashZ, 90 /* Z */, 2,0, TRUE} // 110 - , {doBackslashz, 122 /* z */, 2,0, TRUE} // 111 - , {doBackRef, 129, 14,0, TRUE} // 112 - , {doEscapeError, 253, 206,0, FALSE} // 113 - , {doEscapedLiteralChar, 255, 14,0, TRUE} // 114 + , {doBackslashB, 66 /* B */, 2,0, TRUE} // 90 + , {doBackslashb, 98 /* b */, 2,0, TRUE} // 91 + , {doBackslashd, 100 /* d */, 14,0, TRUE} // 92 + , {doBackslashD, 68 /* D */, 14,0, TRUE} // 93 + , {doBackslashG, 71 /* G */, 2,0, TRUE} // 94 + , {doBackslashh, 104 /* h */, 14,0, TRUE} // 95 + , {doBackslashH, 72 /* H */, 14,0, TRUE} // 96 + , {doNOP, 107 /* k */, 115,0, TRUE} // 97 + , {doNamedChar, 78 /* N */, 14,0, FALSE} // 98 + , {doProperty, 112 /* p */, 14,0, FALSE} // 99 + , {doProperty, 80 /* P */, 14,0, FALSE} // 100 + , {doBackslashR, 82 /* R */, 14,0, TRUE} // 101 + , {doEnterQuoteMode, 81 /* Q */, 2,0, TRUE} // 102 + , {doBackslashS, 83 /* S */, 14,0, TRUE} // 103 + , {doBackslashs, 115 /* s */, 14,0, TRUE} // 104 + , {doBackslashv, 118 /* v */, 14,0, TRUE} // 105 + , {doBackslashV, 86 /* V */, 14,0, TRUE} // 106 + , {doBackslashW, 87 /* W */, 14,0, TRUE} // 107 + , {doBackslashw, 119 /* w */, 14,0, TRUE} // 108 + , {doBackslashX, 88 /* X */, 14,0, TRUE} // 109 + , {doBackslashZ, 90 /* Z */, 2,0, TRUE} // 110 + , {doBackslashz, 122 /* z */, 2,0, TRUE} // 111 + , {doBackRef, 129, 14,0, TRUE} // 112 + , {doEscapeError, 253, 206,0, FALSE} // 113 + , {doEscapedLiteralChar, 255, 14,0, TRUE} // 114 , {doBeginNamedBackRef, 60 /* < */, 117,0, TRUE} // 115 named-backref - , {doBadNamedCapture, 255, 206,0, FALSE} // 116 + , {doBadNamedCapture, 255, 206,0, FALSE} // 116 , {doContinueNamedBackRef, 128, 119,0, TRUE} // 117 named-backref-2 - , {doBadNamedCapture, 255, 206,0, FALSE} // 118 + , {doBadNamedCapture, 255, 206,0, FALSE} // 118 , {doContinueNamedBackRef, 128, 119,0, TRUE} // 119 named-backref-3 - , {doContinueNamedBackRef, 129, 119,0, TRUE} // 120 - , {doCompleteNamedBackRef, 62 /* > */, 14,0, TRUE} // 121 - , {doBadNamedCapture, 255, 206,0, FALSE} // 122 + , {doContinueNamedBackRef, 129, 119,0, TRUE} // 120 + , {doCompleteNamedBackRef, 62 /* > */, 14,0, TRUE} // 121 + , {doBadNamedCapture, 255, 206,0, FALSE} // 122 , {doSetNegate, 94 /* ^ */, 126,0, TRUE} // 123 set-open - , {doSetPosixProp, 58 /* : */, 128,0, FALSE} // 124 - , {doNOP, 255, 126,0, FALSE} // 125 + , {doSetPosixProp, 58 /* : */, 128,0, FALSE} // 124 + , {doNOP, 255, 126,0, FALSE} // 125 , {doSetLiteral, 93 /* ] */, 141,0, TRUE} // 126 set-open2 - , {doNOP, 255, 131,0, FALSE} // 127 + , {doNOP, 255, 131,0, FALSE} // 127 , {doSetEnd, 93 /* ] */, 255,0, TRUE} // 128 set-posix - , {doNOP, 58 /* : */, 131,0, FALSE} // 129 - , {doRuleError, 255, 206,0, FALSE} // 130 + , {doNOP, 58 /* : */, 131,0, FALSE} // 129 + , {doRuleError, 255, 206,0, FALSE} // 130 , {doSetEnd, 93 /* ] */, 255,0, TRUE} // 131 set-start - , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 132 - , {doNOP, 92 /* \ */, 191,0, TRUE} // 133 - , {doNOP, 45 /* - */, 137,0, TRUE} // 134 - , {doNOP, 38 /* & */, 139,0, TRUE} // 135 - , {doSetLiteral, 255, 141,0, TRUE} // 136 + , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 132 + , {doNOP, 92 /* \ */, 191,0, TRUE} // 133 + , {doNOP, 45 /* - */, 137,0, TRUE} // 134 + , {doNOP, 38 /* & */, 139,0, TRUE} // 135 + , {doSetLiteral, 255, 141,0, TRUE} // 136 , {doRuleError, 45 /* - */, 206,0, FALSE} // 137 set-start-dash - , {doSetAddDash, 255, 141,0, FALSE} // 138 + , {doSetAddDash, 255, 141,0, FALSE} // 138 , {doRuleError, 38 /* & */, 206,0, FALSE} // 139 set-start-amp - , {doSetAddAmp, 255, 141,0, FALSE} // 140 + , {doSetAddAmp, 255, 141,0, FALSE} // 140 , {doSetEnd, 93 /* ] */, 255,0, TRUE} // 141 set-after-lit - , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 142 - , {doNOP, 45 /* - */, 178,0, TRUE} // 143 - , {doNOP, 38 /* & */, 169,0, TRUE} // 144 - , {doNOP, 92 /* \ */, 191,0, TRUE} // 145 - , {doSetNoCloseError, 253, 206,0, FALSE} // 146 - , {doSetLiteral, 255, 141,0, TRUE} // 147 + , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 142 + , {doNOP, 45 /* - */, 178,0, TRUE} // 143 + , {doNOP, 38 /* & */, 169,0, TRUE} // 144 + , {doNOP, 92 /* \ */, 191,0, TRUE} // 145 + , {doSetNoCloseError, 253, 206,0, FALSE} // 146 + , {doSetLiteral, 255, 141,0, TRUE} // 147 , {doSetEnd, 93 /* ] */, 255,0, TRUE} // 148 set-after-set - , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 149 - , {doNOP, 45 /* - */, 171,0, TRUE} // 150 - , {doNOP, 38 /* & */, 166,0, TRUE} // 151 - , {doNOP, 92 /* \ */, 191,0, TRUE} // 152 - , {doSetNoCloseError, 253, 206,0, FALSE} // 153 - , {doSetLiteral, 255, 141,0, TRUE} // 154 + , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 149 + , {doNOP, 45 /* - */, 171,0, TRUE} // 150 + , {doNOP, 38 /* & */, 166,0, TRUE} // 151 + , {doNOP, 92 /* \ */, 191,0, TRUE} // 152 + , {doSetNoCloseError, 253, 206,0, FALSE} // 153 + , {doSetLiteral, 255, 141,0, TRUE} // 154 , {doSetEnd, 93 /* ] */, 255,0, TRUE} // 155 set-after-range - , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 156 - , {doNOP, 45 /* - */, 174,0, TRUE} // 157 - , {doNOP, 38 /* & */, 176,0, TRUE} // 158 - , {doNOP, 92 /* \ */, 191,0, TRUE} // 159 - , {doSetNoCloseError, 253, 206,0, FALSE} // 160 - , {doSetLiteral, 255, 141,0, TRUE} // 161 + , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 156 + , {doNOP, 45 /* - */, 174,0, TRUE} // 157 + , {doNOP, 38 /* & */, 176,0, TRUE} // 158 + , {doNOP, 92 /* \ */, 191,0, TRUE} // 159 + , {doSetNoCloseError, 253, 206,0, FALSE} // 160 + , {doSetLiteral, 255, 141,0, TRUE} // 161 , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE} // 162 set-after-op - , {doSetOpError, 93 /* ] */, 206,0, FALSE} // 163 - , {doNOP, 92 /* \ */, 191,0, TRUE} // 164 - , {doSetLiteral, 255, 141,0, TRUE} // 165 + , {doSetOpError, 93 /* ] */, 206,0, FALSE} // 163 + , {doNOP, 92 /* \ */, 191,0, TRUE} // 164 + , {doSetLiteral, 255, 141,0, TRUE} // 165 , {doSetBeginIntersection1, 91 /* [ */, 123, 148, TRUE} // 166 set-set-amp - , {doSetIntersection2, 38 /* & */, 162,0, TRUE} // 167 - , {doSetAddAmp, 255, 141,0, FALSE} // 168 + , {doSetIntersection2, 38 /* & */, 162,0, TRUE} // 167 + , {doSetAddAmp, 255, 141,0, FALSE} // 168 , {doSetIntersection2, 38 /* & */, 162,0, TRUE} // 169 set-lit-amp - , {doSetAddAmp, 255, 141,0, FALSE} // 170 + , {doSetAddAmp, 255, 141,0, FALSE} // 170 , {doSetBeginDifference1, 91 /* [ */, 123, 148, TRUE} // 171 set-set-dash - , {doSetDifference2, 45 /* - */, 162,0, TRUE} // 172 - , {doSetAddDash, 255, 141,0, FALSE} // 173 + , {doSetDifference2, 45 /* - */, 162,0, TRUE} // 172 + , {doSetAddDash, 255, 141,0, FALSE} // 173 , {doSetDifference2, 45 /* - */, 162,0, TRUE} // 174 set-range-dash - , {doSetAddDash, 255, 141,0, FALSE} // 175 + , {doSetAddDash, 255, 141,0, FALSE} // 175 , {doSetIntersection2, 38 /* & */, 162,0, TRUE} // 176 set-range-amp - , {doSetAddAmp, 255, 141,0, FALSE} // 177 + , {doSetAddAmp, 255, 141,0, FALSE} // 177 , {doSetDifference2, 45 /* - */, 162,0, TRUE} // 178 set-lit-dash - , {doSetAddDash, 91 /* [ */, 141,0, FALSE} // 179 - , {doSetAddDash, 93 /* ] */, 141,0, FALSE} // 180 - , {doNOP, 92 /* \ */, 183,0, TRUE} // 181 - , {doSetRange, 255, 155,0, TRUE} // 182 + , {doSetAddDash, 91 /* [ */, 141,0, FALSE} // 179 + , {doSetAddDash, 93 /* ] */, 141,0, FALSE} // 180 + , {doNOP, 92 /* \ */, 183,0, TRUE} // 181 + , {doSetRange, 255, 155,0, TRUE} // 182 , {doSetOpError, 115 /* s */, 206,0, FALSE} // 183 set-lit-dash-escape - , {doSetOpError, 83 /* S */, 206,0, FALSE} // 184 - , {doSetOpError, 119 /* w */, 206,0, FALSE} // 185 - , {doSetOpError, 87 /* W */, 206,0, FALSE} // 186 - , {doSetOpError, 100 /* d */, 206,0, FALSE} // 187 - , {doSetOpError, 68 /* D */, 206,0, FALSE} // 188 - , {doSetNamedRange, 78 /* N */, 155,0, FALSE} // 189 - , {doSetRange, 255, 155,0, TRUE} // 190 + , {doSetOpError, 83 /* S */, 206,0, FALSE} // 184 + , {doSetOpError, 119 /* w */, 206,0, FALSE} // 185 + , {doSetOpError, 87 /* W */, 206,0, FALSE} // 186 + , {doSetOpError, 100 /* d */, 206,0, FALSE} // 187 + , {doSetOpError, 68 /* D */, 206,0, FALSE} // 188 + , {doSetNamedRange, 78 /* N */, 155,0, FALSE} // 189 + , {doSetRange, 255, 155,0, TRUE} // 190 , {doSetProp, 112 /* p */, 148,0, FALSE} // 191 set-escape - , {doSetProp, 80 /* P */, 148,0, FALSE} // 192 - , {doSetNamedChar, 78 /* N */, 141,0, FALSE} // 193 - , {doSetBackslash_s, 115 /* s */, 155,0, TRUE} // 194 - , {doSetBackslash_S, 83 /* S */, 155,0, TRUE} // 195 - , {doSetBackslash_w, 119 /* w */, 155,0, TRUE} // 196 - , {doSetBackslash_W, 87 /* W */, 155,0, TRUE} // 197 - , {doSetBackslash_d, 100 /* d */, 155,0, TRUE} // 198 - , {doSetBackslash_D, 68 /* D */, 155,0, TRUE} // 199 - , {doSetBackslash_h, 104 /* h */, 155,0, TRUE} // 200 - , {doSetBackslash_H, 72 /* H */, 155,0, TRUE} // 201 - , {doSetBackslash_v, 118 /* v */, 155,0, TRUE} // 202 - , {doSetBackslash_V, 86 /* V */, 155,0, TRUE} // 203 - , {doSetLiteralEscaped, 255, 141,0, TRUE} // 204 + , {doSetProp, 80 /* P */, 148,0, FALSE} // 192 + , {doSetNamedChar, 78 /* N */, 141,0, FALSE} // 193 + , {doSetBackslash_s, 115 /* s */, 155,0, TRUE} // 194 + , {doSetBackslash_S, 83 /* S */, 155,0, TRUE} // 195 + , {doSetBackslash_w, 119 /* w */, 155,0, TRUE} // 196 + , {doSetBackslash_W, 87 /* W */, 155,0, TRUE} // 197 + , {doSetBackslash_d, 100 /* d */, 155,0, TRUE} // 198 + , {doSetBackslash_D, 68 /* D */, 155,0, TRUE} // 199 + , {doSetBackslash_h, 104 /* h */, 155,0, TRUE} // 200 + , {doSetBackslash_H, 72 /* H */, 155,0, TRUE} // 201 + , {doSetBackslash_v, 118 /* v */, 155,0, TRUE} // 202 + , {doSetBackslash_V, 86 /* V */, 155,0, TRUE} // 203 + , {doSetLiteralEscaped, 255, 141,0, TRUE} // 204 , {doSetFinish, 255, 14,0, FALSE} // 205 set-finish , {doExit, 255, 206,0, TRUE} // 206 errorDeath }; diff --git a/deps/icu-small/source/i18n/regexcst.pl b/deps/icu-small/source/i18n/regexcst.pl old mode 100644 new mode 100755 index c15d2868b28530..384281ffbad9fe --- a/deps/icu-small/source/i18n/regexcst.pl +++ b/deps/icu-small/source/i18n/regexcst.pl @@ -1,4 +1,6 @@ #!/usr/bin/perl +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # ******************************************************************** # * COPYRIGHT: # * Copyright (c) 2002-2016, International Business Machines Corporation and @@ -325,3 +327,6 @@ print "U_NAMESPACE_END\n"; print "#endif\n"; + + + diff --git a/deps/icu-small/source/i18n/regeximp.cpp b/deps/icu-small/source/i18n/regeximp.cpp index d923deb9e835e1..6c476e733c0ab7 100644 --- a/deps/icu-small/source/i18n/regeximp.cpp +++ b/deps/icu-small/source/i18n/regeximp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 2012 International Business Machines Corporation // and others. All rights reserved. @@ -54,7 +56,7 @@ UChar32 CaseFoldingUTextIterator::next() { } return foldedC; } - + UBool CaseFoldingUTextIterator::inExpansion() { return fFoldChars != NULL; @@ -103,7 +105,7 @@ UChar32 CaseFoldingUCharIterator::next() { } return foldedC; } - + UBool CaseFoldingUCharIterator::inExpansion() { return fFoldChars != NULL; @@ -117,3 +119,4 @@ int64_t CaseFoldingUCharIterator::getIndex() { U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/regeximp.h b/deps/icu-small/source/i18n/regeximp.h index c6c3b0d6ca312b..b2fcc3ff6fff5f 100644 --- a/deps/icu-small/source/i18n/regeximp.h +++ b/deps/icu-small/source/i18n/regeximp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 2002-2015 International Business Machines Corporation // and others. All rights reserved. @@ -24,7 +26,7 @@ U_NAMESPACE_BEGIN // For debugging, define REGEX_DEBUG // To define with configure, -// CPPFLAGS="-DREGEX_DEBUG" ./runConfigureICU --enable-debug --disable-release Linux +// CPPFLAGS="-DREGEX_DEBUG" ./runConfigureICU --enable-debug --disable-release Linux #ifdef REGEX_DEBUG // @@ -241,7 +243,7 @@ enum { "DOLLAR_MD", \ "URX_BACKSLASH_H", \ "URX_BACKSLASH_R", \ - "URX_BACKSLASH_V" + "URX_BACKSLASH_V" // @@ -411,3 +413,4 @@ class CaseFoldingUCharIterator: public UMemory { U_NAMESPACE_END #endif + diff --git a/deps/icu-small/source/i18n/regexst.cpp b/deps/icu-small/source/i18n/regexst.cpp index 1ef879e39913e9..d62c529d5fdcaf 100644 --- a/deps/icu-small/source/i18n/regexst.cpp +++ b/deps/icu-small/source/i18n/regexst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // regexst.h // @@ -162,10 +164,10 @@ fEmptyText(NULL) fPropSets[URX_GC_T] = new UnicodeSet(UnicodeString(TRUE, gGC_TPattern, -1), *status); fPropSets[URX_GC_LV] = new UnicodeSet(UnicodeString(TRUE, gGC_LVPattern, -1), *status); fPropSets[URX_GC_LVT] = new UnicodeSet(UnicodeString(TRUE, gGC_LVTPattern, -1), *status); - + // Check for null pointers - if (fPropSets[URX_ISWORD_SET] == NULL || fPropSets[URX_ISSPACE_SET] == NULL || fPropSets[URX_GC_EXTEND] == NULL || - fPropSets[URX_GC_CONTROL] == NULL || fPropSets[URX_GC_L] == NULL || fPropSets[URX_GC_V] == NULL || + if (fPropSets[URX_ISWORD_SET] == NULL || fPropSets[URX_ISSPACE_SET] == NULL || fPropSets[URX_GC_EXTEND] == NULL || + fPropSets[URX_GC_CONTROL] == NULL || fPropSets[URX_GC_L] == NULL || fPropSets[URX_GC_V] == NULL || fPropSets[URX_GC_T] == NULL || fPropSets[URX_GC_LV] == NULL || fPropSets[URX_GC_LVT] == NULL) { goto ExitConstrDeleteAll; } @@ -189,7 +191,7 @@ fEmptyText(NULL) fPropSets[URX_GC_NORMAL] = new UnicodeSet(0, UnicodeSet::MAX_VALUE); // Null pointer check if (fPropSets[URX_GC_NORMAL] == NULL) { - goto ExitConstrDeleteAll; + goto ExitConstrDeleteAll; } fPropSets[URX_GC_NORMAL]->remove(0xac00, 0xd7a4); fPropSets[URX_GC_NORMAL]->removeAll(*fPropSets[URX_GC_CONTROL]); @@ -215,10 +217,10 @@ fEmptyText(NULL) for (i=0; i 0 ) { @@ -140,7 +141,7 @@ void Region::loadRegionData(UErrorCode &status) { while ( ures_hasNext(regionMacro.getAlias()) ) { UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),NULL,&status); - int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER_STRING); + int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER); UChar buf[6]; regionName.extract(buf,6,status); if ( rangeMarkerLocation > 0 ) { @@ -212,7 +213,7 @@ void Region::loadRegionData(UErrorCode &status) { uhash_put(newRegionAliases.getAlias(),(void *)aliasFromStr.orphan(), (void *)aliasToRegion,&status); } else { if ( aliasFromRegion == NULL ) { // Deprecated region code not in the master codes list - so need to create a deprecated region for it. - LocalPointer newRgn(new Region, status); + LocalPointer newRgn(new Region, status); if ( U_SUCCESS(status) ) { aliasFromRegion = newRgn.orphan(); } else { @@ -376,7 +377,7 @@ void Region::loadRegionData(UErrorCode &status) { } availableRegions[ar->type]->addElement((void *)arString.orphan(),status); } - + ucln_i18n_registerCleanup(UCLN_I18N_REGION, region_cleanup); // copy hashtables numericCodeMap = newNumericCodeMap.orphan(); diff --git a/deps/icu-small/source/i18n/region_impl.h b/deps/icu-small/source/i18n/region_impl.h index 2bd97f61052e2b..817dd055c4387a 100644 --- a/deps/icu-small/source/i18n/region_impl.h +++ b/deps/icu-small/source/i18n/region_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013, International Business Machines Corporation and * @@ -15,7 +17,7 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING - + #include "uvector.h" #include "unicode/strenum.h" diff --git a/deps/icu-small/source/i18n/reldatefmt.cpp b/deps/icu-small/source/i18n/reldatefmt.cpp index 29f760e0e8dd19..dd4894e95e2e4b 100644 --- a/deps/icu-small/source/i18n/reldatefmt.cpp +++ b/deps/icu-small/source/i18n/reldatefmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines Corporation and @@ -178,14 +180,11 @@ namespace { /** * Sink for enumerating all of the measurement unit display names. - * Contains inner sink classes, each one corresponding to a level of the resource table. * * More specific bundles (en_GB) are enumerated before their parents (en_001, en, root): * Only store a value if it is still missing, that is, it has not been overridden. - * - * C++: Each inner sink class has a reference to the main outer sink. */ -struct RelDateTimeFmtDataSink : public ResourceTableSink { +struct RelDateTimeFmtDataSink : public ResourceSink { /** * Sink for patterns for relative dates and times. For example, @@ -291,188 +290,16 @@ struct RelDateTimeFmtDataSink : public ResourceTableSink { return -1; } - // Sinks for additional levels under /fields/*/relative/ and /fields/*/relativeTime/ - - /** - * Make list of simplePatternFmtList, for past and for future. - * Set a SimpleFormatter for the - * - * Fill in values for the particular plural given, e.g., ONE, FEW, OTHER, etc. - */ - struct RelDateTimeDetailSink : public ResourceTableSink { - RelDateTimeDetailSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelDateTimeDetailSink(); - - virtual void put(const char *key, const ResourceValue &value, - UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - outer.relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (outer.relUnitIndex < 0) { - return; - } - - /* Make two lists of simplePatternFmtList, one for past and one for future. - * Set a SimpleFormatter pattern for the - * - * Fill in values for the particular plural given, e.g., ONE, FEW, OTHER, etc. - */ - int32_t pluralIndex = StandardPlural::indexOrNegativeFromString(key); - if (pluralIndex >= 0) { - SimpleFormatter **patterns = - outer.outputData.relativeUnitsFormatters[outer.style][outer.relUnitIndex] - [outer.pastFutureIndex]; - // Only set if not already established. - if (patterns[pluralIndex] == NULL) { - patterns[pluralIndex] = new SimpleFormatter( - value.getUnicodeString(errorCode), 0, 1, errorCode); - if (patterns[pluralIndex] == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - } - } - } - } - - RelDateTimeFmtDataSink &outer; - } relDateTimeDetailSink; - - /* - * Handles "relativeTime" entries, e.g., under "day", "hour", "minute", - * "minute-short", etc. - */ - struct RelativeTimeSink : public ResourceTableSink { - RelativeTimeSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelativeTimeSink(); - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode& errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (outer.relUnitIndex < 0) { - return NULL; - } - - if (uprv_strcmp(key, "past") == 0) { - outer.pastFutureIndex = 0; - } else if (uprv_strcmp(key, "future") == 0) { - outer.pastFutureIndex = 1; - } else { - // Unknown key. - return NULL; - } - return &outer.relDateTimeDetailSink; - } - - RelDateTimeFmtDataSink &outer; - } relativeTimeSink; - - /* - * Handles "relative" entries, e.g., under "day", "day-short", "fri", - * "fri-narrow", "fri-short", etc. - */ - struct RelativeSink : public ResourceTableSink { - RelativeSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelativeSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - int32_t direction = keyToDirection(key); - if (direction < 0) { - return; - } - - int32_t relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (relUnitIndex == UDAT_RELATIVE_SECONDS && - direction == UDAT_DIRECTION_THIS && - outer.outputData.absoluteUnits[outer.style][UDAT_ABSOLUTE_NOW] - [UDAT_DIRECTION_PLAIN].isEmpty()) { - // Handle "NOW" - outer.outputData.absoluteUnits[outer.style][UDAT_ABSOLUTE_NOW] - [UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); - } - - int32_t absUnitIndex = absUnitFromGeneric(outer.genericUnit); - if (absUnitIndex < 0) { - return; - } - // Only reset if slot is empty. - if (outer.outputData.absoluteUnits[outer.style][absUnitIndex][direction].isEmpty()) { - outer.outputData.absoluteUnits[outer.style][absUnitIndex] - [direction].fastCopyFrom(value.getUnicodeString(errorCode)); - } - } - - RelDateTimeFmtDataSink &outer; - } relativeSink; - - /* - * Handles entries under "fields", recognizing "relative" and "relativeTime" entries. - */ - struct UnitSink : public ResourceTableSink { - UnitSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~UnitSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - if (uprv_strcmp(key, "dn") != 0) { - return; - } - - // Handle Display Name for PLAIN direction for some units. - int32_t absUnit = absUnitFromGeneric(outer.genericUnit); - if (absUnit < 0) { - return; // Not interesting. - } - - // TODO(Travis Keep): This is a hack to get around CLDR bug 6818. - UnicodeString displayName = value.getUnicodeString(errorCode); - if (U_SUCCESS(errorCode)) { - if (uprv_strcmp("en", outer.sinkLocaleId) == 0) { - displayName.toLower(); - } - } - // end hack - - // Store displayname if not set. - if (outer.outputData.absoluteUnits[outer.style] - [absUnit][UDAT_DIRECTION_PLAIN].isEmpty()) { - outer.outputData.absoluteUnits[outer.style] - [absUnit][UDAT_DIRECTION_PLAIN].fastCopyFrom(displayName); - return; - } - } - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - if (uprv_strcmp(key, "relative") == 0) { - return &outer.relativeSink; - } else if (uprv_strcmp(key, "relativeTime") == 0) { - return &outer.relativeTimeSink; - } - return NULL; - } - - RelDateTimeFmtDataSink &outer; - } unitSink; - - // For hack for locale "en". - // TODO(Travis Keep): This is a hack to get around CLDR bug 6818. - const char* sinkLocaleId; - // Values kept between levels of parsing the CLDR data. int32_t pastFutureIndex; // 0 == past or 1 == future UDateRelativeDateTimeFormatterStyle style; // {LONG, SHORT, NARROW} RelAbsUnit genericUnit; - int32_t relUnitIndex; - int32_t absUnitIndex; RelativeDateTimeCacheData &outputData; // Constructor - RelDateTimeFmtDataSink(RelativeDateTimeCacheData& cacheData, const char* localeId) - : relDateTimeDetailSink(*this), relativeTimeSink(*this), relativeSink(*this), - unitSink(*this), sinkLocaleId(localeId), outputData(cacheData) { + RelDateTimeFmtDataSink(RelativeDateTimeCacheData& cacheData) + : outputData(cacheData) { // Clear cacheData.fallBackCache cacheData.fallBackCache[UDAT_STYLE_LONG] = -1; cacheData.fallBackCache[UDAT_STYLE_SHORT] = -1; @@ -571,55 +398,165 @@ struct RelDateTimeFmtDataSink : public ResourceTableSink { return INVALID_UNIT; } - // Member functions of top level sink. - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - // Only handle aliases, storing information about alias fallback. + void handlePlainDirection(ResourceValue &value, UErrorCode &errorCode) { + // Handle Display Name for PLAIN direction for some units. + if (U_FAILURE(errorCode)) { return; } + + int32_t absUnit = absUnitFromGeneric(genericUnit); + if (absUnit < 0) { + return; // Not interesting. + } + + // Store displayname if not set. + if (outputData.absoluteUnits[style] + [absUnit][UDAT_DIRECTION_PLAIN].isEmpty()) { + outputData.absoluteUnits[style] + [absUnit][UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); + return; + } + } + + void consumeTableRelative(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_STRING) { + int32_t direction = keyToDirection(key); + if (direction < 0) { + continue; + } - if (U_SUCCESS(errorCode)) { - if (value.getType() != URES_ALIAS) { - return; + int32_t relUnitIndex = relUnitFromGeneric(genericUnit); + if (relUnitIndex == UDAT_RELATIVE_SECONDS && uprv_strcmp(key, "0") == 0 && + outputData.absoluteUnits[style][UDAT_ABSOLUTE_NOW][UDAT_DIRECTION_PLAIN].isEmpty()) { + // Handle "NOW" + outputData.absoluteUnits[style][UDAT_ABSOLUTE_NOW] + [UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); + } + + int32_t absUnitIndex = absUnitFromGeneric(genericUnit); + if (absUnitIndex < 0) { + continue; + } + // Only reset if slot is empty. + if (outputData.absoluteUnits[style][absUnitIndex][direction].isEmpty()) { + outputData.absoluteUnits[style][absUnitIndex] + [direction].fastCopyFrom(value.getUnicodeString(errorCode)); + } } - const UnicodeString valueStr = value.getAliasUnicodeString(errorCode); - if (U_SUCCESS(errorCode)) { - UDateRelativeDateTimeFormatterStyle sourceStyle= styleFromString(key); - UDateRelativeDateTimeFormatterStyle targetStyle = - styleFromAliasUnicodeString(valueStr); - - if (sourceStyle == targetStyle) { - errorCode = U_INVALID_FORMAT_ERROR; - return; + } + } + + void consumeTimeDetail(int32_t relUnitIndex, + const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_STRING) { + int32_t pluralIndex = StandardPlural::indexOrNegativeFromString(key); + if (pluralIndex >= 0) { + SimpleFormatter **patterns = + outputData.relativeUnitsFormatters[style][relUnitIndex] + [pastFutureIndex]; + // Only set if not already established. + if (patterns[pluralIndex] == NULL) { + patterns[pluralIndex] = new SimpleFormatter( + value.getUnicodeString(errorCode), 0, 1, errorCode); + if (patterns[pluralIndex] == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + } + } } - if (outputData.fallBackCache[sourceStyle] != -1 && - outputData.fallBackCache[sourceStyle] != targetStyle) { - errorCode = U_INVALID_FORMAT_ERROR; - return; + } + } + } + + void consumeTableRelativeTime(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable relativeTimeTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + int32_t relUnitIndex = relUnitFromGeneric(genericUnit); + if (relUnitIndex < 0) { + return; + } + for (int32_t i = 0; relativeTimeTable.getKeyAndValue(i, key, value); ++i) { + if (uprv_strcmp(key, "past") == 0) { + pastFutureIndex = 0; + } else if (uprv_strcmp(key, "future") == 0) { + pastFutureIndex = 1; + } else { + // Unknown key. + continue; + } + consumeTimeDetail(relUnitIndex, key, value, errorCode); + } + } + + void consumeAlias(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + + UDateRelativeDateTimeFormatterStyle sourceStyle = styleFromString(key); + const UnicodeString valueStr = value.getAliasUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { return; } + + UDateRelativeDateTimeFormatterStyle targetStyle = + styleFromAliasUnicodeString(valueStr); + + if (sourceStyle == targetStyle) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + if (outputData.fallBackCache[sourceStyle] != -1 && + outputData.fallBackCache[sourceStyle] != targetStyle) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + outputData.fallBackCache[sourceStyle] = targetStyle; + } + + void consumeTimeUnit(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + // Handle display name. + if (uprv_strcmp(key, "dn") == 0 && value.getType() == URES_STRING) { + handlePlainDirection(value, errorCode); + } + if (value.getType() == URES_TABLE) { + if (uprv_strcmp(key, "relative") == 0) { + consumeTableRelative(key, value, errorCode); + } else if (uprv_strcmp(key, "relativeTime") == 0) { + consumeTableRelativeTime(key, value, errorCode); } - outputData.fallBackCache[sourceStyle] = targetStyle; } } - return; } - // Top level sink - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode& /* errorCode */) { - style= styleFromString(key); - int32_t unitSize = uprv_strlen(key) - styleSuffixLength(style); - genericUnit = unitOrNegativeFromString(key, unitSize); - if (style < 0 || genericUnit == INVALID_UNIT) { - return NULL; - } - return &unitSink; + virtual void put(const char *key, ResourceValue &value, + UBool /*noFallback*/, UErrorCode &errorCode) { + // Main entry point to sink + ResourceTable table = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; table.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_ALIAS) { + consumeAlias(key, value, errorCode); + } else { + style = styleFromString(key); + int32_t unitSize = uprv_strlen(key) - styleSuffixLength(style); + genericUnit = unitOrNegativeFromString(key, unitSize); + if (style >= 0 && genericUnit != INVALID_UNIT) { + consumeTimeUnit(key, value, errorCode); + } + } + } } + }; // Virtual destructors must be defined out of line. -RelDateTimeFmtDataSink::RelDateTimeDetailSink::~RelDateTimeDetailSink() {} -RelDateTimeFmtDataSink::RelativeTimeSink::~RelativeTimeSink() {} -RelDateTimeFmtDataSink::RelativeSink::~RelativeSink() {} -RelDateTimeFmtDataSink::UnitSink::~UnitSink() {} RelDateTimeFmtDataSink::~RelDateTimeFmtDataSink() {} - } // namespace DateFormatSymbols::DtWidthType styleToDateFormatSymbolWidth[UDAT_STYLE_COUNT] = { @@ -652,8 +589,10 @@ static UBool loadUnitData( RelativeDateTimeCacheData &cacheData, const char* localeId, UErrorCode &status) { - RelDateTimeFmtDataSink sink(cacheData, localeId); - ures_getAllTableItemsWithFallback(resource, "fields", sink, status); + + RelDateTimeFmtDataSink sink(cacheData); + + ures_getAllItemsWithFallback(resource, "fields", sink, status); // Get the weekday names from DateFormatSymbols. loadWeekdayNames(cacheData.absoluteUnits, localeId, status); @@ -962,7 +901,7 @@ UnicodeString& RelativeDateTimeFormatter::format( case 100/* 1*/: direction = UDAT_DIRECTION_NEXT; break; case 200/* 2*/: direction = UDAT_DIRECTION_NEXT_2; break; default: break; - } + } } UDateAbsoluteUnit absunit = UDAT_ABSOLUTE_UNIT_COUNT; switch (unit) { diff --git a/deps/icu-small/source/i18n/reldtfmt.cpp b/deps/icu-small/source/i18n/reldtfmt.cpp index 7055e724bbe7e5..00cafc84e4cd05 100644 --- a/deps/icu-small/source/i18n/reldtfmt.cpp +++ b/deps/icu-small/source/i18n/reldtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -11,15 +13,15 @@ #include -#include "reldtfmt.h" #include "unicode/datefmt.h" +#include "unicode/reldatefmt.h" #include "unicode/simpleformatter.h" #include "unicode/smpdtfmt.h" #include "unicode/udisplaycontext.h" #include "unicode/uchar.h" #include "unicode/brkiter.h" -#include "gregoimp.h" // for CalendarData +#include "reldtfmt.h" #include "cmemory.h" #include "uresimp.h" @@ -35,16 +37,12 @@ struct URelativeString { const UChar* string; /** string, or NULL if not set **/ }; -static const char DT_DateTimePatternsTag[]="DateTimePatterns"; - - UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RelativeDateFormat) RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : DateFormat(other), fDateTimeFormatter(NULL), fDatePattern(other.fDatePattern), fTimePattern(other.fTimePattern), fCombinedFormat(NULL), fDateStyle(other.fDateStyle), fLocale(other.fLocale), - fDayMin(other.fDayMin), fDayMax(other.fDayMax), fDatesLen(other.fDatesLen), fDates(NULL), fCombinedHasDateAtStart(other.fCombinedHasDateAtStart), fCapitalizationInfoSet(other.fCapitalizationInfoSet), @@ -59,8 +57,8 @@ RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : fCombinedFormat = new SimpleFormatter(*other.fCombinedFormat); } if (fDatesLen > 0) { - fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); - uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*fDatesLen); + fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*(size_t)fDatesLen); + uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*(size_t)fDatesLen); } #if !UCONFIG_NO_BREAK_ITERATION if (other.fCapitalizationBrkIter != NULL) { @@ -72,7 +70,7 @@ RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const Locale& locale, UErrorCode& status) : DateFormat(), fDateTimeFormatter(NULL), fDatePattern(), fTimePattern(), fCombinedFormat(NULL), - fDateStyle(dateStyle), fLocale(locale), fDayMin(0), fDayMax(0), fDatesLen(0), fDates(NULL), + fDateStyle(dateStyle), fLocale(locale), fDatesLen(0), fDates(NULL), fCombinedHasDateAtStart(FALSE), fCapitalizationInfoSet(FALSE), fCapitalizationOfRelativeUnitsForUIListMenu(FALSE), fCapitalizationOfRelativeUnitsForStandAlone(FALSE), fCapitalizationBrkIter(NULL) @@ -112,6 +110,7 @@ RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatS fDateTimeFormatter=dynamic_cast(df); if (fDateTimeFormatter == NULL) { status = U_UNSUPPORTED_ERROR; + delete df; return; } fDateTimeFormatter->toPattern(fTimePattern); @@ -155,11 +154,11 @@ static const UChar APOSTROPHE = (UChar)0x0027; UnicodeString& RelativeDateFormat::format( Calendar& cal, UnicodeString& appendTo, FieldPosition& pos) const { - + UErrorCode status = U_ZERO_ERROR; UnicodeString relativeDayString; UDisplayContext capitalizationContext = getContext(UDISPCTX_TYPE_CAPITALIZATION, status); - + // calculate the difference, in days, between 'cal' and now. int dayDiff = dayDifference(cal, status); @@ -171,7 +170,7 @@ UnicodeString& RelativeDateFormat::format( Calendar& cal, relativeDayString.setTo(theString, len); } - if ( relativeDayString.length() > 0 && !fDatePattern.isEmpty() && + if ( relativeDayString.length() > 0 && !fDatePattern.isEmpty() && (fTimePattern.isEmpty() || fCombinedFormat == NULL || fCombinedHasDateAtStart)) { #if !UCONFIG_NO_BREAK_ITERATION // capitalize relativeDayString according to context for relative, set formatter no context @@ -222,8 +221,8 @@ UnicodeString& RelativeDateFormat::format( Calendar& cal, UnicodeString& -RelativeDateFormat::format(const Formattable& obj, - UnicodeString& appendTo, +RelativeDateFormat::format(const Formattable& obj, + UnicodeString& appendTo, FieldPosition& pos, UErrorCode& status) const { @@ -259,7 +258,7 @@ void RelativeDateFormat::parse( const UnicodeString& text, cal.setTime(Calendar::getNow(),status); cal.add(UCAL_DATE,fDates[n].offset, status); - if(U_FAILURE(status)) { + if(U_FAILURE(status)) { // failure in setting calendar field, set offset to beginning of rel day string pos.setErrorIndex(startIndex); } else { @@ -290,7 +289,7 @@ void RelativeDateFormat::parse( const UnicodeString& text, // Set the calendar to now+offset tempCal->setTime(Calendar::getNow(),status); tempCal->add(UCAL_DATE,fDates[n].offset, status); - if(U_FAILURE(status)) { + if(U_FAILURE(status)) { pos.setErrorIndex(startIndex); delete tempCal; return; @@ -353,19 +352,14 @@ const UChar *RelativeDateFormat::getStringForDay(int32_t day, int32_t &len, UErr return NULL; } - // Is it outside the resource bundle's range? - if(day < fDayMin || day > fDayMax) { - return NULL; // don't have it. - } - - // Linear search the held strings - for(int n=0;n= 0 && n < fDatesLen) { + if (fDates[n].offset == day && fDates[n].string != NULL) { len = fDates[n].len; return fDates[n].string; } } - return NULL; // not found. } @@ -453,125 +447,114 @@ RelativeDateFormat::initCapitalizationContextInfo(const Locale& thelocale) #if !UCONFIG_NO_BREAK_ITERATION const char * localeID = (thelocale != NULL)? thelocale.getBaseName(): NULL; UErrorCode status = U_ZERO_ERROR; - UResourceBundle *rb = ures_open(NULL, localeID, &status); - rb = ures_getByKeyWithFallback(rb, "contextTransforms", rb, &status); - rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); + LocalUResourceBundlePointer rb(ures_open(NULL, localeID, &status)); + ures_getByKeyWithFallback(rb.getAlias(), + "contextTransforms/relative", + rb.getAlias(), &status); if (U_SUCCESS(status) && rb != NULL) { int32_t len = 0; - const int32_t * intVector = ures_getIntVector(rb, &len, &status); + const int32_t * intVector = ures_getIntVector(rb.getAlias(), + &len, &status); if (U_SUCCESS(status) && intVector != NULL && len >= 2) { fCapitalizationOfRelativeUnitsForUIListMenu = intVector[0]; fCapitalizationOfRelativeUnitsForStandAlone = intVector[1]; } } - ures_close(rb); #endif } +namespace { + +/** + * Sink for getting data from fields/day/relative data. + * For loading relative day names, e.g., "yesterday", "today". + */ + +struct RelDateFmtDataSink : public ResourceSink { + URelativeString *fDatesPtr; + int32_t fDatesLen; + + RelDateFmtDataSink(URelativeString* fDates, int32_t len) : fDatesPtr(fDates), fDatesLen(len) { + for (int32_t i = 0; i < fDatesLen; ++i) { + fDatesPtr[i].offset = 0; + fDatesPtr[i].string = NULL; + fDatesPtr[i].len = -1; + } + } + + virtual ~RelDateFmtDataSink(); + + virtual void put(const char *key, ResourceValue &value, + UBool /*noFallback*/, UErrorCode &errorCode) { + ResourceTable relDayTable = value.getTable(errorCode); + int32_t n = 0; + int32_t len = 0; + for (int32_t i = 0; relDayTable.getKeyAndValue(i, key, value); ++i) { + // Find the relative offset. + int32_t offset = atoi(key); + + // Put in the proper spot, but don't override existing data. + n = offset + UDAT_DIRECTION_THIS; // Converts to index in UDAT_R + if (n < fDatesLen && fDatesPtr[n].string == NULL) { + // Not found and n is an empty slot. + fDatesPtr[n].offset = offset; + fDatesPtr[n].string = value.getString(len, errorCode); + fDatesPtr[n].len = len; + } + } + } +}; + + +// Virtual destructors must be defined out of line. +RelDateFmtDataSink::~RelDateFmtDataSink() {} + +} // Namespace + + static const UChar patItem1[] = {0x7B,0x31,0x7D}; // "{1}" static const int32_t patItem1Len = 3; void RelativeDateFormat::loadDates(UErrorCode &status) { - CalendarData calData(fLocale, "gregorian", status); - - UErrorCode tempStatus = status; - UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag, tempStatus); - if(U_SUCCESS(tempStatus)) { - int32_t patternsSize = ures_getSize(dateTimePatterns); + UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); + LocalUResourceBundlePointer dateTimePatterns( + ures_getByKeyWithFallback(rb, + "calendar/gregorian/DateTimePatterns", + (UResourceBundle*)NULL, &status)); + if(U_SUCCESS(status)) { + int32_t patternsSize = ures_getSize(dateTimePatterns.getAlias()); if (patternsSize > kDateTime) { int32_t resStrLen = 0; - int32_t glueIndex = kDateTime; - if (patternsSize >= (DateFormat::kDateTimeOffset + DateFormat::kShort + 1)) { - // Get proper date time format - switch (fDateStyle) { - case kFullRelative: - case kFull: - glueIndex = kDateTimeOffset + kFull; - break; - case kLongRelative: - case kLong: - glueIndex = kDateTimeOffset + kLong; - break; - case kMediumRelative: - case kMedium: - glueIndex = kDateTimeOffset + kMedium; - break; - case kShortRelative: - case kShort: - glueIndex = kDateTimeOffset + kShort; - break; - default: - break; + if (patternsSize >= (kDateTimeOffset + kShort + 1)) { + int32_t offsetIncrement = (fDateStyle & ~kRelative); // Remove relative bit. + if (offsetIncrement >= (int32_t)kFull && + offsetIncrement <= (int32_t)kShortRelative) { + glueIndex = kDateTimeOffset + offsetIncrement; } } - const UChar *resStr = ures_getStringByIndex(dateTimePatterns, glueIndex, &resStrLen, &tempStatus); - if (U_SUCCESS(tempStatus) && resStrLen >= patItem1Len && u_strncmp(resStr,patItem1,patItem1Len)==0) { + const UChar *resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), glueIndex, &resStrLen, &status); + if (U_SUCCESS(status) && resStrLen >= patItem1Len && u_strncmp(resStr,patItem1,patItem1Len)==0) { fCombinedHasDateAtStart = TRUE; } - fCombinedFormat = new SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, tempStatus); + fCombinedFormat = new SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, status); } } - UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); - rb = ures_getByKeyWithFallback(rb, "fields", rb, &status); - rb = ures_getByKeyWithFallback(rb, "day", rb, &status); - rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); - // set up min/max - fDayMin=-1; - fDayMax=1; - - if(U_FAILURE(status)) { - fDatesLen=0; - ures_close(rb); - return; - } - - fDatesLen = ures_getSize(rb); + // Data loading for relative names, e.g., "yesterday", "today", "tomorrow". + fDatesLen = UDAT_DIRECTION_COUNT; // Maximum defined by data. fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); - // Load in each item into the array... - int n = 0; - - UResourceBundle *subString = NULL; - - while(ures_hasNext(rb) && U_SUCCESS(status)) { // iterate over items - subString = ures_getNextResource(rb, subString, &status); - - if(U_FAILURE(status) || (subString==NULL)) break; - - // key = offset # - const char *key = ures_getKey(subString); - - // load the string and length - int32_t aLen; - const UChar* aString = ures_getString(subString, &aLen, &status); + RelDateFmtDataSink sink(fDates, fDatesLen); + ures_getAllItemsWithFallback(rb, "fields/day/relative", sink, status); - if(U_FAILURE(status) || aString == NULL) break; - - // calculate the offset - int32_t offset = atoi(key); - - // set min/max - if(offset < fDayMin) { - fDayMin = offset; - } - if(offset > fDayMax) { - fDayMax = offset; - } - - // copy the string pointer - fDates[n].offset = offset; - fDates[n].string = aString; - fDates[n].len = aLen; - - n++; - } - ures_close(subString); ures_close(rb); - // the fDates[] array could be sorted here, for direct access. + if(U_FAILURE(status)) { + fDatesLen=0; + return; + } } //---------------------------------------------------------------------- @@ -599,7 +582,7 @@ int32_t RelativeDateFormat::dayDifference(Calendar &cal, UErrorCode &status) { nowCal->setTime(Calendar::getNow(), status); // For the day difference, we are interested in the difference in the (modified) julian day number - // which is midnight to midnight. Using fieldDifference() is NOT correct here, because + // which is midnight to midnight. Using fieldDifference() is NOT correct here, because // 6pm Jan 4th to 10am Jan 5th should be considered "tomorrow". int32_t dayDiff = cal.get(UCAL_JULIAN_DAY, status) - nowCal->get(UCAL_JULIAN_DAY, status); @@ -609,4 +592,4 @@ int32_t RelativeDateFormat::dayDifference(Calendar &cal, UErrorCode &status) { U_NAMESPACE_END -#endif +#endif /* !UCONFIG_NO_FORMATTING */ diff --git a/deps/icu-small/source/i18n/reldtfmt.h b/deps/icu-small/source/i18n/reldtfmt.h index f82855c357f1fc..3a11dfb150debc 100644 --- a/deps/icu-small/source/i18n/reldtfmt.h +++ b/deps/icu-small/source/i18n/reldtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and * @@ -241,7 +243,7 @@ class RelativeDateFormat : public DateFormat { * @param value The UDisplayContext value to set. * @param status Input/output status. If at entry this indicates a failure * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. + * updated with any new status from the function. * @internal ICU 53 */ virtual void setContext(UDisplayContext value, UErrorCode& status); @@ -255,8 +257,6 @@ class RelativeDateFormat : public DateFormat { UDateFormatStyle fDateStyle; Locale fLocale; - int32_t fDayMin; // day id of lowest # - int32_t fDayMax; // day id of highest # int32_t fDatesLen; // Length of array URelativeString *fDates; // array of strings @@ -264,7 +264,11 @@ class RelativeDateFormat : public DateFormat { UBool fCapitalizationInfoSet; UBool fCapitalizationOfRelativeUnitsForUIListMenu; UBool fCapitalizationOfRelativeUnitsForStandAlone; +#if !UCONFIG_NO_BREAK_ITERATION BreakIterator* fCapitalizationBrkIter; +#else + UObject* fCapitalizationBrkIter; +#endif /** * Get the string at a specific offset. @@ -333,4 +337,3 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif // RELDTFMT_H -//eof diff --git a/deps/icu-small/source/i18n/rematch.cpp b/deps/icu-small/source/i18n/rematch.cpp index 348fd45d22ad58..0e795f216c23d5 100644 --- a/deps/icu-small/source/i18n/rematch.cpp +++ b/deps/icu-small/source/i18n/rematch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (C) 2002-2016 International Business Machines Corporation @@ -436,7 +438,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest, status = U_REGEX_INVALID_CAPTURE_GROUP_NAME; } } - + } else if (u_isdigit(nextChar)) { // $n Scan for a capture group number int32_t numCaptureGroups = fPattern->fGroupMap->size(); @@ -457,7 +459,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest, break; } (void)UTEXT_NEXT32(replacement); - groupNum=groupNum*10 + nextDigitVal; + groupNum=groupNum*10 + nextDigitVal; ++numDigits; } } else { @@ -2185,7 +2187,7 @@ int32_t RegexMatcher::split(UText *input, break; } i++; - dest[i] = utext_extract_replace(fInputText, dest[i], + dest[i] = utext_extract_replace(fInputText, dest[i], start64(groupNum, status), end64(groupNum, status), &status); } diff --git a/deps/icu-small/source/i18n/remtrans.cpp b/deps/icu-small/source/i18n/remtrans.cpp index 4ee98f7d3cc10a..89837f991d6f30 100644 --- a/deps/icu-small/source/i18n/remtrans.cpp +++ b/deps/icu-small/source/i18n/remtrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/remtrans.h b/deps/icu-small/source/i18n/remtrans.h index 25a5609dffeec8..a5635781f979c7 100644 --- a/deps/icu-small/source/i18n/remtrans.h +++ b/deps/icu-small/source/i18n/remtrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/repattrn.cpp b/deps/icu-small/source/i18n/repattrn.cpp index bf69dbb66f4295..817df2ecc38fe4 100644 --- a/deps/icu-small/source/i18n/repattrn.cpp +++ b/deps/icu-small/source/i18n/repattrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: repattrn.cpp // @@ -118,8 +120,8 @@ RegexPattern &RegexPattern::operator = (const RegexPattern &other) { int32_t numSets = other.fSets->size(); fSets8 = new Regex8BitSet[numSets]; if (fSets8 == NULL) { - fDeferredStatus = U_MEMORY_ALLOCATION_ERROR; - return *this; + fDeferredStatus = U_MEMORY_ALLOCATION_ERROR; + return *this; } for (i=1; iisUnsafeBackward(c, settings->isNumeric()); } -void +void U_CALLCONV RuleBasedCollator::computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode) { t->maxExpansions = CollationElementIterator::computeMaxExpansions(t->data, errorCode); } diff --git a/deps/icu-small/source/i18n/scientificnumberformatter.cpp b/deps/icu-small/source/i18n/scientificnumberformatter.cpp index b3bc09939ceb9f..56a43f9b7fa45e 100644 --- a/deps/icu-small/source/i18n/scientificnumberformatter.cpp +++ b/deps/icu-small/source/i18n/scientificnumberformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/scriptset.cpp b/deps/icu-small/source/i18n/scriptset.cpp index c20a55d00baad5..5a425352d9996b 100644 --- a/deps/icu-small/source/i18n/scriptset.cpp +++ b/deps/icu-small/source/i18n/scriptset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2014, International Business Machines @@ -38,7 +40,7 @@ ScriptSet::~ScriptSet() { ScriptSet::ScriptSet(const ScriptSet &other) { *this = other; } - + ScriptSet & ScriptSet::operator =(const ScriptSet &other) { for (uint32_t i=0; i= 0; i = nextSetBit(i + 1)) { @@ -238,6 +249,41 @@ ScriptSet &ScriptSet::parseScripts(const UnicodeString &scriptString, UErrorCode return *this; } +void ScriptSet::setScriptExtensions(UChar32 codePoint, UErrorCode& status) { + if (U_FAILURE(status)) { return; } + static const int32_t FIRST_GUESS_SCRIPT_CAPACITY = 5; + MaybeStackArray scripts; + UErrorCode internalStatus = U_ZERO_ERROR; + int32_t script_count = -1; + + while (TRUE) { + script_count = uscript_getScriptExtensions( + codePoint, scripts.getAlias(), FIRST_GUESS_SCRIPT_CAPACITY, &internalStatus); + if (internalStatus == U_BUFFER_OVERFLOW_ERROR) { + // Need to allocate more space + if (scripts.resize(script_count) == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + internalStatus = U_ZERO_ERROR; + } else { + break; + } + } + + // Check if we failed for some reason other than buffer overflow + if (U_FAILURE(internalStatus)) { + status = internalStatus; + return; + } + + // Load the scripts into the ScriptSet and return + for (int32_t i = 0; i < script_count; i++) { + this->set(scripts[i], status); + if (U_FAILURE(status)) { return; } + } +} + U_NAMESPACE_END U_CAPI UBool U_EXPORT2 diff --git a/deps/icu-small/source/i18n/scriptset.h b/deps/icu-small/source/i18n/scriptset.h index 62af5d591d100c..e8de3b9613f990 100644 --- a/deps/icu-small/source/i18n/scriptset.h +++ b/deps/icu-small/source/i18n/scriptset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2013, International Business Machines @@ -38,6 +40,7 @@ class U_I18N_API ScriptSet: public UMemory { ~ScriptSet(); UBool operator == (const ScriptSet &other) const; + UBool operator != (const ScriptSet &other) const {return !(*this == other);}; ScriptSet & operator = (const ScriptSet &other); UBool test(UScriptCode script, UErrorCode &status) const; @@ -55,9 +58,14 @@ class U_I18N_API ScriptSet: public UMemory { int32_t hashCode() const; int32_t nextSetBit(int32_t script) const; + UBool isEmpty() const; + UnicodeString &displayScripts(UnicodeString &dest) const; // append script names to dest string. ScriptSet & parseScripts(const UnicodeString &scriptsString, UErrorCode &status); // Replaces ScriptSet contents. + // Wraps around UScript::getScriptExtensions() and adds the corresponding scripts to this instance. + void setScriptExtensions(UChar32 codePoint, UErrorCode& status); + private: uint32_t bits[6]; }; diff --git a/deps/icu-small/source/i18n/search.cpp b/deps/icu-small/source/i18n/search.cpp index 8d2de67974e1d9..f6dbb49afbd5bd 100644 --- a/deps/icu-small/source/i18n/search.cpp +++ b/deps/icu-small/source/i18n/search.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2008,2010 IBM and others. All rights reserved. @@ -22,10 +24,10 @@ U_NAMESPACE_BEGIN SearchIterator::SearchIterator(const SearchIterator &other) : UObject(other) -{ +{ m_breakiterator_ = other.m_breakiterator_; m_text_ = other.m_text_; - m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); + m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); m_search_->breakIter = other.m_search_->breakIter; m_search_->isCanonicalMatch = other.m_search_->isCanonicalMatch; m_search_->isOverlap = other.m_search_->isOverlap; @@ -81,7 +83,7 @@ USearchAttributeValue SearchIterator::getAttribute( case USEARCH_OVERLAP : return (m_search_->isOverlap == TRUE ? USEARCH_ON : USEARCH_OFF); case USEARCH_CANONICAL_MATCH : - return (m_search_->isCanonicalMatch == TRUE ? USEARCH_ON : + return (m_search_->isCanonicalMatch == TRUE ? USEARCH_ON : USEARCH_OFF); case USEARCH_ELEMENT_COMPARISON : { @@ -96,7 +98,7 @@ USearchAttributeValue SearchIterator::getAttribute( return USEARCH_DEFAULT; } } - + int32_t SearchIterator::getMatchedStart() const { return m_search_->matchedIndex; @@ -106,20 +108,20 @@ int32_t SearchIterator::getMatchedLength() const { return m_search_->matchedLength; } - + void SearchIterator::getMatchedText(UnicodeString &result) const { int32_t matchedindex = m_search_->matchedIndex; int32_t matchedlength = m_search_->matchedLength; if (matchedindex != USEARCH_DONE && matchedlength != 0) { - result.setTo(m_search_->text + matchedindex, matchedlength); + result.setTo(m_search_->text + matchedindex, matchedlength); } else { result.remove(); } } - -void SearchIterator::setBreakIterator(BreakIterator *breakiter, + +void SearchIterator::setBreakIterator(BreakIterator *breakiter, UErrorCode &status) { if (U_SUCCESS(status)) { @@ -137,11 +139,11 @@ void SearchIterator::setBreakIterator(BreakIterator *breakiter, // any subclass of BreakIterator should work fine here... m_search_->breakIter = (UBreakIterator *) breakiter; #endif - + m_breakiterator_ = breakiter; } } - + const BreakIterator * SearchIterator::getBreakIterator(void) const { return m_breakiterator_; @@ -168,7 +170,7 @@ void SearchIterator::setText(CharacterIterator &text, UErrorCode &status) setText(m_text_, status); } } - + const UnicodeString & SearchIterator::getText(void) const { return m_text_; @@ -189,7 +191,7 @@ UBool SearchIterator::operator==(const SearchIterator &that) const m_search_->matchedLength == that.m_search_->matchedLength && m_search_->textLength == that.m_search_->textLength && getOffset() == that.getOffset() && - (uprv_memcmp(m_search_->text, that.m_search_->text, + (uprv_memcmp(m_search_->text, that.m_search_->text, m_search_->textLength * sizeof(UChar)) == 0)); } @@ -204,7 +206,7 @@ int32_t SearchIterator::first(UErrorCode &status) return handleNext(0, status); } -int32_t SearchIterator::following(int32_t position, +int32_t SearchIterator::following(int32_t position, UErrorCode &status) { if (U_FAILURE(status)) { @@ -213,7 +215,7 @@ int32_t SearchIterator::following(int32_t position, setOffset(position, status); return handleNext(position, status); } - + int32_t SearchIterator::last(UErrorCode &status) { if (U_FAILURE(status)) { @@ -223,7 +225,7 @@ int32_t SearchIterator::last(UErrorCode &status) return handlePrev(m_search_->textLength, status); } -int32_t SearchIterator::preceding(int32_t position, +int32_t SearchIterator::preceding(int32_t position, UErrorCode &status) { if (U_FAILURE(status)) { @@ -242,19 +244,19 @@ int32_t SearchIterator::next(UErrorCode &status) m_search_->reset = FALSE; if (m_search_->isForwardSearching == TRUE) { int32_t textlength = m_search_->textLength; - if (offset == textlength || matchindex == textlength || - (matchindex != USEARCH_DONE && + if (offset == textlength || matchindex == textlength || + (matchindex != USEARCH_DONE && matchindex + matchlength >= textlength)) { // not enough characters to match setMatchNotFound(); - return USEARCH_DONE; + return USEARCH_DONE; } } else { - // switching direction. - // if matchedIndex == USEARCH_DONE, it means that either a + // switching direction. + // if matchedIndex == USEARCH_DONE, it means that either a // setOffset has been called or that previous ran off the text - // string. the iterator would have been set to offset 0 if a + // string. the iterator would have been set to offset 0 if a // match is not found. m_search_->isForwardSearching = TRUE; if (m_search_->matchedIndex != USEARCH_DONE) { @@ -291,13 +293,13 @@ int32_t SearchIterator::previous(UErrorCode &status) else { offset = getOffset(); } - + int32_t matchindex = m_search_->matchedIndex; if (m_search_->isForwardSearching == TRUE) { - // switching direction. - // if matchedIndex == USEARCH_DONE, it means that either a + // switching direction. + // if matchedIndex == USEARCH_DONE, it means that either a // setOffset has been called or that next ran off the text - // string. the iterator would have been set to offset textLength if + // string. the iterator would have been set to offset textLength if // a match is not found. m_search_->isForwardSearching = FALSE; if (matchindex != USEARCH_DONE) { @@ -308,7 +310,7 @@ int32_t SearchIterator::previous(UErrorCode &status) if (offset == 0 || matchindex == 0) { // not enough characters to match setMatchNotFound(); - return USEARCH_DONE; + return USEARCH_DONE; } } @@ -317,7 +319,7 @@ int32_t SearchIterator::previous(UErrorCode &status) matchindex += m_search_->matchedLength - 2; } - return handlePrev(matchindex, status); + return handlePrev(matchindex, status); } return handlePrev(offset, status); @@ -356,7 +358,7 @@ SearchIterator::SearchIterator() m_breakiterator_ = NULL; } -SearchIterator::SearchIterator(const UnicodeString &text, +SearchIterator::SearchIterator(const UnicodeString &text, BreakIterator *breakiter) : m_breakiterator_(breakiter), m_text_(text) @@ -374,7 +376,7 @@ SearchIterator::SearchIterator(const UnicodeString &text, m_search_->textLength = text.length(); } -SearchIterator::SearchIterator(CharacterIterator &text, +SearchIterator::SearchIterator(CharacterIterator &text, BreakIterator *breakiter) : m_breakiterator_(breakiter) { @@ -422,12 +424,12 @@ void SearchIterator::setMatchStart(int32_t position) m_search_->matchedIndex = position; } -void SearchIterator::setMatchNotFound() +void SearchIterator::setMatchNotFound() { setMatchStart(USEARCH_DONE); setMatchLength(0); UErrorCode status = U_ZERO_ERROR; - // by default no errors should be returned here since offsets are within + // by default no errors should be returned here since offsets are within // range. if (m_search_->isForwardSearching) { setOffset(m_search_->textLength, status); diff --git a/deps/icu-small/source/i18n/selfmt.cpp b/deps/icu-small/source/i18n/selfmt.cpp index 5016e8e30a16c3..041fea515c88ba 100644 --- a/deps/icu-small/source/i18n/selfmt.cpp +++ b/deps/icu-small/source/i18n/selfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/selfmtimpl.h b/deps/icu-small/source/i18n/selfmtimpl.h index 02638448718e56..3a5d55ad58c21f 100644 --- a/deps/icu-small/source/i18n/selfmtimpl.h +++ b/deps/icu-small/source/i18n/selfmtimpl.h @@ -1,8 +1,10 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** - * COPYRIGHT: + * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and * others. All Rights Reserved. - * Copyright (C) 2010 , Yahoo! Inc. + * Copyright (C) 2010 , Yahoo! Inc. ******************************************************************** * File selectfmtimpl.h * diff --git a/deps/icu-small/source/i18n/sharedbreakiterator.cpp b/deps/icu-small/source/i18n/sharedbreakiterator.cpp index 430dfba1ccb24a..ca962c6283374a 100644 --- a/deps/icu-small/source/i18n/sharedbreakiterator.cpp +++ b/deps/icu-small/source/i18n/sharedbreakiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/sharedbreakiterator.h b/deps/icu-small/source/i18n/sharedbreakiterator.h index 09ba4312a3995a..58be1f6a76e906 100644 --- a/deps/icu-small/source/i18n/sharedbreakiterator.h +++ b/deps/icu-small/source/i18n/sharedbreakiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharedcalendar.h b/deps/icu-small/source/i18n/sharedcalendar.h index 2a10c88b593851..f6d97b55bc128f 100644 --- a/deps/icu-small/source/i18n/sharedcalendar.h +++ b/deps/icu-small/source/i18n/sharedcalendar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/shareddateformatsymbols.h b/deps/icu-small/source/i18n/shareddateformatsymbols.h index 8451183bc29aa5..a11a8a391b55ba 100644 --- a/deps/icu-small/source/i18n/shareddateformatsymbols.h +++ b/deps/icu-small/source/i18n/shareddateformatsymbols.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharednumberformat.h b/deps/icu-small/source/i18n/sharednumberformat.h index b6f5a8c923f36a..fcb618a4d48d50 100644 --- a/deps/icu-small/source/i18n/sharednumberformat.h +++ b/deps/icu-small/source/i18n/sharednumberformat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharedpluralrules.h b/deps/icu-small/source/i18n/sharedpluralrules.h index 51773008fb69d2..faed6dea0e174d 100644 --- a/deps/icu-small/source/i18n/sharedpluralrules.h +++ b/deps/icu-small/source/i18n/sharedpluralrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/significantdigitinterval.h b/deps/icu-small/source/i18n/significantdigitinterval.h index a3d86f1c8fe280..336af784a50649 100644 --- a/deps/icu-small/source/i18n/significantdigitinterval.h +++ b/deps/icu-small/source/i18n/significantdigitinterval.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/simpletz.cpp b/deps/icu-small/source/i18n/simpletz.cpp index 3696d210736d7f..a06a80fc47ebc9 100644 --- a/deps/icu-small/source/i18n/simpletz.cpp +++ b/deps/icu-small/source/i18n/simpletz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2013, International Business Machines Corporation and @@ -302,7 +304,7 @@ SimpleTimeZone::setStartYear(int32_t year) * @param time the daylight savings starting time. Please see the member * description for an example. */ - + void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UErrorCode& status) @@ -318,17 +320,17 @@ SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t da // ------------------------------------- -void -SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, - int32_t time, TimeMode mode, UErrorCode& status) +void +SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, + int32_t time, TimeMode mode, UErrorCode& status) { setStartRule(month, dayOfMonth, 0, time, mode, status); } // ------------------------------------- -void -SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, +void +SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode& status) { setStartRule(month, after ? dayOfMonth : -dayOfMonth, @@ -370,8 +372,8 @@ SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayO // ------------------------------------- -void -SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, +void +SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, TimeMode mode, UErrorCode& status) { setEndRule(month, dayOfMonth, 0, time, mode, status); @@ -379,8 +381,8 @@ SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, // ------------------------------------- -void -SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, +void +SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode& status) { setEndRule(month, after ? dayOfMonth : -dayOfMonth, @@ -408,9 +410,9 @@ SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, return getOffset(era, year, month, day, dayOfWeek, millis, Grego::monthLength(year, month), status); } -int32_t +int32_t SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, + uint8_t dayOfWeek, int32_t millis, int32_t /*monthLength*/, UErrorCode& status) const { // Check the month before calling Grego::monthLength(). This @@ -435,9 +437,9 @@ SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, status); } -int32_t +int32_t SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, + uint8_t dayOfWeek, int32_t millis, int32_t monthLength, int32_t prevMonthLength, UErrorCode& status) const { @@ -463,7 +465,7 @@ SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, int32_t result = rawOffset; // Bail out if we are before the onset of daylight savings time - if(!useDaylight || year < startYear || era != GregorianCalendar::AD) + if(!useDaylight || year < startYear || era != GregorianCalendar::AD) return result; // Check for southern hemisphere. We assume that the start and end @@ -565,7 +567,7 @@ SimpleTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32 * @return 1 if the date is after the rule date, -1 if the date is before * the rule date, or 0 if the date is equal to the rule date. */ -int32_t +int32_t SimpleTimeZone::compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen, int8_t dayOfMonth, int8_t dayOfWeek, int32_t millis, int32_t millisDelta, @@ -626,7 +628,7 @@ SimpleTimeZone::compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen if (ruleDay > 0) ruleDayOfMonth = 1 + (ruleDay - 1) * 7 + (7 + ruleDayOfWeek - (dayOfWeek - dayOfMonth + 1)) % 7; - + // if ruleDay is negative (we assume it's not zero here), we have to do // the same calculation figuring backward from the last day of the month. else @@ -681,8 +683,8 @@ SimpleTimeZone::setRawOffset(int32_t offsetMillis) // ------------------------------------- -void -SimpleTimeZone::setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status) +void +SimpleTimeZone::setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status) { if (millisSavedDuringDST <= 0) { status = U_ILLEGAL_ARGUMENT_ERROR; @@ -695,7 +697,7 @@ SimpleTimeZone::setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status) // ------------------------------------- -int32_t +int32_t SimpleTimeZone::getDSTSavings() const { return dstSavings; @@ -740,7 +742,7 @@ UBool SimpleTimeZone::inDaylightTime(UDate date, UErrorCode& status) const * @param other the TimeZone object to be compared with * @return true if the given zone has the same rules and offset as this one */ -UBool +UBool SimpleTimeZone::hasSameRules(const TimeZone& other) const { if (this == &other) return TRUE; @@ -831,7 +833,7 @@ SimpleTimeZone::hasSameRules(const TimeZone& other) const * This method also recognizes a startDay or endDay of zero as indicating * no DST. */ -void +void SimpleTimeZone::decodeRules(UErrorCode& status) { decodeStartRule(status); @@ -862,8 +864,8 @@ SimpleTimeZone::decodeRules(UErrorCode& status) * While arguably the start range should still be 0..ONEDAY-1, we keep * the start and end ranges the same for consistency. */ -void -SimpleTimeZone::decodeStartRule(UErrorCode& status) +void +SimpleTimeZone::decodeStartRule(UErrorCode& status) { if(U_FAILURE(status)) return; @@ -917,8 +919,8 @@ SimpleTimeZone::decodeStartRule(UErrorCode& status) * analogous to decodeStartRule(). * @see decodeStartRule */ -void -SimpleTimeZone::decodeEndRule(UErrorCode& status) +void +SimpleTimeZone::decodeEndRule(UErrorCode& status) { if(U_FAILURE(status)) return; @@ -1135,14 +1137,14 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { // For now, use ID + "(DST)" as the name dstRule = new AnnualTimeZoneRule(tzid+UnicodeString(DST_STR), getRawOffset(), getDSTSavings(), dtRule, startYear, AnnualTimeZoneRule::MAX_YEAR); - + // Check for Null pointer if (dstRule == NULL) { status = U_MEMORY_ALLOCATION_ERROR; deleteTransitionRules(); return; } - + // Calculate the first DST start time dstRule->getFirstStart(getRawOffset(), 0, firstDstStart); @@ -1163,7 +1165,7 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { dtRule = new DateTimeRule(endMonth, endDay, endDayOfWeek, false, endTime, timeRuleType); break; } - + // Check for Null pointer if (dtRule == NULL) { status = U_MEMORY_ALLOCATION_ERROR; @@ -1173,7 +1175,7 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { // For now, use ID + "(STD)" as the name stdRule = new AnnualTimeZoneRule(tzid+UnicodeString(STD_STR), getRawOffset(), 0, dtRule, startYear, AnnualTimeZoneRule::MAX_YEAR); - + //Check for Null pointer if (stdRule == NULL) { status = U_MEMORY_ALLOCATION_ERROR; @@ -1198,7 +1200,7 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { deleteTransitionRules(); return; } - + } else { // Create a TimeZoneRule for initial time initialRule = new InitialTimeZoneRule(tzid, getRawOffset(), 0); diff --git a/deps/icu-small/source/i18n/smallintformatter.cpp b/deps/icu-small/source/i18n/smallintformatter.cpp index 44dd9391cb722c..297786f5040e43 100644 --- a/deps/icu-small/source/i18n/smallintformatter.cpp +++ b/deps/icu-small/source/i18n/smallintformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -2588,7 +2590,7 @@ IntDigitCountRange::pin(int32_t digitCount) const { return digitCount < fMin ? fMin : (digitCount < fMax ? digitCount : fMax); } -int32_t +int32_t SmallIntFormatter::estimateDigitCount( int32_t positiveValue, const IntDigitCountRange &range) { if (positiveValue >= gMaxFastInt) { @@ -2618,3 +2620,4 @@ SmallIntFormatter::format( } U_NAMESPACE_END + diff --git a/deps/icu-small/source/i18n/smallintformatter.h b/deps/icu-small/source/i18n/smallintformatter.h index 2907c6203a6f6c..abf2b4b9883783 100644 --- a/deps/icu-small/source/i18n/smallintformatter.h +++ b/deps/icu-small/source/i18n/smallintformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines @@ -80,7 +82,7 @@ class U_I18N_API SmallIntFormatter : public UMemory { int32_t positiveValue, const IntDigitCountRange &range, UnicodeString &appendTo); - + }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/smpdtfmt.cpp b/deps/icu-small/source/i18n/smpdtfmt.cpp index 145587fb12ee14..85cc162a11f39f 100644 --- a/deps/icu-small/source/i18n/smpdtfmt.cpp +++ b/deps/icu-small/source/i18n/smpdtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -50,10 +52,10 @@ #include "unicode/vtzone.h" #include "unicode/udisplaycontext.h" #include "unicode/brkiter.h" +#include "uresimp.h" #include "olsontz.h" #include "patternprops.h" #include "fphdlimp.h" -#include "gregoimp.h" #include "hebrwcal.h" #include "cstring.h" #include "uassert.h" @@ -164,9 +166,6 @@ static const UChar SUPPRESS_NEGATIVE_PREFIX[] = {0xAB00, 0}; * These are the tags we expect to see in normal resource bundle files associated * with a locale. */ -static const char gDateTimePatternsTag[]="DateTimePatterns"; - -//static const UChar gEtcUTC[] = {0x45, 0x74, 0x63, 0x2F, 0x55, 0x54, 0x43, 0x00}; // "Etc/UTC" static const UChar QUOTE = 0x27; // Single quote /* @@ -702,20 +701,42 @@ void SimpleDateFormat::construct(EStyle timeStyle, initializeCalendar(NULL, locale, status); if (U_FAILURE(status)) return; - CalendarData calData(locale, fCalendar?fCalendar->getType():NULL, status); - UResourceBundle *dateTimePatterns = calData.getByKey(gDateTimePatternsTag, status); - UResourceBundle *currentBundle; + // Load date time patterns directly from resources. + const char* cType = fCalendar ? fCalendar->getType() : NULL; + LocalUResourceBundlePointer bundle(ures_open(NULL, locale.getBaseName(), &status)); + if (U_FAILURE(status)) return; + + UBool cTypeIsGregorian = TRUE; + LocalUResourceBundlePointer dateTimePatterns; + if (cType != NULL && uprv_strcmp(cType, "gregorian") != 0) { + CharString resourcePath("calendar/", status); + resourcePath.append(cType, status).append("/DateTimePatterns", status); + dateTimePatterns.adoptInstead( + ures_getByKeyWithFallback(bundle.getAlias(), resourcePath.data(), + (UResourceBundle*)NULL, &status)); + cTypeIsGregorian = FALSE; + } + // Check for "gregorian" fallback. + if (cTypeIsGregorian || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + dateTimePatterns.adoptInstead( + ures_getByKeyWithFallback(bundle.getAlias(), + "calendar/gregorian/DateTimePatterns", + (UResourceBundle*)NULL, &status)); + } if (U_FAILURE(status)) return; - if (ures_getSize(dateTimePatterns) <= kDateTime) + LocalUResourceBundlePointer currentBundle; + + if (ures_getSize(dateTimePatterns.getAlias()) <= kDateTime) { status = U_INVALID_FORMAT_ERROR; return; } - setLocaleIDs(ures_getLocaleByType(dateTimePatterns, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(dateTimePatterns, ULOC_ACTUAL_LOCALE, &status)); + setLocaleIDs(ures_getLocaleByType(dateTimePatterns.getAlias(), ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(dateTimePatterns.getAlias(), ULOC_ACTUAL_LOCALE, &status)); // create a symbols object from the locale fSymbols = DateFormatSymbols::createForLocale(locale, status); @@ -736,66 +757,64 @@ void SimpleDateFormat::construct(EStyle timeStyle, // and time pattern strings. if ((timeStyle != kNone) && (dateStyle != kNone)) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)timeStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fTimeOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } - ures_close(currentBundle); UnicodeString tempus1(TRUE, resStr, resStrLen); - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)dateStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)dateStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } - ures_close(currentBundle); UnicodeString tempus2(TRUE, resStr, resStrLen); int32_t glueIndex = kDateTime; - int32_t patternsSize = ures_getSize(dateTimePatterns); + int32_t patternsSize = ures_getSize(dateTimePatterns.getAlias()); if (patternsSize >= (kDateTimeOffset + kShort + 1)) { // Get proper date time format glueIndex = (int32_t)(kDateTimeOffset + (dateStyle - kDateOffset)); } - resStr = ures_getStringByIndex(dateTimePatterns, glueIndex, &resStrLen, &status); + resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), glueIndex, &resStrLen, &status); SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, status). format(tempus1, tempus2, fPattern, status); } @@ -803,56 +822,54 @@ void SimpleDateFormat::construct(EStyle timeStyle, // pattern string from the resources // setTo() - see DateFormatSymbols::assignArray comments else if (timeStyle != kNone) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)timeStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } fPattern.setTo(TRUE, resStr, resStrLen); - ures_close(currentBundle); } else if (dateStyle != kNone) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)dateStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)dateStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } fPattern.setTo(TRUE, resStr, resStrLen); - ures_close(currentBundle); } // and if it includes _neither_, that's an error @@ -1553,7 +1570,7 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, } else if (count == 2) { value /= 10; } - FieldPosition p(0); + FieldPosition p(FieldPosition::DONT_CARE); currentNumberFormat->format(value, appendTo, p); if (count > 3) { currentNumberFormat->setMinimumIntegerDigits(count - 3); @@ -2040,7 +2057,7 @@ SimpleDateFormat::zeroPaddingNumber( int32_t value, int32_t minDigits, int32_t maxDigits) const { if (currentNumberFormat!=NULL) { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); currentNumberFormat->setMinimumIntegerDigits(minDigits); currentNumberFormat->setMaximumIntegerDigits(maxDigits); diff --git a/deps/icu-small/source/i18n/smpdtfst.cpp b/deps/icu-small/source/i18n/smpdtfst.cpp index f9e94b82c62939..fbb2ab5fb49e45 100644 --- a/deps/icu-small/source/i18n/smpdtfst.cpp +++ b/deps/icu-small/source/i18n/smpdtfst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2013, International Business Machines Corporation and * @@ -108,7 +110,7 @@ UnicodeSet *SimpleDateFormatStaticSets::getIgnorables(UDateFormatField fieldInde if (U_FAILURE(status)) { return NULL; } - + switch (fieldIndex) { case UDAT_YEAR_FIELD: case UDAT_MONTH_FIELD: @@ -116,7 +118,7 @@ UnicodeSet *SimpleDateFormatStaticSets::getIgnorables(UDateFormatField fieldInde case UDAT_STANDALONE_DAY_FIELD: case UDAT_STANDALONE_MONTH_FIELD: return gStaticSets->fDateIgnorables; - + case UDAT_HOUR_OF_DAY1_FIELD: case UDAT_HOUR_OF_DAY0_FIELD: case UDAT_MINUTE_FIELD: @@ -124,7 +126,7 @@ UnicodeSet *SimpleDateFormatStaticSets::getIgnorables(UDateFormatField fieldInde case UDAT_HOUR1_FIELD: case UDAT_HOUR0_FIELD: return gStaticSets->fTimeIgnorables; - + default: return gStaticSets->fOtherIgnorables; } diff --git a/deps/icu-small/source/i18n/smpdtfst.h b/deps/icu-small/source/i18n/smpdtfst.h index da30f11d886f00..586b4e669efff6 100644 --- a/deps/icu-small/source/i18n/smpdtfst.h +++ b/deps/icu-small/source/i18n/smpdtfst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2013, International Business Machines Corporation and * @@ -30,12 +32,12 @@ class SimpleDateFormatStaticSets : public UMemory public: SimpleDateFormatStaticSets(UErrorCode &status); ~SimpleDateFormatStaticSets(); - + static void initSets(UErrorCode *status); static UBool cleanup(); - + static UnicodeSet *getIgnorables(UDateFormatField fieldIndex); - + private: UnicodeSet *fDateIgnorables; UnicodeSet *fTimeIgnorables; diff --git a/deps/icu-small/source/i18n/sortkey.cpp b/deps/icu-small/source/i18n/sortkey.cpp index 257888c741512b..f6f1873d14d764 100644 --- a/deps/icu-small/source/i18n/sortkey.cpp +++ b/deps/icu-small/source/i18n/sortkey.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2012, International Business Machines Corporation and @@ -276,7 +278,7 @@ CollationKey::hashCode() const U_NAMESPACE_END U_CAPI int32_t U_EXPORT2 -ucol_keyHashCode(const uint8_t *key, +ucol_keyHashCode(const uint8_t *key, int32_t length) { return icu::computeHashCode(key, length); diff --git a/deps/icu-small/source/i18n/standardplural.cpp b/deps/icu-small/source/i18n/standardplural.cpp index 456e9390ca7c2d..c39bae1ab18b9c 100644 --- a/deps/icu-small/source/i18n/standardplural.cpp +++ b/deps/icu-small/source/i18n/standardplural.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/standardplural.h b/deps/icu-small/source/i18n/standardplural.h index 8a8de2188485ec..56c63c347cee1e 100644 --- a/deps/icu-small/source/i18n/standardplural.h +++ b/deps/icu-small/source/i18n/standardplural.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/strmatch.cpp b/deps/icu-small/source/i18n/strmatch.cpp index ad02c5f44c538a..a04f57f18ed868 100644 --- a/deps/icu-small/source/i18n/strmatch.cpp +++ b/deps/icu-small/source/i18n/strmatch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2012, International Business Machines Corporation @@ -67,7 +69,7 @@ UnicodeFunctor* StringMatcher::clone() const { UnicodeMatcher* StringMatcher::toMatcher() const { StringMatcher *nonconst_this = const_cast(this); UnicodeMatcher *nonconst_base = static_cast(nonconst_this); - + return nonconst_base; } @@ -78,7 +80,7 @@ UnicodeMatcher* StringMatcher::toMatcher() const { UnicodeReplacer* StringMatcher::toReplacer() const { StringMatcher *nonconst_this = const_cast(this); UnicodeReplacer *nonconst_base = static_cast(nonconst_this); - + return nonconst_base; } @@ -219,9 +221,9 @@ int32_t StringMatcher::replace(Replaceable& text, int32_t start, int32_t limit, int32_t& /*cursor*/) { - + int32_t outLen = 0; - + // Copy segment with out-of-band data int32_t dest = limit; // If there was no match, that means that a quantifier @@ -232,9 +234,9 @@ int32_t StringMatcher::replace(Replaceable& text, outLen = matchLimit - matchStart; } } - + text.handleReplaceBetween(start, limit, UnicodeString()); // delete original text - + return outLen; } diff --git a/deps/icu-small/source/i18n/strmatch.h b/deps/icu-small/source/i18n/strmatch.h index 32f5c4b7907883..83112eec6aa781 100644 --- a/deps/icu-small/source/i18n/strmatch.h +++ b/deps/icu-small/source/i18n/strmatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2001-2011, International Business Machines Corporation * and others. All Rights Reserved. @@ -66,7 +68,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico * @param o the object to be copied. */ StringMatcher(const StringMatcher& o); - + /** * Destructor */ @@ -135,7 +137,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico * offset). This is used by RuleBasedTransliterator for * indexing. * @param v the given value - * @return TRUE if this matcher will match a character c, + * @return TRUE if this matcher will match a character c, * where c & 0xFF == v */ virtual UBool matchesIndexValue(uint8_t v) const; diff --git a/deps/icu-small/source/i18n/strrepl.cpp b/deps/icu-small/source/i18n/strrepl.cpp index 3181d5b15982b7..d76b652e3250c7 100644 --- a/deps/icu-small/source/i18n/strrepl.cpp +++ b/deps/icu-small/source/i18n/strrepl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2012, International Business Machines Corporation @@ -197,7 +199,7 @@ int32_t StringReplacer::replace(Replaceable& text, // Delete the old text (the key) text.handleReplaceBetween(start + outLen, limit + outLen, UnicodeString()); - } + } if (hasCursor) { // Adjust the cursor for positions outside the key. These diff --git a/deps/icu-small/source/i18n/strrepl.h b/deps/icu-small/source/i18n/strrepl.h index faf96b62962425..a452db993fb45d 100644 --- a/deps/icu-small/source/i18n/strrepl.h +++ b/deps/icu-small/source/i18n/strrepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/stsearch.cpp b/deps/icu-small/source/i18n/stsearch.cpp index 925ee3138f3547..6daee6efe72db2 100644 --- a/deps/icu-small/source/i18n/stsearch.cpp +++ b/deps/icu-small/source/i18n/stsearch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 IBM and others. All rights reserved. @@ -340,7 +342,7 @@ int32_t StringSearch::handleNext(int32_t position, UErrorCode &status) } ucol_setOffset(m_strsrch_->textIter, position, &status); - + #if 0 for (;;) { if (m_search_->isCanonicalMatch) { @@ -378,22 +380,22 @@ int32_t StringSearch::handleNext(int32_t position, UErrorCode &status) // then we don't need to check the match boundaries here because // usearch_handleNextXXX will already have done it. if (m_search_->isCanonicalMatch) { - // *could* actually use exact here 'cause no extra accents allowed... - usearch_handleNextCanonical(m_strsrch_, &status); + // *could* actually use exact here 'cause no extra accents allowed... + usearch_handleNextCanonical(m_strsrch_, &status); } else { - usearch_handleNextExact(m_strsrch_, &status); + usearch_handleNextExact(m_strsrch_, &status); } - + if (U_FAILURE(status)) { - return USEARCH_DONE; + return USEARCH_DONE; } - + if (m_search_->matchedIndex == USEARCH_DONE) { - ucol_setOffset(m_strsrch_->textIter, m_search_->textLength, &status); + ucol_setOffset(m_strsrch_->textIter, m_search_->textLength, &status); } else { - ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, &status); + ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, &status); } - + return m_search_->matchedIndex; #endif } @@ -429,7 +431,7 @@ int32_t StringSearch::handlePrev(int32_t position, UErrorCode &status) setMatchNotFound(); return USEARCH_DONE; } - + for (;;) { if (m_search_->isCanonicalMatch) { // can't use exact here since extra accents are allowed. @@ -455,18 +457,18 @@ int32_t StringSearch::handlePrev(int32_t position, UErrorCode &status) } #else ucol_setOffset(m_strsrch_->textIter, position, &status); - + if (m_search_->isCanonicalMatch) { - // *could* use exact match here since extra accents *not* allowed! - usearch_handlePreviousCanonical(m_strsrch_, &status); + // *could* use exact match here since extra accents *not* allowed! + usearch_handlePreviousCanonical(m_strsrch_, &status); } else { - usearch_handlePreviousExact(m_strsrch_, &status); + usearch_handlePreviousExact(m_strsrch_, &status); } - + if (U_FAILURE(status)) { - return USEARCH_DONE; + return USEARCH_DONE; } - + return m_search_->matchedIndex; #endif } diff --git a/deps/icu-small/source/i18n/taiwncal.cpp b/deps/icu-small/source/i18n/taiwncal.cpp index 7c51843c0f5c08..81c539ea6b50f0 100644 --- a/deps/icu-small/source/i18n/taiwncal.cpp +++ b/deps/icu-small/source/i18n/taiwncal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines Corporation and @@ -28,7 +30,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TaiwanCalendar) static const int32_t kTaiwanEraStart = 1911; // 1911 (Gregorian) -static const int32_t kGregorianEpoch = 1970; +static const int32_t kGregorianEpoch = 1970; TaiwanCalendar::TaiwanCalendar(const Locale& aLocale, UErrorCode& success) : GregorianCalendar(aLocale, success) @@ -133,7 +135,7 @@ void TaiwanCalendar::timeToFields(UDate theTime, UBool quick, UErrorCode& status /** * The system maintains a static default century start date and Year. They are - * initialized the first time they are used. Once the system default century date + * initialized the first time they are used. Once the system default century date * and year are set, they do not change. */ static UDate gSystemDefaultCenturyStart = DBL_MIN; diff --git a/deps/icu-small/source/i18n/taiwncal.h b/deps/icu-small/source/i18n/taiwncal.h index 125a20da173a04..64e4be34b3ab24 100644 --- a/deps/icu-small/source/i18n/taiwncal.h +++ b/deps/icu-small/source/i18n/taiwncal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -140,7 +142,7 @@ class TaiwanCalendar : public GregorianCalendar { virtual int32_t handleGetExtendedYear(); /** * Subclasses may override this method to compute several fields - * specific to each calendar system. + * specific to each calendar system. * @internal */ virtual void handleComputeFields(int32_t julianDay, UErrorCode& status); @@ -179,3 +181,4 @@ U_NAMESPACE_END #endif // _TAIWNCAL //eof + diff --git a/deps/icu-small/source/i18n/timezone.cpp b/deps/icu-small/source/i18n/timezone.cpp index d0a1a418798179..a161745c40ce74 100644 --- a/deps/icu-small/source/i18n/timezone.cpp +++ b/deps/icu-small/source/i18n/timezone.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and +* Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -458,6 +460,8 @@ TimeZone::detectHostTimeZone() uprv_tzset(); // Initialize tz... system data + uprv_tzname_clear_cache(); + // Get the timezone ID from the host. This function should do // any required host-specific remapping; e.g., on Windows this // function maps the Date and Time control panel setting to an @@ -516,7 +520,7 @@ TimeZone::detectHostTimeZone() // ------------------------------------- /** - * Initialize DEFAULT_ZONE from the system default time zone. + * Initialize DEFAULT_ZONE from the system default time zone. * Upon return, DEFAULT_ZONE will not be NULL, unless operator new() * returns NULL. */ @@ -529,7 +533,7 @@ static void U_CALLCONV initDefault() if (DEFAULT_ZONE != NULL) { return; } - + // NOTE: this code is safely single threaded, being only // run via umtx_initOnce(). // @@ -1079,7 +1083,7 @@ TimeZone::dereferOlsonLink(const UnicodeString& id) { // open the zone bundle by index ures_getByKey(rb, kZONES, rb, &ec); - ures_getByIndex(rb, idx, rb, &ec); + ures_getByIndex(rb, idx, rb, &ec); if (U_SUCCESS(ec)) { if (ures_getType(rb) == URES_INT) { diff --git a/deps/icu-small/source/i18n/titletrn.cpp b/deps/icu-small/source/i18n/titletrn.cpp index 79ffb403194adc..b5896167871d57 100644 --- a/deps/icu-small/source/i18n/titletrn.cpp +++ b/deps/icu-small/source/i18n/titletrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines @@ -86,7 +88,7 @@ void TitlecaseTransliterator::handleTransliterate( // Our mode; we are either converting letter toTitle or // toLower. UBool doTitle = TRUE; - + // Determine if there is a preceding context of cased case-ignorable*, // in which case we want to start in toLower mode. If the // prior context is anything else (including empty) then start @@ -104,7 +106,7 @@ void TitlecaseTransliterator::handleTransliterate( } // else (type<0) case-ignorable: continue } - + // Convert things after a cased character toLower; things // after an uncased, non-case-ignorable character toTitle. Case-ignorable // characters are copied directly and do not change the mode. diff --git a/deps/icu-small/source/i18n/titletrn.h b/deps/icu-small/source/i18n/titletrn.h index a093152b66cbdb..a6380e3bd142c6 100644 --- a/deps/icu-small/source/i18n/titletrn.h +++ b/deps/icu-small/source/i18n/titletrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/tmunit.cpp b/deps/icu-small/source/i18n/tmunit.cpp index e56c51ca0f7e73..b6db3092615346 100644 --- a/deps/icu-small/source/i18n/tmunit.cpp +++ b/deps/icu-small/source/i18n/tmunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2014, Google, International Business Machines Corporation and @@ -17,25 +19,25 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeUnit) /* * There are only 7 time units. - * So, TimeUnit could be made as singleton + * So, TimeUnit could be made as singleton * (similar to uniset_props.cpp, or unorm.cpp, - * in which a static TimeUnit* array is created, and + * in which a static TimeUnit* array is created, and * the creatInstance() returns a const TimeUnit*). * But the constraint is TimeUnit is a data member of Measure. * But Measure (which is an existing API) does not expect it's "unit" member * as singleton. Meaure takes ownership of the "unit" member. * In its constructor, it does not take a const "unit" pointer. * Also, Measure can clone and destruct the "unit" pointer. - * In order to preserve the old behavior and let Measure handle singleton "unit", - * 1. a flag need to be added in Measure; + * In order to preserve the old behavior and let Measure handle singleton "unit", + * 1. a flag need to be added in Measure; * 2. a new constructor which takes const "unit" as parameter need to be added, * and this new constructor will set the flag on. * 3. clone and destructor need to check upon this flag to distinguish on how - * to handle the "unit". - * + * to handle the "unit". + * * Since TimeUnit is such a light weight object, comparing with the heavy weight * format operation, we decided to avoid the above complication. - * + * * So, both TimeUnit and CurrencyUnit (the 2 subclasses of MeasureUnit) are * immutable and non-singleton. * @@ -43,18 +45,18 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeUnit) * If an application needs to create a long list of TimeUnitAmount on the same * time unit but different number, for example, * 1 hour, 2 hour, 3 hour, ................. 10,000 hour, - * there might be performance hit because 10,000 TimeUnit object, + * there might be performance hit because 10,000 TimeUnit object, * although all are the same time unit, will be created in heap and deleted. * * To address this performance issue, if there is any in the future, - * we should and need to change TimeUnitAmount and CurrencyAmount to be + * we should and need to change TimeUnitAmount and CurrencyAmount to be * immutable by allowing a setter on the number. - * Or we need to add 2 parallel mutable classes in order to + * Or we need to add 2 parallel mutable classes in order to * preserve the existing API. * Or we can use freezable. */ -TimeUnit* U_EXPORT2 -TimeUnit::createInstance(TimeUnit::UTimeUnitFields timeUnitField, +TimeUnit* U_EXPORT2 +TimeUnit::createInstance(TimeUnit::UTimeUnitFields timeUnitField, UErrorCode& status) { if (U_FAILURE(status)) { return NULL; @@ -97,11 +99,11 @@ TimeUnit::TimeUnit(TimeUnit::UTimeUnitFields timeUnitField) { } } -TimeUnit::TimeUnit(const TimeUnit& other) +TimeUnit::TimeUnit(const TimeUnit& other) : MeasureUnit(other), fTimeUnitField(other.fTimeUnitField) { } -UObject* +UObject* TimeUnit::clone() const { return new TimeUnit(*this); } diff --git a/deps/icu-small/source/i18n/tmutamt.cpp b/deps/icu-small/source/i18n/tmutamt.cpp index 734b5de882d953..6386e230cf81b7 100644 --- a/deps/icu-small/source/i18n/tmutamt.cpp +++ b/deps/icu-small/source/i18n/tmutamt.cpp @@ -1,9 +1,11 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008, Google, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* - */ + */ #include "unicode/tmutamt.h" @@ -14,17 +16,17 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeUnitAmount) -TimeUnitAmount::TimeUnitAmount(const Formattable& number, +TimeUnitAmount::TimeUnitAmount(const Formattable& number, TimeUnit::UTimeUnitFields timeUnitField, UErrorCode& status) : Measure(number, TimeUnit::createInstance(timeUnitField, status), status) { } -TimeUnitAmount::TimeUnitAmount(double amount, +TimeUnitAmount::TimeUnitAmount(double amount, TimeUnit::UTimeUnitFields timeUnitField, UErrorCode& status) -: Measure(Formattable(amount), +: Measure(Formattable(amount), TimeUnit::createInstance(timeUnitField, status), status) { } @@ -36,7 +38,7 @@ TimeUnitAmount::TimeUnitAmount(const TimeUnitAmount& other) } -TimeUnitAmount& +TimeUnitAmount& TimeUnitAmount::operator=(const TimeUnitAmount& other) { Measure::operator=(other); return *this; @@ -48,12 +50,12 @@ TimeUnitAmount::operator==(const UObject& other) const { return Measure::operator==(other); } -UObject* +UObject* TimeUnitAmount::clone() const { return new TimeUnitAmount(*this); } - + TimeUnitAmount::~TimeUnitAmount() { } @@ -69,7 +71,7 @@ TimeUnit::UTimeUnitFields TimeUnitAmount::getTimeUnitField() const { return getTimeUnit().getTimeUnitField(); } - + U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/tmutfmt.cpp b/deps/icu-small/source/i18n/tmutfmt.cpp index fa31d7b3c1815c..1669546f767535 100644 --- a/deps/icu-small/source/i18n/tmutfmt.cpp +++ b/deps/icu-small/source/i18n/tmutfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2015, Google, International Business Machines Corporation @@ -347,6 +349,115 @@ TimeUnitFormat::initDataMembers(UErrorCode& err){ } } +struct TimeUnitFormatReadSink : public ResourceSink { + TimeUnitFormat *timeUnitFormatObj; + const UVector &pluralCounts; + UTimeUnitFormatStyle style; + UBool beenHere; + + TimeUnitFormatReadSink(TimeUnitFormat *timeUnitFormatObj, + const UVector &pluralCounts, UTimeUnitFormatStyle style) : + timeUnitFormatObj(timeUnitFormatObj), pluralCounts(pluralCounts), + style(style), beenHere(FALSE){} + + virtual ~TimeUnitFormatReadSink(); + + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + // Skip all put() calls except the first one -- discard all fallback data. + if (beenHere) { + return; + } else { + beenHere = TRUE; + } + + ResourceTable units = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; units.getKeyAndValue(i, key, value); ++i) { + const char* timeUnitName = key; + if (timeUnitName == NULL) { + continue; + } + + TimeUnit::UTimeUnitFields timeUnitField = TimeUnit::UTIMEUNIT_FIELD_COUNT; + if ( uprv_strcmp(timeUnitName, gTimeUnitYear) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_YEAR; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitMonth) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_MONTH; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitDay) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_DAY; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitHour) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_HOUR; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitMinute) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_MINUTE; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitSecond) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_SECOND; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitWeek) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_WEEK; + } else { + continue; + } + LocalPointer localCountToPatterns; + Hashtable *countToPatterns = + timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField]; + if (countToPatterns == NULL) { + localCountToPatterns.adoptInsteadAndCheckErrorCode( + timeUnitFormatObj->initHash(errorCode), errorCode); + countToPatterns = localCountToPatterns.getAlias(); + if (U_FAILURE(errorCode)) { + return; + } + } + + ResourceTable countsToPatternTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { + continue; + } + for (int32_t j = 0; countsToPatternTable.getKeyAndValue(j, key, value); ++j) { + errorCode = U_ZERO_ERROR; + UnicodeString pattern = value.getUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { + continue; + } + UnicodeString pluralCountUniStr(key, -1, US_INV); + if (!pluralCounts.contains(&pluralCountUniStr)) { + continue; + } + LocalPointer messageFormat(new MessageFormat( + pattern, timeUnitFormatObj->getLocale(errorCode), errorCode), errorCode); + if (U_FAILURE(errorCode)) { + return; + } + MessageFormat** formatters = + (MessageFormat**)countToPatterns->get(pluralCountUniStr); + if (formatters == NULL) { + LocalMemory localFormatters( + (MessageFormat **)uprv_malloc(UTMUTFMT_FORMAT_STYLE_COUNT*sizeof(MessageFormat*))); + if (localFormatters.isNull()) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + localFormatters[UTMUTFMT_FULL_STYLE] = NULL; + localFormatters[UTMUTFMT_ABBREVIATED_STYLE] = NULL; + countToPatterns->put(pluralCountUniStr, localFormatters.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { + return; + } + formatters = localFormatters.orphan(); + } + formatters[style] = messageFormat.orphan(); + } + + if (timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField] == NULL) { + timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField] = localCountToPatterns.orphan(); + } + } + } + +}; + +TimeUnitFormatReadSink::~TimeUnitFormatReadSink() {} + void TimeUnitFormat::readFromCurrentLocale(UTimeUnitFormatStyle style, const char* key, const UVector& pluralCounts, UErrorCode& err) { @@ -365,94 +476,10 @@ TimeUnitFormat::readFromCurrentLocale(UTimeUnitFormatStyle style, const char* ke if (U_FAILURE(status)) { return; } - int32_t size = ures_getSize(unitsRes.getAlias()); - for ( int32_t index = 0; index < size; ++index) { - status = U_ZERO_ERROR; - // resource of one time unit - LocalUResourceBundlePointer oneTimeUnit( - ures_getByIndex(unitsRes.getAlias(), index, NULL, &status)); - if (U_FAILURE(status)) { - continue; - } - const char* timeUnitName = ures_getKey(oneTimeUnit.getAlias()); - if (timeUnitName == NULL) { - continue; - } - LocalUResourceBundlePointer countsToPatternRB( - ures_getByKey(unitsRes.getAlias(), timeUnitName, NULL, &status)); - if (countsToPatternRB.isNull() || U_FAILURE(status)) { - continue; - } - TimeUnit::UTimeUnitFields timeUnitField = TimeUnit::UTIMEUNIT_FIELD_COUNT; - if ( uprv_strcmp(timeUnitName, gTimeUnitYear) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_YEAR; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitMonth) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_MONTH; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitDay) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_DAY; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitHour) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_HOUR; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitMinute) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_MINUTE; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitSecond) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_SECOND; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitWeek) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_WEEK; - } else { - continue; - } - LocalPointer localCountToPatterns; - Hashtable *countToPatterns = fTimeUnitToCountToPatterns[timeUnitField]; - if (countToPatterns == NULL) { - localCountToPatterns.adoptInsteadAndCheckErrorCode(initHash(err), err); - countToPatterns = localCountToPatterns.getAlias(); - if (U_FAILURE(err)) { - return; - } - } - int32_t count = ures_getSize(countsToPatternRB.getAlias()); - const char* pluralCount; - for ( int32_t pluralIndex = 0; pluralIndex < count; ++pluralIndex) { - // resource of count to pattern - status = U_ZERO_ERROR; - UnicodeString pattern = - ures_getNextUnicodeString(countsToPatternRB.getAlias(), &pluralCount, &status); - if (U_FAILURE(status)) { - continue; - } - UnicodeString pluralCountUniStr(pluralCount, -1, US_INV); - if (!pluralCounts.contains(&pluralCountUniStr)) { - continue; - } - LocalPointer messageFormat(new MessageFormat(pattern, getLocale(err), err), err); - if (U_FAILURE(err)) { - return; - } - MessageFormat** formatters = (MessageFormat**)countToPatterns->get(pluralCountUniStr); - if (formatters == NULL) { - LocalMemory localFormatters( - (MessageFormat **)uprv_malloc(UTMUTFMT_FORMAT_STYLE_COUNT*sizeof(MessageFormat*))); - if (localFormatters.isNull()) { - err = U_MEMORY_ALLOCATION_ERROR; - return; - } - localFormatters[UTMUTFMT_FULL_STYLE] = NULL; - localFormatters[UTMUTFMT_ABBREVIATED_STYLE] = NULL; - countToPatterns->put(pluralCountUniStr, localFormatters.getAlias(), err); - if (U_FAILURE(err)) { - return; - } - formatters = localFormatters.orphan(); - } - //delete formatters[style]; - formatters[style] = messageFormat.orphan(); - } - if (fTimeUnitToCountToPatterns[timeUnitField] == NULL) { - fTimeUnitToCountToPatterns[timeUnitField] = localCountToPatterns.orphan(); - } - } -} + TimeUnitFormatReadSink sink(this, pluralCounts, style); + ures_getAllItemsWithFallback(unitsRes.getAlias(), "", sink, status); +} void TimeUnitFormat::checkConsistency(UTimeUnitFormatStyle style, const char* key, UErrorCode& err) { diff --git a/deps/icu-small/source/i18n/tolowtrn.cpp b/deps/icu-small/source/i18n/tolowtrn.cpp index 3edeaf81a68443..6d1bc31ca56e2b 100644 --- a/deps/icu-small/source/i18n/tolowtrn.cpp +++ b/deps/icu-small/source/i18n/tolowtrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines @@ -25,7 +27,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LowercaseTransliterator) /** * Constructs a transliterator. */ -LowercaseTransliterator::LowercaseTransliterator() : +LowercaseTransliterator::LowercaseTransliterator() : CaseMapTransliterator(UNICODE_STRING("Any-Lower", 9), ucase_toFullLower) { } diff --git a/deps/icu-small/source/i18n/tolowtrn.h b/deps/icu-small/source/i18n/tolowtrn.h index 564b215a728d54..616e59899f974d 100644 --- a/deps/icu-small/source/i18n/tolowtrn.h +++ b/deps/icu-small/source/i18n/tolowtrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/toupptrn.cpp b/deps/icu-small/source/i18n/toupptrn.cpp index 4b7c7d06acaca1..a34792e07cfb82 100644 --- a/deps/icu-small/source/i18n/toupptrn.cpp +++ b/deps/icu-small/source/i18n/toupptrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/toupptrn.h b/deps/icu-small/source/i18n/toupptrn.h index 77799acbfd6bba..eae44e7d187dfa 100644 --- a/deps/icu-small/source/i18n/toupptrn.h +++ b/deps/icu-small/source/i18n/toupptrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/translit.cpp b/deps/icu-small/source/i18n/translit.cpp index 56cad2d18f98b9..8a2f98b30bb12d 100644 --- a/deps/icu-small/source/i18n/translit.cpp +++ b/deps/icu-small/source/i18n/translit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines @@ -246,7 +248,7 @@ void Transliterator::transliterate(Replaceable& text) const { * pending transliterations, clients should call {@link * #finishKeyboardTransliteration} after the last call to this * method has been made. - * + * * @param text the buffer holding transliterated and untransliterated text * @param index an array of three integers. * @@ -450,7 +452,7 @@ void Transliterator::filteredTransliterate(Replaceable& text, // the changes made during the pass, extends the pass by one code point, // and tries again. //---------------------------------------------------------------------- - + // globalLimit is the limit value for the entire operation. We // set index.limit to the end of each unfiltered run before // calling handleTransliterate(), so we need to maintain the real @@ -458,7 +460,7 @@ void Transliterator::filteredTransliterate(Replaceable& text, // update globalLimit for insertions or deletions that have // happened. int32_t globalLimit = index.limit; - + // If there is a non-null filter, then break the input text up. Say the // input text has the form: // xxxabcxxdefxx @@ -468,7 +470,7 @@ void Transliterator::filteredTransliterate(Replaceable& text, // Each pass through the loop consumes a run of filtered // characters (which are ignored) and a subsequent run of // unfiltered characters (which are transliterated). - + for (;;) { if (filter != NULL) { @@ -504,7 +506,7 @@ void Transliterator::filteredTransliterate(Replaceable& text, // complete the transliteration for this run. UBool isIncrementalRun = (index.limit < globalLimit ? FALSE : incremental); - + int32_t delta; // Implement rollback. To understand the need for rollback, @@ -928,15 +930,15 @@ Transliterator::createInstance(const UnicodeString& ID, status = U_INVALID_ID; return NULL; } - + TransliteratorIDParser::instantiateList(list, status); if (U_FAILURE(status)) { return NULL; } - + U_ASSERT(list.size() > 0); Transliterator* t = NULL; - + if (list.size() > 1 || canonID.indexOf(ID_DELIM) >= 0) { // [NOTE: If it's a compoundID, we instantiate a CompoundTransliterator even if it only // has one child transliterator. This is so that toRules() will return the right thing @@ -1112,8 +1114,8 @@ Transliterator::createFromRules(const UnicodeString& ID, data, TRUE); // Check if NULL before adding it to transliterators to avoid future usage of NULL pointer. if (temprbt == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return t; + status = U_MEMORY_ALLOCATION_ERROR; + return t; } transliterators.addElement(temprbt, status); } @@ -1279,7 +1281,7 @@ void Transliterator::_registerAlias(const UnicodeString& aliasID, /** * Unregisters a transliterator or class. This may be either * a system transliterator or a user transliterator or class. - * + * * @param ID the ID of the transliterator or class * @see #registerInstance @@ -1483,13 +1485,13 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) { * is the ID of the system transliterator being defined. These * are public IDs enumerated by Transliterator.getAvailableIDs(), * unless the second field is "internal". - * + * * is a ResourceReader resource name. Currently these refer * to file names under com/ibm/text/resources. This string is passed * directly to ResourceReader, together with . - * + * * is either "FORWARD" or "REVERSE". - * + * * is a string to be passed directly to * Transliterator.getInstance(). The returned Transliterator object * then has its ID changed to and is returned. @@ -1528,10 +1530,10 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) { // 'file' or 'internal'; // row[2]=resource, row[3]=direction { - + resString = ures_getStringByKey(res, "resource", &len, &status); UBool visible = (type == 0x0066 /*f*/); - UTransDirection dir = + UTransDirection dir = (ures_getUnicodeStringByKey(res, "direction", &status).charAt(0) == 0x0046 /*F*/) ? UTRANS_FORWARD : UTRANS_REVERSE; @@ -1557,7 +1559,7 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) { // Manually add prototypes that the system knows about to the // cache. This is how new non-rule-based transliterators are // added to the system. - + // This is to allow for null pointer check NullTransliterator* tempNullTranslit = new NullTransliterator(); LowercaseTransliterator* tempLowercaseTranslit = new LowercaseTransliterator(); @@ -1571,7 +1573,7 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) { #endif // Check for null pointers if (tempNullTranslit == NULL || tempLowercaseTranslit == NULL || tempUppercaseTranslit == NULL || - tempTitlecaseTranslit == NULL || tempUnicodeTranslit == NULL || + tempTitlecaseTranslit == NULL || tempUnicodeTranslit == NULL || #if !UCONFIG_NO_BREAK_ITERATION tempBreakTranslit == NULL || #endif diff --git a/deps/icu-small/source/i18n/transreg.cpp b/deps/icu-small/source/i18n/transreg.cpp index 2f7e7d56fa7b55..7c29f25f53ceb5 100644 --- a/deps/icu-small/source/i18n/transreg.cpp +++ b/deps/icu-small/source/i18n/transreg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2014, International Business Machines @@ -566,7 +568,7 @@ Transliterator* TransliteratorRegistry::reget(const UnicodeString& ID, if (entry->entryType == TransliteratorEntry::RULES_FORWARD || entry->entryType == TransliteratorEntry::RULES_REVERSE || entry->entryType == TransliteratorEntry::LOCALE_RULES) { - + if (parser.idBlockVector.isEmpty() && parser.dataVector.isEmpty()) { entry->u.data = 0; entry->entryType = TransliteratorEntry::ALIAS; @@ -954,17 +956,17 @@ void TransliteratorRegistry::registerSTV(const UnicodeString& source, // We add the variant string. If it is the special "no variant" // string, that is, the empty string, we add it at position zero. if (!variants->contains((void*) &variant)) { - UnicodeString *tempus; // Used for null pointer check. + UnicodeString *tempus; // Used for null pointer check. if (variant.length() > 0) { - tempus = new UnicodeString(variant); - if (tempus != NULL) { - variants->addElement(tempus, status); - } + tempus = new UnicodeString(variant); + if (tempus != NULL) { + variants->addElement(tempus, status); + } } else { - tempus = new UnicodeString(); // = NO_VARIANT - if (tempus != NULL) { - variants->insertElementAt(tempus, 0, status); - } + tempus = new UnicodeString(); // = NO_VARIANT + if (tempus != NULL) { + variants->insertElementAt(tempus, 0, status); + } } } } @@ -1150,12 +1152,12 @@ TransliteratorEntry* TransliteratorRegistry::find(const UnicodeString& ID) { * Top-level find method. Attempt to find a source-target/variant in * either the dynamic or the static (locale resource) store. Perform * fallback. - * + * * Lookup sequence for ss_SS_SSS-tt_TT_TTT/v: * * ss_SS_SSS-tt_TT_TTT/v -- in hashtable * ss_SS_SSS-tt_TT_TTT/v -- in ss_SS_SSS (no fallback) - * + * * repeat with t = tt_TT_TTT, tt_TT, tt, and tscript * * ss_SS_SSS-t/ * @@ -1170,7 +1172,7 @@ TransliteratorEntry* TransliteratorRegistry::find(const UnicodeString& ID) { TransliteratorEntry* TransliteratorRegistry::find(UnicodeString& source, UnicodeString& target, UnicodeString& variant) { - + TransliteratorSpec src(source); TransliteratorSpec trg(target); TransliteratorEntry* entry; @@ -1188,13 +1190,13 @@ TransliteratorEntry* TransliteratorRegistry::find(UnicodeString& source, } if (variant.length() != 0) { - + // Seek exact match in hashtable entry = findInDynamicStore(src, trg, variant); if (entry != 0) { return entry; } - + // Seek exact match in locale resources entry = findInStaticStore(src, trg, variant); if (entry != 0) { @@ -1210,7 +1212,7 @@ TransliteratorEntry* TransliteratorRegistry::find(UnicodeString& source, if (entry != 0) { return entry; } - + // Seek match in locale resources entry = findInStaticStore(src, trg, NO_VARIANT); if (entry != 0) { @@ -1279,8 +1281,8 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID UVector* rbts = new UVector(entry->u.dataVector->size(), status); // Check for null pointer if (rbts == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } int32_t passNumber = 1; for (int32_t i = 0; U_SUCCESS(status) && i < entry->u.dataVector->size(); i++) { @@ -1316,7 +1318,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID // we modify the registry with the parsed data and retry. { TransliteratorParser parser(status); - + // We use the file name, taken from another resource bundle // 2-d array at static init time, as a locale language. We're // just using the locale mechanism to map through to a file @@ -1325,7 +1327,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID //UResourceBundle *bundle = ures_openDirect(0, ch, &status); UnicodeString rules = entry->stringArg; //ures_close(bundle); - + //if (U_FAILURE(status)) { // We have a failure of some kind. Remove the ID from the // registry so we don't keep trying. NOTE: This will throw off @@ -1335,7 +1337,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID // or unrecoverable run time memory failures. // remove(ID); //} else { - + // If the status indicates a failure, then we don't have any // rules -- there is probably an installation error. The list // in the root locale should correspond to all the installed diff --git a/deps/icu-small/source/i18n/transreg.h b/deps/icu-small/source/i18n/transreg.h index e01f89ad0705e6..334963f8d1e9c2 100644 --- a/deps/icu-small/source/i18n/transreg.h +++ b/deps/icu-small/source/i18n/transreg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/tridpars.cpp b/deps/icu-small/source/i18n/tridpars.cpp index a58d58550d427d..f5d2799f9f1a28 100644 --- a/deps/icu-small/source/i18n/tridpars.cpp +++ b/deps/icu-small/source/i18n/tridpars.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines Corporation @@ -151,10 +153,10 @@ TransliteratorIDParser::parseSingleID(const UnicodeString& id, int32_t& pos, single = specsToID(specsA, FORWARD); // Null pointers check if (b == NULL || single == NULL) { - delete b; - delete single; - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + delete b; + delete single; + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } single->canonID.append(OPEN_REV) .append(b->canonID).append(CLOSE_REV); @@ -167,10 +169,10 @@ TransliteratorIDParser::parseSingleID(const UnicodeString& id, int32_t& pos, single = specsToID(specsB, FORWARD); // Check for null pointer. if (a == NULL || single == NULL) { - delete a; - delete single; - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + delete a; + delete single; + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } single->canonID.append(OPEN_REV) .append(a->canonID).append(CLOSE_REV); @@ -191,8 +193,8 @@ TransliteratorIDParser::parseSingleID(const UnicodeString& id, int32_t& pos, } // Check for NULL pointer if (single == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } single->filter = specsA->filter; } @@ -661,16 +663,16 @@ void TransliteratorIDParser::registerSpecialInverse(const UnicodeString& target, UnicodeString *tempus = new UnicodeString(inverseTarget); // Used for null pointer check before usage. if (tempus == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; + status = U_MEMORY_ALLOCATION_ERROR; + return; } SPECIAL_INVERSES->put(target, tempus, status); if (bidirectional) { - tempus = new UnicodeString(target); - if (tempus == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } + tempus = new UnicodeString(target); + if (tempus == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } SPECIAL_INVERSES->put(inverseTarget, tempus, status); } } @@ -902,14 +904,14 @@ Transliterator* TransliteratorIDParser::createBasicInstance(const UnicodeString& /** * Initialize static memory. Called through umtx_initOnce only. */ -void TransliteratorIDParser::init(UErrorCode &status) { +void U_CALLCONV TransliteratorIDParser::init(UErrorCode &status) { U_ASSERT(SPECIAL_INVERSES == NULL); ucln_i18n_registerCleanup(UCLN_I18N_TRANSLITERATOR, utrans_transliterator_cleanup); SPECIAL_INVERSES = new Hashtable(TRUE, status); if (SPECIAL_INVERSES == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; + status = U_MEMORY_ALLOCATION_ERROR; + return; } SPECIAL_INVERSES->setValueDeleter(uprv_deleteUObject); } diff --git a/deps/icu-small/source/i18n/tridpars.h b/deps/icu-small/source/i18n/tridpars.h index 88620fd18daf78..63cfdff61e7f92 100644 --- a/deps/icu-small/source/i18n/tridpars.h +++ b/deps/icu-small/source/i18n/tridpars.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (c) 2002-2010, International Business Machines Corporation * @@ -59,7 +61,7 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta * 'sawSource' is true if there was an explicit source in the * parsed id. If there was no explicit source, then an implied * source of ANY is returned and 'sawSource' is set to false. - * + * * 'filter' is the parsed filter pattern, or null if there was no * filter. */ @@ -220,7 +222,7 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta * @param source the given source. * @param target the given target. * @param variant the given variant - * @param isSourcePresent If TRUE then the source is present. + * @param isSourcePresent If TRUE then the source is present. * If the source is not present, ANY will be * given as the source, and isSourcePresent will be null * @return an array of 4 strings: source, target, variant, and @@ -349,7 +351,7 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta /** * Initialize static memory. */ - static void init(UErrorCode &status); + static void U_CALLCONV init(UErrorCode &status); friend class SingleID; }; diff --git a/deps/icu-small/source/i18n/tzfmt.cpp b/deps/icu-small/source/i18n/tzfmt.cpp index e03b1a88aae044..161675a5d16dae 100644 --- a/deps/icu-small/source/i18n/tzfmt.cpp +++ b/deps/icu-small/source/i18n/tzfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and @@ -97,7 +99,7 @@ static const UChar ALT_GMT_STRINGS[][4] = { }; // Order of GMT offset pattern parsing, *_HMS must be evaluated first -// because *_HM is most likely a substring of *_HMS +// because *_HM is most likely a substring of *_HMS static const int32_t PARSE_GMT_OFFSET_TYPES[] = { UTZFMT_PAT_POSITIVE_HMS, UTZFMT_PAT_NEGATIVE_HMS, @@ -287,7 +289,7 @@ inline uint8_t GMTOffsetField::getWidth() const { return fWidth; } - + inline const UChar* GMTOffsetField::getPatternText(void) const { return fText; @@ -307,7 +309,7 @@ U_CDECL_END // ------------------------------------------------------------------ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeZoneFormat) -TimeZoneFormat::TimeZoneFormat(const Locale& locale, UErrorCode& status) +TimeZoneFormat::TimeZoneFormat(const Locale& locale, UErrorCode& status) : fLocale(locale), fTimeZoneNames(NULL), fTimeZoneGenericNames(NULL), fDefParseOptionFlags(0), fTZDBTimeZoneNames(NULL) { @@ -543,7 +545,7 @@ TimeZoneFormat::getDefaultParseOptions(void) const { } -UnicodeString& +UnicodeString& TimeZoneFormat::getGMTPattern(UnicodeString& pattern) const { return pattern.setTo(fGMTPattern); } @@ -817,7 +819,7 @@ TimeZoneFormat::parse(UTimeZoneFormatStyle style, const UnicodeString& text, Par int32_t offset; // Styles using localized GMT format as fallback - UBool fallbackLocalizedGMT = + UBool fallbackLocalizedGMT = (style == UTZFMT_STYLE_SPECIFIC_LONG || style == UTZFMT_STYLE_GENERIC_LONG || style == UTZFMT_STYLE_GENERIC_LOCATION); UBool fallbackShortLocalizedGMT = (style == UTZFMT_STYLE_SPECIFIC_SHORT || style == UTZFMT_STYLE_GENERIC_SHORT); @@ -2703,7 +2705,7 @@ class ZoneIdMatchHandler : public TextTrieMapSearchResultHandler { const UChar* fID; }; -ZoneIdMatchHandler::ZoneIdMatchHandler() +ZoneIdMatchHandler::ZoneIdMatchHandler() : fLen(0), fID(NULL) { } @@ -2769,7 +2771,7 @@ TimeZoneFormat::parseZoneID(const UnicodeString& text, ParsePosition& pos, Unico if (U_SUCCESS(status)) { LocalPointer handler(new ZoneIdMatchHandler()); - gZoneIdTrie->search(text, start, handler.getAlias(), status); + gZoneIdTrie->search(text, start, handler.getAlias(), status); len = handler->getMatchLen(); if (len > 0) { tzID.setTo(handler->getID(), -1); @@ -2819,7 +2821,7 @@ TimeZoneFormat::parseShortZoneID(const UnicodeString& text, ParsePosition& pos, if (U_SUCCESS(status)) { LocalPointer handler(new ZoneIdMatchHandler()); - gShortZoneIdTrie->search(text, start, handler.getAlias(), status); + gShortZoneIdTrie->search(text, start, handler.getAlias(), status); len = handler->getMatchLen(); if (len > 0) { tzID.setTo(handler->getID(), -1); diff --git a/deps/icu-small/source/i18n/tzgnames.cpp b/deps/icu-small/source/i18n/tzgnames.cpp index 127ea58deb9e90..4fc726ea54de9b 100644 --- a/deps/icu-small/source/i18n/tzgnames.cpp +++ b/deps/icu-small/source/i18n/tzgnames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/tzgnames.h b/deps/icu-small/source/i18n/tzgnames.h index ebe9b76ba5ba91..61a098478fa2ee 100644 --- a/deps/icu-small/source/i18n/tzgnames.h +++ b/deps/icu-small/source/i18n/tzgnames.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines Corporation and * @@ -8,7 +10,7 @@ #define __TZGNAMES_H /** - * \file + * \file * \brief C API: Time zone generic names classe */ diff --git a/deps/icu-small/source/i18n/tznames.cpp b/deps/icu-small/source/i18n/tznames.cpp index db1ce0ddeec0cc..6aefd13b536fc0 100644 --- a/deps/icu-small/source/i18n/tznames.cpp +++ b/deps/icu-small/source/i18n/tznames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and * @@ -116,6 +118,9 @@ class TimeZoneNamesDelegate : public TimeZoneNames { UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const; + void loadAllDisplayNames(UErrorCode& status); + void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; private: TimeZoneNamesDelegate(); @@ -278,6 +283,16 @@ TimeZoneNamesDelegate::getExemplarLocationName(const UnicodeString& tzID, Unicod return fTZnamesCacheEntry->names->getExemplarLocationName(tzID, name); } +void +TimeZoneNamesDelegate::loadAllDisplayNames(UErrorCode& status) { + fTZnamesCacheEntry->names->loadAllDisplayNames(status); +} + +void +TimeZoneNamesDelegate::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const { + fTZnamesCacheEntry->names->getDisplayNames(tzID, types, numTypes, date, dest, status); +} + TimeZoneNames::MatchInfoCollection* TimeZoneNamesDelegate::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const { return fTZnamesCacheEntry->names->find(text, start, types, status); @@ -330,6 +345,29 @@ TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, return name; } +// Empty default implementation, to be overriden in tznames_impl.cpp. +void +TimeZoneNames::loadAllDisplayNames(UErrorCode& /*status*/) { +} + +// A default, lightweight implementation of getDisplayNames. +// Overridden in tznames_impl.cpp. +void +TimeZoneNames::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const { + if (U_FAILURE(status)) { return; } + if (tzID.isEmpty()) { return; } + UnicodeString mzID; + for (int i = 0; i < numTypes; i++) { + getTimeZoneDisplayName(tzID, types[i], dest[i]); + if (dest[i].isEmpty()) { + if (mzID.isEmpty()) { + getMetaZoneID(tzID, date, mzID); + } + getMetaZoneDisplayName(mzID, types[i], dest[i]); + } + } +} + struct MatchInfo : UMemory { UTimeZoneNameType nameType; diff --git a/deps/icu-small/source/i18n/tznames_impl.cpp b/deps/icu-small/source/i18n/tznames_impl.cpp index 0f50232a3ca64c..f52d5c23ac350f 100644 --- a/deps/icu-small/source/i18n/tznames_impl.cpp +++ b/deps/icu-small/source/i18n/tznames_impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2016, International Business Machines Corporation and @@ -21,6 +23,7 @@ #include "cstring.h" #include "uassert.h" #include "mutex.h" +#include "resource.h" #include "uresimp.h" #include "ureslocs.h" #include "zonemeta.h" @@ -28,7 +31,6 @@ #include "uvector.h" #include "olsontz.h" - U_NAMESPACE_BEGIN #define ZID_KEY_MAX 128 @@ -37,25 +39,16 @@ U_NAMESPACE_BEGIN static const char gZoneStrings[] = "zoneStrings"; static const char gMZPrefix[] = "meta:"; -static const char* KEYS[] = {"lg", "ls", "ld", "sg", "ss", "sd"}; -static const int32_t KEYS_SIZE = UPRV_LENGTHOF(KEYS); - -static const char gEcTag[] = "ec"; - -static const char EMPTY[] = ""; // place holder for empty ZNames/TZNames - -static const UTimeZoneNameType ALL_NAME_TYPES[] = { - UTZNM_LONG_GENERIC, UTZNM_LONG_STANDARD, UTZNM_LONG_DAYLIGHT, - UTZNM_SHORT_GENERIC, UTZNM_SHORT_STANDARD, UTZNM_SHORT_DAYLIGHT, - UTZNM_EXEMPLAR_LOCATION, - UTZNM_UNKNOWN // unknown as the last one -}; +static const char EMPTY[] = ""; // place holder for empty ZNames +static const char DUMMY_LOADER[] = ""; // place holder for dummy ZNamesLoader +static const UChar NO_NAME[] = { 0 }; // for empty no-fallback time zone names // stuff for TZDBTimeZoneNames static const char* TZDBNAMES_KEYS[] = {"ss", "sd"}; static const int32_t TZDBNAMES_KEYS_SIZE = UPRV_LENGTHOF(TZDBNAMES_KEYS); static UMutex gTZDBNamesMapLock = U_MUTEX_INITIALIZER; +static UMutex gDataMutex = U_MUTEX_INITIALIZER; static UHashtable* gTZDBNamesMap = NULL; static icu::UInitOnce gTZDBNamesMapInitOnce = U_INITONCE_INITIALIZER; @@ -63,6 +56,20 @@ static icu::UInitOnce gTZDBNamesMapInitOnce = U_INITONCE_INITIALIZER; static TextTrieMap* gTZDBNamesTrie = NULL; static icu::UInitOnce gTZDBNamesTrieInitOnce = U_INITONCE_INITIALIZER; +// The order in which strings are stored may be different than the order in the public enum. +enum UTimeZoneNameTypeIndex { + UTZNM_INDEX_UNKNOWN = -1, + UTZNM_INDEX_EXEMPLAR_LOCATION, + UTZNM_INDEX_LONG_GENERIC, + UTZNM_INDEX_LONG_STANDARD, + UTZNM_INDEX_LONG_DAYLIGHT, + UTZNM_INDEX_SHORT_GENERIC, + UTZNM_INDEX_SHORT_STANDARD, + UTZNM_INDEX_SHORT_DAYLIGHT, + UTZNM_INDEX_COUNT +}; +static const UChar* EMPTY_NAMES[UTZNM_INDEX_COUNT] = {0,0,0,0,0,0,0}; + U_CDECL_BEGIN static UBool U_CALLCONV tzdbTimeZoneNames_cleanup(void) { if (gTZDBNamesMap != NULL) { @@ -81,6 +88,26 @@ static UBool U_CALLCONV tzdbTimeZoneNames_cleanup(void) { } U_CDECL_END +/** + * ZNameInfo stores zone name information in the trie + */ +struct ZNameInfo { + UTimeZoneNameType type; + const UChar* tzID; + const UChar* mzID; +}; + +/** + * ZMatchInfo stores zone name match information used by find method + */ +struct ZMatchInfo { + const ZNameInfo* znameInfo; + int32_t matchLength; +}; + +// Helper functions +static void mergeTimeZoneKey(const UnicodeString& mzID, char* result); + #define DEFAULT_CHARACTERNODE_CAPACITY 1 // --------------------------------------------------- @@ -143,7 +170,7 @@ TextTrieMapSearchResultHandler::~TextTrieMapSearchResultHandler(){ // TextTrieMap class implementation // --------------------------------------------------- TextTrieMap::TextTrieMap(UBool ignoreCase, UObjectDeleter *valueDeleter) -: fIgnoreCase(ignoreCase), fNodes(NULL), fNodesCapacity(0), fNodesCount(0), +: fIgnoreCase(ignoreCase), fNodes(NULL), fNodesCapacity(0), fNodesCount(0), fLazyContents(NULL), fIsEmpty(TRUE), fValueDeleter(valueDeleter) { } @@ -158,7 +185,7 @@ TextTrieMap::~TextTrieMap() { if (fValueDeleter) { fValueDeleter(fLazyContents->elementAt(i+1)); } - } + } delete fLazyContents; } } @@ -175,14 +202,14 @@ int32_t TextTrieMap::isEmpty() const { // We defer actually building the TextTrieMap node structure until the first time a // search is performed. put() simply saves the parameters in case we do // eventually need to build it. -// +// void TextTrieMap::put(const UnicodeString &key, void *value, ZNStringPool &sp, UErrorCode &status) { const UChar *s = sp.get(key, status); put(s, value, status); } -// This method is for designed for a persistent key, such as string key stored in +// This method is designed for a persistent key, such as string key stored in // resource bundle. void TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { @@ -194,11 +221,22 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { } } if (U_FAILURE(status)) { + if (fValueDeleter) { + fValueDeleter((void*) key); + } return; } U_ASSERT(fLazyContents != NULL); + UChar *s = const_cast(key); fLazyContents->addElement(s, status); + if (U_FAILURE(status)) { + if (fValueDeleter) { + fValueDeleter((void*) key); + } + return; + } + fLazyContents->addElement(value, status); } @@ -207,6 +245,10 @@ TextTrieMap::putImpl(const UnicodeString &key, void *value, UErrorCode &status) if (fNodes == NULL) { fNodesCapacity = 512; fNodes = (CharacterNode *)uprv_malloc(fNodesCapacity * sizeof(CharacterNode)); + if (fNodes == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } fNodes[0].clear(); // Init root node. fNodesCount = 1; } @@ -329,7 +371,7 @@ void TextTrieMap::buildTrie(UErrorCode &status) { putImpl(keyString, val, status); } delete fLazyContents; - fLazyContents = NULL; + fLazyContents = NULL; } } @@ -418,9 +460,9 @@ ZNStringPool::ZNStringPool(UErrorCode &status) { return; } - fHash = uhash_open(uhash_hashUChars /* keyHash */, - uhash_compareUChars /* keyComp */, - uhash_compareUChars /* valueComp */, + fHash = uhash_open(uhash_hashUChars /* keyHash */, + uhash_compareUChars /* keyComp */, + uhash_compareUChars /* valueComp */, &status); if (U_FAILURE(status)) { return; @@ -469,13 +511,13 @@ const UChar *ZNStringPool::get(const UChar *s, UErrorCode &status) { } fChunks->fNext = oldChunk; } - + UChar *destString = &fChunks->fStrings[fChunks->fLimit]; u_strcpy(destString, s); fChunks->fLimit += (length + 1); uhash_put(fHash, destString, destString, &status); return destString; -} +} // @@ -498,7 +540,7 @@ const UChar *ZNStringPool::adopt(const UChar * s, UErrorCode &status) { return s; } - + const UChar *ZNStringPool::get(const UnicodeString &s, UErrorCode &status) { UnicodeString &nonConstStr = const_cast(s); return this->get(nonConstStr.getTerminatedBuffer(), status); @@ -517,196 +559,283 @@ void ZNStringPool::freeze() { } -// --------------------------------------------------- -// ZNames - names common for time zone and meta zone -// --------------------------------------------------- +/** + * This class stores name data for a meta zone or time zone. + */ class ZNames : public UMemory { -public: - virtual ~ZNames(); +private: + friend class TimeZoneNamesImpl; + + static UTimeZoneNameTypeIndex getTZNameTypeIndex(UTimeZoneNameType type) { + switch(type) { + case UTZNM_EXEMPLAR_LOCATION: return UTZNM_INDEX_EXEMPLAR_LOCATION; + case UTZNM_LONG_GENERIC: return UTZNM_INDEX_LONG_GENERIC; + case UTZNM_LONG_STANDARD: return UTZNM_INDEX_LONG_STANDARD; + case UTZNM_LONG_DAYLIGHT: return UTZNM_INDEX_LONG_DAYLIGHT; + case UTZNM_SHORT_GENERIC: return UTZNM_INDEX_SHORT_GENERIC; + case UTZNM_SHORT_STANDARD: return UTZNM_INDEX_SHORT_STANDARD; + case UTZNM_SHORT_DAYLIGHT: return UTZNM_INDEX_SHORT_DAYLIGHT; + default: return UTZNM_INDEX_UNKNOWN; + } + } + static UTimeZoneNameType getTZNameType(UTimeZoneNameTypeIndex index) { + switch(index) { + case UTZNM_INDEX_EXEMPLAR_LOCATION: return UTZNM_EXEMPLAR_LOCATION; + case UTZNM_INDEX_LONG_GENERIC: return UTZNM_LONG_GENERIC; + case UTZNM_INDEX_LONG_STANDARD: return UTZNM_LONG_STANDARD; + case UTZNM_INDEX_LONG_DAYLIGHT: return UTZNM_LONG_DAYLIGHT; + case UTZNM_INDEX_SHORT_GENERIC: return UTZNM_SHORT_GENERIC; + case UTZNM_INDEX_SHORT_STANDARD: return UTZNM_SHORT_STANDARD; + case UTZNM_INDEX_SHORT_DAYLIGHT: return UTZNM_SHORT_DAYLIGHT; + default: return UTZNM_UNKNOWN; + } + } - static ZNames* createInstance(UResourceBundle* rb, const char* key); - virtual const UChar* getName(UTimeZoneNameType type); + const UChar* fNames[UTZNM_INDEX_COUNT]; + UBool fDidAddIntoTrie; -protected: - ZNames(const UChar** names); - static const UChar** loadData(UResourceBundle* rb, const char* key); + // Whether we own the location string, if computed rather than loaded from a bundle. + // A meta zone names instance never has an exemplar location string. + UBool fOwnsLocationName; + + ZNames(const UChar* names[], const UChar* locationName) + : fDidAddIntoTrie(FALSE) { + uprv_memcpy(fNames, names, sizeof(fNames)); + if (locationName != NULL) { + fOwnsLocationName = TRUE; + fNames[UTZNM_INDEX_EXEMPLAR_LOCATION] = locationName; + } else { + fOwnsLocationName = FALSE; + } + } + +public: + ~ZNames() { + if (fOwnsLocationName) { + const UChar* locationName = fNames[UTZNM_INDEX_EXEMPLAR_LOCATION]; + U_ASSERT(locationName != NULL); + uprv_free((void*) locationName); + } + } private: - const UChar** fNames; -}; + static void* createMetaZoneAndPutInCache(UHashtable* cache, const UChar* names[], + const UnicodeString& mzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(names != NULL); -ZNames::ZNames(const UChar** names) -: fNames(names) { -} + // Use the persistent ID as the resource key, so we can + // avoid duplications. + // TODO: Is there a more efficient way, like intern() in Java? + void* key = (void*) ZoneMeta::findMetaZoneID(mzID); + void* value; + if (uprv_memcmp(names, EMPTY_NAMES, sizeof(EMPTY_NAMES)) == 0) { + value = (void*) EMPTY; + } else { + value = (void*) (new ZNames(names, NULL)); + if (value == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + } + uhash_put(cache, key, value, &status); + return value; + } + + static void* createTimeZoneAndPutInCache(UHashtable* cache, const UChar* names[], + const UnicodeString& tzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(names != NULL); + + // If necessary, compute the location name from the time zone name. + UChar* locationName = NULL; + if (names[UTZNM_INDEX_EXEMPLAR_LOCATION] == NULL) { + UnicodeString locationNameUniStr; + TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, locationNameUniStr); + + // Copy the computed location name to the heap + if (locationNameUniStr.length() > 0) { + const UChar* buff = locationNameUniStr.getTerminatedBuffer(); + int32_t len = sizeof(UChar) * (locationNameUniStr.length() + 1); + locationName = (UChar*) uprv_malloc(len); + if (locationName == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memcpy(locationName, buff, len); + } + } -ZNames::~ZNames() { - if (fNames != NULL) { - uprv_free(fNames); + // Use the persistent ID as the resource key, so we can + // avoid duplications. + // TODO: Is there a more efficient way, like intern() in Java? + void* key = (void*) ZoneMeta::findTimeZoneID(tzID); + void* value = (void*) (new ZNames(names, locationName)); + if (value == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uhash_put(cache, key, value, &status); + return value; } -} -ZNames* -ZNames::createInstance(UResourceBundle* rb, const char* key) { - const UChar** names = loadData(rb, key); - if (names == NULL) { - // No names data available - return NULL; + const UChar* getName(UTimeZoneNameType type) const { + UTimeZoneNameTypeIndex index = getTZNameTypeIndex(type); + return index >= 0 ? fNames[index] : NULL; } - return new ZNames(names); -} -const UChar* -ZNames::getName(UTimeZoneNameType type) { - if (fNames == NULL) { - return NULL; - } - const UChar *name = NULL; - switch(type) { - case UTZNM_LONG_GENERIC: - name = fNames[0]; - break; - case UTZNM_LONG_STANDARD: - name = fNames[1]; - break; - case UTZNM_LONG_DAYLIGHT: - name = fNames[2]; - break; - case UTZNM_SHORT_GENERIC: - name = fNames[3]; - break; - case UTZNM_SHORT_STANDARD: - name = fNames[4]; - break; - case UTZNM_SHORT_DAYLIGHT: - name = fNames[5]; - break; - case UTZNM_EXEMPLAR_LOCATION: // implemeted by subclass - default: - name = NULL; + void addAsMetaZoneIntoTrie(const UChar* mzID, TextTrieMap& trie, UErrorCode& status) { + addNamesIntoTrie(mzID, NULL, trie, status); } - return name; -} - -const UChar** -ZNames::loadData(UResourceBundle* rb, const char* key) { - if (rb == NULL || key == NULL || *key == 0) { - return NULL; + void addAsTimeZoneIntoTrie(const UChar* tzID, TextTrieMap& trie, UErrorCode& status) { + addNamesIntoTrie(NULL, tzID, trie, status); } - UErrorCode status = U_ZERO_ERROR; - const UChar **names = NULL; + void addNamesIntoTrie(const UChar* mzID, const UChar* tzID, TextTrieMap& trie, + UErrorCode& status) { + if (U_FAILURE(status)) { return; } + if (fDidAddIntoTrie) { return; } + fDidAddIntoTrie = TRUE; - UResourceBundle* rbTable = NULL; - rbTable = ures_getByKeyWithFallback(rb, key, rbTable, &status); - if (U_SUCCESS(status)) { - names = (const UChar **)uprv_malloc(sizeof(const UChar*) * KEYS_SIZE); - if (names != NULL) { - UBool isEmpty = TRUE; - for (int32_t i = 0; i < KEYS_SIZE; i++) { - status = U_ZERO_ERROR; - int32_t len = 0; - const UChar *value = ures_getStringByKeyWithFallback(rbTable, KEYS[i], &len, &status); - if (U_FAILURE(status) || len == 0) { - names[i] = NULL; - } else { - names[i] = value; - isEmpty = FALSE; + for (int32_t i = 0; i < UTZNM_INDEX_COUNT; i++) { + const UChar* name = fNames[i]; + if (name != NULL) { + ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); + if (nameinfo == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + nameinfo->mzID = mzID; + nameinfo->tzID = tzID; + nameinfo->type = getTZNameType((UTimeZoneNameTypeIndex)i); + trie.put(name, nameinfo, status); // trie.put() takes ownership of the key + if (U_FAILURE(status)) { + return; } - } - if (isEmpty) { - // No need to keep the names array - uprv_free(names); - names = NULL; } } } - ures_close(rbTable); - return names; -} -// --------------------------------------------------- -// TZNames - names for a time zone -// --------------------------------------------------- -class TZNames : public ZNames { public: - virtual ~TZNames(); - - static TZNames* createInstance(UResourceBundle* rb, const char* key, const UnicodeString& tzID); - virtual const UChar* getName(UTimeZoneNameType type); - -private: - TZNames(const UChar** names); - const UChar* fLocationName; - UChar* fLocationNameOwned; + struct ZNamesLoader; }; -TZNames::TZNames(const UChar** names) -: ZNames(names), fLocationName(NULL), fLocationNameOwned(NULL) { -} +struct ZNames::ZNamesLoader : public ResourceSink { + const UChar *names[UTZNM_INDEX_COUNT]; -TZNames::~TZNames() { - if (fLocationNameOwned) { - uprv_free(fLocationNameOwned); + ZNamesLoader() { + clear(); } -} + virtual ~ZNamesLoader(); -const UChar* -TZNames::getName(UTimeZoneNameType type) { - if (type == UTZNM_EXEMPLAR_LOCATION) { - return fLocationName; + /** Reset for loading another set of names. */ + void clear() { + uprv_memcpy(names, EMPTY_NAMES, sizeof(names)); } - return ZNames::getName(type); -} -TZNames* -TZNames::createInstance(UResourceBundle* rb, const char* key, const UnicodeString& tzID) { - if (rb == NULL || key == NULL || *key == 0) { - return NULL; + void loadMetaZone(const UResourceBundle* zoneStrings, const UnicodeString& mzID, UErrorCode& errorCode) { + if (U_FAILURE(errorCode)) { return; } + + char key[ZID_KEY_MAX + 1]; + mergeTimeZoneKey(mzID, key); + + loadNames(zoneStrings, key, errorCode); } - const UChar** names = loadData(rb, key); - const UChar* locationName = NULL; - UChar* locationNameOwned = NULL; + void loadTimeZone(const UResourceBundle* zoneStrings, const UnicodeString& tzID, UErrorCode& errorCode) { + // Replace "/" with ":". + UnicodeString uKey(tzID); + for (int32_t i = 0; i < uKey.length(); i++) { + if (uKey.charAt(i) == (UChar)0x2F) { + uKey.setCharAt(i, (UChar)0x3A); + } + } - UErrorCode status = U_ZERO_ERROR; - int32_t len = 0; + char key[ZID_KEY_MAX + 1]; + uKey.extract(0, uKey.length(), key, sizeof(key), US_INV); + + loadNames(zoneStrings, key, errorCode); + } - UResourceBundle* table = ures_getByKeyWithFallback(rb, key, NULL, &status); - locationName = ures_getStringByKeyWithFallback(table, gEcTag, &len, &status); - // ignore missing resource here - status = U_ZERO_ERROR; + void loadNames(const UResourceBundle* zoneStrings, const char* key, UErrorCode& errorCode) { + U_ASSERT(zoneStrings != NULL); + U_ASSERT(key != NULL); + U_ASSERT(key[0] != '\0'); - ures_close(table); + UErrorCode localStatus = U_ZERO_ERROR; + clear(); + ures_getAllItemsWithFallback(zoneStrings, key, *this, localStatus); - if (locationName == NULL) { - UnicodeString tmpName; - int32_t tmpNameLen = 0; - TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, tmpName); - tmpNameLen = tmpName.length(); + // Ignore errors, but propogate possible warnings. + if (U_SUCCESS(localStatus)) { + errorCode = localStatus; + } + } + + void setNameIfEmpty(const char* key, const ResourceValue* value, UErrorCode& errorCode) { + UTimeZoneNameTypeIndex type = nameTypeFromKey(key); + if (type == UTZNM_INDEX_UNKNOWN) { return; } + if (names[type] == NULL) { + int32_t length; + // 'NO_NAME' indicates internally that this field should remain empty. It will be + // replaced by 'NULL' in getNames() + names[type] = (value == NULL) ? NO_NAME : value->getString(length, errorCode); + } + } - if (tmpNameLen > 0) { - locationNameOwned = (UChar*) uprv_malloc(sizeof(UChar) * (tmpNameLen + 1)); - if (locationNameOwned) { - tmpName.extract(locationNameOwned, tmpNameLen + 1, status); - locationName = locationNameOwned; + virtual void put(const char* key, ResourceValue& value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable namesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; namesTable.getKeyAndValue(i, key, value); ++i) { + if (value.isNoInheritanceMarker()) { + setNameIfEmpty(key, NULL, errorCode); + } else { + setNameIfEmpty(key, &value, errorCode); } } } - TZNames* tznames = NULL; - if (locationName != NULL || names != NULL) { - tznames = new TZNames(names); - if (tznames == NULL) { - if (locationNameOwned) { - uprv_free(locationNameOwned); + static UTimeZoneNameTypeIndex nameTypeFromKey(const char *key) { + char c0, c1; + if ((c0 = key[0]) == 0 || (c1 = key[1]) == 0 || key[2] != 0) { + return UTZNM_INDEX_UNKNOWN; + } + if (c0 == 'l') { + return c1 == 'g' ? UTZNM_INDEX_LONG_GENERIC : + c1 == 's' ? UTZNM_INDEX_LONG_STANDARD : + c1 == 'd' ? UTZNM_INDEX_LONG_DAYLIGHT : UTZNM_INDEX_UNKNOWN; + } else if (c0 == 's') { + return c1 == 'g' ? UTZNM_INDEX_SHORT_GENERIC : + c1 == 's' ? UTZNM_INDEX_SHORT_STANDARD : + c1 == 'd' ? UTZNM_INDEX_SHORT_DAYLIGHT : UTZNM_INDEX_UNKNOWN; + } else if (c0 == 'e' && c1 == 'c') { + return UTZNM_INDEX_EXEMPLAR_LOCATION; + } + return UTZNM_INDEX_UNKNOWN; + } + + /** + * Returns an array of names. It is the caller's responsibility to copy the data into a + * permanent location, as the returned array is owned by the loader instance and may be + * cleared or leave scope. + * + * This is different than Java, where the array will no longer be modified and null + * may be returned. + */ + const UChar** getNames() { + // Remove 'NO_NAME' references in the array and replace with 'NULL' + for (int32_t i = 0; i < UTZNM_INDEX_COUNT; ++i) { + if (names[i] == NO_NAME) { + names[i] = NULL; } } - tznames->fLocationName = locationName; - tznames->fLocationNameOwned = locationNameOwned; + return names; } +}; + +ZNames::ZNamesLoader::~ZNamesLoader() {} - return tznames; -} // --------------------------------------------------- // The meta zone ID enumeration class @@ -731,11 +860,11 @@ class MetaZoneIDsEnumeration : public StringEnumeration { UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MetaZoneIDsEnumeration) -MetaZoneIDsEnumeration::MetaZoneIDsEnumeration() +MetaZoneIDsEnumeration::MetaZoneIDsEnumeration() : fLen(0), fPos(0), fMetaZoneIDs(NULL), fLocalVector(NULL) { } -MetaZoneIDsEnumeration::MetaZoneIDsEnumeration(const UVector& mzIDs) +MetaZoneIDsEnumeration::MetaZoneIDsEnumeration(const UVector& mzIDs) : fPos(0), fMetaZoneIDs(&mzIDs), fLocalVector(NULL) { fLen = fMetaZoneIDs->size(); } @@ -772,25 +901,6 @@ MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration() { } } -U_CDECL_BEGIN -/** - * ZNameInfo stores zone name information in the trie - */ -typedef struct ZNameInfo { - UTimeZoneNameType type; - const UChar* tzID; - const UChar* mzID; -} ZNameInfo; - -/** - * ZMatchInfo stores zone name match information used by find method - */ -typedef struct ZMatchInfo { - const ZNameInfo* znameInfo; - int32_t matchLength; -} ZMatchInfo; -U_CDECL_END - // --------------------------------------------------- // ZNameSearchHandler @@ -809,7 +919,7 @@ class ZNameSearchHandler : public TextTrieMapSearchResultHandler { TimeZoneNames::MatchInfoCollection* fResults; }; -ZNameSearchHandler::ZNameSearchHandler(uint32_t types) +ZNameSearchHandler::ZNameSearchHandler(uint32_t types) : fTypes(types), fMaxMatchLen(0), fResults(NULL) { } @@ -883,16 +993,7 @@ U_CDECL_BEGIN static void U_CALLCONV deleteZNames(void *obj) { if (obj != EMPTY) { - delete (ZNames *)obj; - } -} -/** - * Deleter for TZNames - */ -static void U_CALLCONV -deleteTZNames(void *obj) { - if (obj != EMPTY) { - delete (TZNames *)obj; + delete (ZNames*) obj; } } @@ -906,14 +1007,13 @@ deleteZNameInfo(void *obj) { U_CDECL_END -static UMutex gLock = U_MUTEX_INITIALIZER; - TimeZoneNamesImpl::TimeZoneNamesImpl(const Locale& locale, UErrorCode& status) : fLocale(locale), fZoneStrings(NULL), fTZNamesMap(NULL), fMZNamesMap(NULL), fNamesTrieFullyLoaded(FALSE), + fNamesFullyLoaded(FALSE), fNamesTrie(TRUE, deleteZNameInfo) { initialize(locale, status); } @@ -943,14 +1043,14 @@ TimeZoneNamesImpl::initialize(const Locale& locale, UErrorCode& status) { } uhash_setValueDeleter(fMZNamesMap, deleteZNames); - uhash_setValueDeleter(fTZNamesMap, deleteTZNames); + uhash_setValueDeleter(fTZNamesMap, deleteZNames); // no key deleters for name maps // preload zone strings for the default zone TimeZone *tz = TimeZone::createDefault(); const UChar *tzID = ZoneMeta::getCanonicalCLDRID(*tz); if (tzID != NULL) { - loadStrings(UnicodeString(tzID)); + loadStrings(UnicodeString(tzID), status); } delete tz; @@ -962,20 +1062,15 @@ TimeZoneNamesImpl::initialize(const Locale& locale, UErrorCode& status) { * except initializer. */ void -TimeZoneNamesImpl::loadStrings(const UnicodeString& tzCanonicalID) { - loadTimeZoneNames(tzCanonicalID); +TimeZoneNamesImpl::loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status) { + loadTimeZoneNames(tzCanonicalID, status); + LocalPointer mzIDs(getAvailableMetaZoneIDs(tzCanonicalID, status)); + if (U_FAILURE(status)) { return; } + U_ASSERT(!mzIDs.isNull()); - UErrorCode status = U_ZERO_ERROR; - StringEnumeration *mzIDs = getAvailableMetaZoneIDs(tzCanonicalID, status); - if (U_SUCCESS(status) && mzIDs != NULL) { - const UnicodeString *mzID; - while ((mzID = mzIDs->snext(status))) { - if (U_FAILURE(status)) { - break; - } - loadMetaZoneNames(*mzID); - } - delete mzIDs; + const UnicodeString *mzID; + while ((mzID = mzIDs->snext(status)) && U_SUCCESS(status)) { + loadMetaZoneNames(*mzID, status); } } @@ -1096,7 +1191,6 @@ TimeZoneNamesImpl::_getReferenceZoneID(const UnicodeString& mzID, const char* re return tzID; } - UnicodeString& TimeZoneNamesImpl::getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, @@ -1109,11 +1203,12 @@ TimeZoneNamesImpl::getMetaZoneDisplayName(const UnicodeString& mzID, ZNames *znames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - znames = nonConstThis->loadMetaZoneNames(mzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + znames = nonConstThis->loadMetaZoneNames(mzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (znames != NULL) { const UChar* s = znames->getName(type); @@ -1131,14 +1226,15 @@ TimeZoneNamesImpl::getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNa return name; } - TZNames *tznames = NULL; + ZNames *tznames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - tznames = nonConstThis->loadTimeZoneNames(tzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + tznames = nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (tznames != NULL) { const UChar *s = tznames->getName(type); @@ -1153,14 +1249,15 @@ UnicodeString& TimeZoneNamesImpl::getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const { name.setToBogus(); // cleanup result. const UChar* locName = NULL; - TZNames *tznames = NULL; + ZNames *tznames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - tznames = nonConstThis->loadTimeZoneNames(tzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + tznames = nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (tznames != NULL) { locName = tznames->getName(UTZNM_EXEMPLAR_LOCATION); @@ -1193,215 +1290,386 @@ static void mergeTimeZoneKey(const UnicodeString& mzID, char* result) { * This method updates the cache and must be called with a lock */ ZNames* -TimeZoneNamesImpl::loadMetaZoneNames(const UnicodeString& mzID) { - if (mzID.length() > (ZID_KEY_MAX - MZ_PREFIX_LEN)) { - return NULL; - } +TimeZoneNamesImpl::loadMetaZoneNames(const UnicodeString& mzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(mzID.length() <= ZID_KEY_MAX - MZ_PREFIX_LEN); - ZNames *znames = NULL; - - UErrorCode status = U_ZERO_ERROR; UChar mzIDKey[ZID_KEY_MAX + 1]; mzID.extract(mzIDKey, ZID_KEY_MAX + 1, status); - U_ASSERT(status == U_ZERO_ERROR); // already checked length above + U_ASSERT(U_SUCCESS(status)); // already checked length above mzIDKey[mzID.length()] = 0; - void *cacheVal = uhash_get(fMZNamesMap, mzIDKey); - if (cacheVal == NULL) { - char key[ZID_KEY_MAX + 1]; - mergeTimeZoneKey(mzID, key); - znames = ZNames::createInstance(fZoneStrings, key); - - if (znames == NULL) { - cacheVal = (void *)EMPTY; - } else { - cacheVal = znames; - } - // Use the persistent ID as the resource key, so we can - // avoid duplications. - const UChar* newKey = ZoneMeta::findMetaZoneID(mzID); - if (newKey != NULL) { - uhash_put(fMZNamesMap, (void *)newKey, cacheVal, &status); - if (U_FAILURE(status)) { - if (znames != NULL) { - delete znames; - znames = NULL; - } - } else if (znames != NULL) { - // put the name info into the trie - for (int32_t i = 0; ALL_NAME_TYPES[i] != UTZNM_UNKNOWN; i++) { - const UChar* name = znames->getName(ALL_NAME_TYPES[i]); - if (name != NULL) { - ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); - if (nameinfo != NULL) { - nameinfo->type = ALL_NAME_TYPES[i]; - nameinfo->tzID = NULL; - nameinfo->mzID = newKey; - fNamesTrie.put(name, nameinfo, status); - } - } - } - } - - } else { - // Should never happen with a valid input - if (znames != NULL) { - // It's not possible that we get a valid ZNames with unknown ID. - // But just in case.. - delete znames; - znames = NULL; - } - } - } else if (cacheVal != EMPTY) { - znames = (ZNames *)cacheVal; + void* mznames = uhash_get(fMZNamesMap, mzIDKey); + if (mznames == NULL) { + ZNames::ZNamesLoader loader; + loader.loadMetaZone(fZoneStrings, mzID, status); + mznames = ZNames::createMetaZoneAndPutInCache(fMZNamesMap, loader.getNames(), mzID, status); + if (U_FAILURE(status)) { return NULL; } } - return znames; + if (mznames != EMPTY) { + return (ZNames*)mznames; + } else { + return NULL; + } } /* * This method updates the cache and must be called with a lock */ -TZNames* -TimeZoneNamesImpl::loadTimeZoneNames(const UnicodeString& tzID) { - if (tzID.length() > ZID_KEY_MAX) { - return NULL; - } - - TZNames *tznames = NULL; +ZNames* +TimeZoneNamesImpl::loadTimeZoneNames(const UnicodeString& tzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(tzID.length() <= ZID_KEY_MAX); - UErrorCode status = U_ZERO_ERROR; UChar tzIDKey[ZID_KEY_MAX + 1]; int32_t tzIDKeyLen = tzID.extract(tzIDKey, ZID_KEY_MAX + 1, status); - U_ASSERT(status == U_ZERO_ERROR); // already checked length above + U_ASSERT(U_SUCCESS(status)); // already checked length above tzIDKey[tzIDKeyLen] = 0; - void *cacheVal = uhash_get(fTZNamesMap, tzIDKey); - if (cacheVal == NULL) { - char key[ZID_KEY_MAX + 1]; - UErrorCode status = U_ZERO_ERROR; - // Replace "/" with ":". - UnicodeString uKey(tzID); - for (int32_t i = 0; i < uKey.length(); i++) { - if (uKey.charAt(i) == (UChar)0x2F) { - uKey.setCharAt(i, (UChar)0x3A); - } - } - uKey.extract(0, uKey.length(), key, sizeof(key), US_INV); - tznames = TZNames::createInstance(fZoneStrings, key, tzID); - - if (tznames == NULL) { - cacheVal = (void *)EMPTY; - } else { - cacheVal = tznames; - } - // Use the persistent ID as the resource key, so we can - // avoid duplications. - const UChar* newKey = ZoneMeta::findTimeZoneID(tzID); - if (newKey != NULL) { - uhash_put(fTZNamesMap, (void *)newKey, cacheVal, &status); - if (U_FAILURE(status)) { - if (tznames != NULL) { - delete tznames; - tznames = NULL; - } - } else if (tznames != NULL) { - // put the name info into the trie - for (int32_t i = 0; ALL_NAME_TYPES[i] != UTZNM_UNKNOWN; i++) { - const UChar* name = tznames->getName(ALL_NAME_TYPES[i]); - if (name != NULL) { - ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); - if (nameinfo != NULL) { - nameinfo->type = ALL_NAME_TYPES[i]; - nameinfo->tzID = newKey; - nameinfo->mzID = NULL; - fNamesTrie.put(name, nameinfo, status); - } - } - } - } - } else { - // Should never happen with a valid input - if (tznames != NULL) { - // It's not possible that we get a valid TZNames with unknown ID. - // But just in case.. - delete tznames; - tznames = NULL; - } - } - } else if (cacheVal != EMPTY) { - tznames = (TZNames *)cacheVal; + void *tznames = uhash_get(fTZNamesMap, tzIDKey); + if (tznames == NULL) { + ZNames::ZNamesLoader loader; + loader.loadTimeZone(fZoneStrings, tzID, status); + tznames = ZNames::createTimeZoneAndPutInCache(fTZNamesMap, loader.getNames(), tzID, status); + if (U_FAILURE(status)) { return NULL; } } - return tznames; + // tznames is never EMPTY + return (ZNames*)tznames; } TimeZoneNames::MatchInfoCollection* TimeZoneNamesImpl::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const { ZNameSearchHandler handler(types); + TimeZoneNames::MatchInfoCollection* matches; + TimeZoneNamesImpl* nonConstThis = const_cast(this); - TimeZoneNamesImpl *nonConstThis = const_cast(this); - - umtx_lock(&gLock); + // Synchronize so that data is not loaded multiple times. + // TODO: Consider more fine-grained synchronization. { - fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); - } - umtx_unlock(&gLock); + Mutex lock(&gDataMutex); - if (U_FAILURE(status)) { - return NULL; + // First try of lookup. + matches = doFind(handler, text, start, status); + if (U_FAILURE(status)) { return NULL; } + if (matches != NULL) { + return matches; + } + + // All names are not yet loaded into the trie. + // We may have loaded names for formatting several time zones, + // and might be parsing one of those. + // Populate the parsing trie from all of the already-loaded names. + nonConstThis->addAllNamesIntoTrie(status); + + // Second try of lookup. + matches = doFind(handler, text, start, status); + if (U_FAILURE(status)) { return NULL; } + if (matches != NULL) { + return matches; + } + + // There are still some names we haven't loaded into the trie yet. + // Load everything now. + nonConstThis->internalLoadAllDisplayNames(status); + nonConstThis->addAllNamesIntoTrie(status); + nonConstThis->fNamesTrieFullyLoaded = TRUE; + if (U_FAILURE(status)) { return NULL; } + + // Third try: we must return this one. + return doFind(handler, text, start, status); } +} + +TimeZoneNames::MatchInfoCollection* +TimeZoneNamesImpl::doFind(ZNameSearchHandler& handler, + const UnicodeString& text, int32_t start, UErrorCode& status) const { + + fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); + if (U_FAILURE(status)) { return NULL; } int32_t maxLen = 0; TimeZoneNames::MatchInfoCollection* matches = handler.getMatches(maxLen); if (matches != NULL && ((maxLen == (text.length() - start)) || fNamesTrieFullyLoaded)) { - // perfect match + // perfect match, or no more names available return matches; } - delete matches; + return NULL; +} - // All names are not yet loaded into the trie - umtx_lock(&gLock); - { - if (!fNamesTrieFullyLoaded) { - const UnicodeString *id; +// Caller must synchronize. +void TimeZoneNamesImpl::addAllNamesIntoTrie(UErrorCode& status) { + if (U_FAILURE(status)) return; + int32_t pos; + const UHashElement* element; - // load strings for all zones - StringEnumeration *tzIDs = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, status); - if (U_SUCCESS(status)) { - while ((id = tzIDs->snext(status))) { - if (U_FAILURE(status)) { - break; + pos = UHASH_FIRST; + while ((element = uhash_nextElement(fMZNamesMap, &pos)) != NULL) { + if (element->value.pointer == EMPTY) { continue; } + UChar* mzID = (UChar*) element->key.pointer; + ZNames* znames = (ZNames*) element->value.pointer; + znames->addAsMetaZoneIntoTrie(mzID, fNamesTrie, status); + if (U_FAILURE(status)) { return; } + } + + pos = UHASH_FIRST; + while ((element = uhash_nextElement(fTZNamesMap, &pos)) != NULL) { + if (element->value.pointer == EMPTY) { continue; } + UChar* tzID = (UChar*) element->key.pointer; + ZNames* znames = (ZNames*) element->value.pointer; + znames->addAsTimeZoneIntoTrie(tzID, fNamesTrie, status); + if (U_FAILURE(status)) { return; } + } +} + +U_CDECL_BEGIN +static void U_CALLCONV +deleteZNamesLoader(void* obj) { + if (obj == DUMMY_LOADER) { return; } + const ZNames::ZNamesLoader* loader = (const ZNames::ZNamesLoader*) obj; + delete loader; +} +U_CDECL_END + +struct TimeZoneNamesImpl::ZoneStringsLoader : public ResourceSink { + TimeZoneNamesImpl& tzn; + UHashtable* keyToLoader; + + ZoneStringsLoader(TimeZoneNamesImpl& _tzn, UErrorCode& status) + : tzn(_tzn) { + keyToLoader = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status); + if (U_FAILURE(status)) { return; } + uhash_setKeyDeleter(keyToLoader, uprv_free); + uhash_setValueDeleter(keyToLoader, deleteZNamesLoader); + } + virtual ~ZoneStringsLoader(); + + void* createKey(const char* key, UErrorCode& status) { + int32_t len = sizeof(char) * (uprv_strlen(key) + 1); + char* newKey = (char*) uprv_malloc(len); + if (newKey == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memcpy(newKey, key, len); + newKey[len-1] = '\0'; + return (void*) newKey; + } + + UBool isMetaZone(const char* key) { + return (uprv_strlen(key) >= MZ_PREFIX_LEN && uprv_memcmp(key, gMZPrefix, MZ_PREFIX_LEN) == 0); + } + + UnicodeString mzIDFromKey(const char* key) { + return UnicodeString(key + MZ_PREFIX_LEN, uprv_strlen(key) - MZ_PREFIX_LEN, US_INV); + } + + UnicodeString tzIDFromKey(const char* key) { + UnicodeString tzID(key, -1, US_INV); + // Replace all colons ':' with slashes '/' + for (int i=0; ivalue.pointer == DUMMY_LOADER) { continue; } + ZNames::ZNamesLoader* loader = (ZNames::ZNamesLoader*) element->value.pointer; + char* key = (char*) element->key.pointer; + + if (isMetaZone(key)) { + UnicodeString mzID = mzIDFromKey(key); + ZNames::createMetaZoneAndPutInCache(tzn.fMZNamesMap, loader->getNames(), mzID, status); + } else { + UnicodeString tzID = tzIDFromKey(key); + ZNames::createTimeZoneAndPutInCache(tzn.fTZNamesMap, loader->getNames(), tzID, status); + } + if (U_FAILURE(status)) { return; } + } + } + + void consumeNamesTable(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &status) { + if (U_FAILURE(status)) { return; } + + void* loader = uhash_get(keyToLoader, key); + if (loader == NULL) { + if (isMetaZone(key)) { + UnicodeString mzID = mzIDFromKey(key); + void* cacheVal = uhash_get(tzn.fMZNamesMap, mzID.getTerminatedBuffer()); + if (cacheVal != NULL) { + // We have already loaded the names for this meta zone. + loader = (void*) DUMMY_LOADER; + } else { + loader = (void*) new ZNames::ZNamesLoader(); + if (loader == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + } else { + UnicodeString tzID = tzIDFromKey(key); + void* cacheVal = uhash_get(tzn.fTZNamesMap, tzID.getTerminatedBuffer()); + if (cacheVal != NULL) { + // We have already loaded the names for this time zone. + loader = (void*) DUMMY_LOADER; + } else { + loader = (void*) new ZNames::ZNamesLoader(); + if (loader == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; } - // loadStrings also load related metazone strings - nonConstThis->loadStrings(*id); } } - if (tzIDs != NULL) { - delete tzIDs; + + void* newKey = createKey(key, status); + if (U_FAILURE(status)) { + deleteZNamesLoader(loader); + return; } - if (U_SUCCESS(status)) { - nonConstThis->fNamesTrieFullyLoaded = TRUE; + + uhash_put(keyToLoader, newKey, loader, &status); + if (U_FAILURE(status)) { return; } + } + + if (loader != DUMMY_LOADER) { + // Let the ZNamesLoader consume the names table. + ((ZNames::ZNamesLoader*)loader)->put(key, value, noFallback, status); + } + } + + virtual void put(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &status) { + ResourceTable timeZonesTable = value.getTable(status); + if (U_FAILURE(status)) { return; } + for (int32_t i = 0; timeZonesTable.getKeyAndValue(i, key, value); ++i) { + U_ASSERT(!value.isNoInheritanceMarker()); + if (value.getType() == URES_TABLE) { + consumeNamesTable(key, value, noFallback, status); + } else { + // Ignore fields that aren't tables (e.g., fallbackFormat and regionFormatStandard). + // All time zone fields are tables. } + if (U_FAILURE(status)) { return; } } } - umtx_unlock(&gLock); +}; - if (U_FAILURE(status)) { - return NULL; +// Virtual destructors must be defined out of line. +TimeZoneNamesImpl::ZoneStringsLoader::~ZoneStringsLoader() { + uhash_close(keyToLoader); +} + +void TimeZoneNamesImpl::loadAllDisplayNames(UErrorCode& status) { + if (U_FAILURE(status)) return; + + { + Mutex lock(&gDataMutex); + internalLoadAllDisplayNames(status); } +} + +void TimeZoneNamesImpl::getDisplayNames(const UnicodeString& tzID, + const UTimeZoneNameType types[], int32_t numTypes, + UDate date, UnicodeString dest[], UErrorCode& status) const { + if (U_FAILURE(status)) return; + + if (tzID.isEmpty()) { return; } + void* tznames = NULL; + void* mznames = NULL; + TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); + // Load the time zone strings { - // now try it again - fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); + Mutex lock(&gDataMutex); + tznames = (void*) nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return; } + } + U_ASSERT(tznames != NULL); + + // Load the values into the dest array + for (int i = 0; i < numTypes; i++) { + UTimeZoneNameType type = types[i]; + const UChar* name = ((ZNames*)tznames)->getName(type); + if (name == NULL) { + if (mznames == NULL) { + // Load the meta zone name + UnicodeString mzID; + getMetaZoneID(tzID, date, mzID); + if (mzID.isEmpty()) { + mznames = (void*) EMPTY; + } else { + // Load the meta zone strings + // Mutex is scoped to the "else" statement + Mutex lock(&gDataMutex); + mznames = (void*) nonConstThis->loadMetaZoneNames(mzID, status); + if (U_FAILURE(status)) { return; } + // Note: when the metazone doesn't exist, in Java, loadMetaZoneNames returns + // a dummy object instead of NULL. + if (mznames == NULL) { + mznames = (void*) EMPTY; + } + } + } + U_ASSERT(mznames != NULL); + if (mznames != EMPTY) { + name = ((ZNames*)mznames)->getName(type); + } + } + if (name != NULL) { + dest[i].setTo(TRUE, name, -1); + } else { + dest[i].setToBogus(); + } } - umtx_unlock(&gLock); +} - return handler.getMatches(maxLen); +// Caller must synchronize. +void TimeZoneNamesImpl::internalLoadAllDisplayNames(UErrorCode& status) { + if (!fNamesFullyLoaded) { + fNamesFullyLoaded = TRUE; + + ZoneStringsLoader loader(*this, status); + loader.load(status); + if (U_FAILURE(status)) { return; } + + const UnicodeString *id; + + // load strings for all zones + StringEnumeration *tzIDs = TimeZone::createTimeZoneIDEnumeration( + UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, status); + if (U_SUCCESS(status)) { + while ((id = tzIDs->snext(status))) { + if (U_FAILURE(status)) { + break; + } + UnicodeString copy(*id); + void* value = uhash_get(fTZNamesMap, copy.getTerminatedBuffer()); + if (value == NULL) { + // loadStrings also loads related metazone strings + loadStrings(*id, status); + } + } + } + if (tzIDs != NULL) { + delete tzIDs; + } + } } + + static const UChar gEtcPrefix[] = { 0x45, 0x74, 0x63, 0x2F }; // "Etc/" static const int32_t gEtcPrefixLen = 4; static const UChar gSystemVPrefix[] = { 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x56, 0x2F }; // "SystemV/ @@ -1554,7 +1822,7 @@ TZDBNames::createInstance(UResourceBundle* rb, const char* key) { if (regions != NULL) { char **p = regions; for (int32_t i = 0; i < numRegions; p++, i++) { - uprv_free(p); + uprv_free(*p); } uprv_free(regions); } @@ -1623,7 +1891,7 @@ class TZDBNameSearchHandler : public TextTrieMapSearchResultHandler { const char* fRegion; }; -TZDBNameSearchHandler::TZDBNameSearchHandler(uint32_t types, const char* region) +TZDBNameSearchHandler::TZDBNameSearchHandler(uint32_t types, const char* region) : fTypes(types), fMaxMatchLen(0), fResults(NULL), fRegion(region) { } @@ -1982,9 +2250,10 @@ TZDBTimeZoneNames::getMetaZoneNames(const UnicodeString& mzID, UErrorCode& statu } // Use the persistent ID as the resource key, so we can // avoid duplications. - const UChar* newKey = ZoneMeta::findMetaZoneID(mzID); + // TODO: Is there a more efficient way, like intern() in Java? + void* newKey = (void*) ZoneMeta::findMetaZoneID(mzID); if (newKey != NULL) { - uhash_put(gTZDBNamesMap, (void *)newKey, cacheVal, &status); + uhash_put(gTZDBNamesMap, newKey, cacheVal, &status); if (U_FAILURE(status)) { if (tzdbNames != NULL) { delete tzdbNames; diff --git a/deps/icu-small/source/i18n/tznames_impl.h b/deps/icu-small/source/i18n/tznames_impl.h index 5e5d96829e79ca..6b913bb6bf8c1b 100644 --- a/deps/icu-small/source/i18n/tznames_impl.h +++ b/deps/icu-small/source/i18n/tznames_impl.h @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* - * Copyright (C) 2011-2014, International Business Machines Corporation and * - * others. All Rights Reserved. * + * Copyright (C) 2011-2016, International Business Machines Corporation and + * others. All Rights Reserved. ******************************************************************************* */ @@ -159,8 +161,8 @@ class U_I18N_API TextTrieMap : public UMemory { class ZNames; -class TZNames; class TextTrieMap; +class ZNameSearchHandler; class TimeZoneNamesImpl : public TimeZoneNames { public: @@ -184,6 +186,9 @@ class TimeZoneNamesImpl : public TimeZoneNames { TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; + void loadAllDisplayNames(UErrorCode& status); + void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name); static StringEnumeration* _getAvailableMetaZoneIDs(UErrorCode& status); @@ -201,15 +206,23 @@ class TimeZoneNamesImpl : public TimeZoneNames { UHashtable* fMZNamesMap; UBool fNamesTrieFullyLoaded; + UBool fNamesFullyLoaded; TextTrieMap fNamesTrie; void initialize(const Locale& locale, UErrorCode& status); void cleanup(); - void loadStrings(const UnicodeString& tzCanonicalID); + void loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status); + + ZNames* loadMetaZoneNames(const UnicodeString& mzId, UErrorCode& status); + ZNames* loadTimeZoneNames(const UnicodeString& mzId, UErrorCode& status); + TimeZoneNames::MatchInfoCollection* doFind(ZNameSearchHandler& handler, + const UnicodeString& text, int32_t start, UErrorCode& status) const; + void addAllNamesIntoTrie(UErrorCode& errorCode); + + void internalLoadAllDisplayNames(UErrorCode& status); - ZNames* loadMetaZoneNames(const UnicodeString& mzId); - TZNames* loadTimeZoneNames(const UnicodeString& mzId); + struct ZoneStringsLoader; }; class TZDBNames; diff --git a/deps/icu-small/source/i18n/tzrule.cpp b/deps/icu-small/source/i18n/tzrule.cpp index 59e1f44c87d975..2cfd7ee285b5f6 100644 --- a/deps/icu-small/source/i18n/tzrule.cpp +++ b/deps/icu-small/source/i18n/tzrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2012, International Business Machines Corporation and @@ -180,7 +182,7 @@ const int32_t AnnualTimeZoneRule::MAX_YEAR = 0x7FFFFFFF; /* max signed int32 */ AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, - int32_t dstSavings, + int32_t dstSavings, const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear) @@ -190,7 +192,7 @@ AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString& name, AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, - int32_t dstSavings, + int32_t dstSavings, DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear) @@ -438,7 +440,7 @@ TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule& right) { UErrorCode status = U_ZERO_ERROR; initStartTimes(right.fStartTimes, right.fNumStartTimes, status); //TODO - status? - fTimeRuleType = right.fTimeRuleType; + fTimeRuleType = right.fTimeRuleType; } return *this; } @@ -624,3 +626,4 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ //eof + diff --git a/deps/icu-small/source/i18n/tztrans.cpp b/deps/icu-small/source/i18n/tztrans.cpp index 6e0ddf6d39b8aa..76e259c5aef672 100644 --- a/deps/icu-small/source/i18n/tztrans.cpp +++ b/deps/icu-small/source/i18n/tztrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/ucal.cpp b/deps/icu-small/source/i18n/ucal.cpp index c405701ece9121..ccca97bba86fb9 100644 --- a/deps/icu-small/source/i18n/ucal.cpp +++ b/deps/icu-small/source/i18n/ucal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2016, International Business Machines @@ -137,7 +139,7 @@ ucal_open( const UChar* zoneID, { if(U_FAILURE(*status)) return 0; - + TimeZone* zone = (zoneID==NULL) ? TimeZone::createDefault() : _createTimeZone(zoneID, len, status); @@ -167,12 +169,12 @@ ucal_close(UCalendar *cal) delete (Calendar*) cal; } -U_CAPI UCalendar* U_EXPORT2 +U_CAPI UCalendar* U_EXPORT2 ucal_clone(const UCalendar* cal, UErrorCode* status) { if(U_FAILURE(*status)) return 0; - + Calendar* res = ((Calendar*)cal)->clone(); if(res == 0) { @@ -257,7 +259,7 @@ ucal_getTimeZoneDisplayName(const UCalendar* cal, } U_CAPI UBool U_EXPORT2 -ucal_inDaylightTime( const UCalendar* cal, +ucal_inDaylightTime( const UCalendar* cal, UErrorCode* status ) { @@ -544,7 +546,7 @@ ucal_getLimit( const UCalendar* cal, } U_CAPI const char * U_EXPORT2 -ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status) +ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status) { if (cal == NULL) { if (U_SUCCESS(*status)) { @@ -641,7 +643,7 @@ static const UEnumeration defaultKeywordValues = { ulist_close_keyword_values_iterator, ulist_count_keyword_values, uenum_unextDefault, - ulist_next_keyword_value, + ulist_next_keyword_value, ulist_reset_keyword_values_iterator }; @@ -672,7 +674,7 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool // Resolve region char prefRegion[ULOC_COUNTRY_CAPACITY]; (void)ulocimp_getRegionForSupplementalData(locale, TRUE, prefRegion, sizeof(prefRegion), status); - + // Read preferred calendar values from supplementalData calendarPreference UResourceBundle *rb = ures_openDirect(NULL, "supplementalData", status); ures_getByKey(rb, "calendarPreferenceData", rb, status); @@ -742,7 +744,7 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool return en; } -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType type, UDate* transition, UErrorCode* status) { diff --git a/deps/icu-small/source/i18n/ucln_in.cpp b/deps/icu-small/source/i18n/ucln_in.cpp index 49e6b37fd0f6df..8139208cba747c 100644 --- a/deps/icu-small/source/i18n/ucln_in.cpp +++ b/deps/icu-small/source/i18n/ucln_in.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -28,7 +30,7 @@ static const char copyright[] = U_COPYRIGHT_STRING; static cleanupFunc *gCleanupFunctions[UCLN_I18N_COUNT]; -static UBool i18n_cleanup(void) +static UBool U_CALLCONV i18n_cleanup(void) { int32_t libType = UCLN_I18N_START; (void)copyright; /* Suppress unused variable warning with clang. */ @@ -60,3 +62,4 @@ void ucln_i18n_registerCleanup(ECleanupI18NType type, ucln_registerAutomaticCleanup(); #endif } + diff --git a/deps/icu-small/source/i18n/ucln_in.h b/deps/icu-small/source/i18n/ucln_in.h index 3fdec6db0d5686..b609fce0c2da5a 100644 --- a/deps/icu-small/source/i18n/ucln_in.h +++ b/deps/icu-small/source/i18n/ucln_in.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines @@ -24,8 +26,8 @@ as the functions are suppose to be called. It's usually best to have child dependencies called first. */ typedef enum ECleanupI18NType { UCLN_I18N_START = -1, - UCLN_I18N_IDENTIFIER_INFO, UCLN_I18N_SPOOF, + UCLN_I18N_SPOOFDATA, UCLN_I18N_TRANSLITERATOR, UCLN_I18N_REGEX, UCLN_I18N_ISLAMIC_CALENDAR, @@ -40,6 +42,7 @@ typedef enum ECleanupI18NType { UCLN_I18N_TIMEZONENAMES, UCLN_I18N_ZONEMETA, UCLN_I18N_TIMEZONE, + UCLN_I18N_DIGITLIST, UCLN_I18N_DECFMT, UCLN_I18N_NUMFMT, UCLN_I18N_ALLOWED_HOUR_FORMATS, diff --git a/deps/icu-small/source/i18n/ucol.cpp b/deps/icu-small/source/i18n/ucol.cpp index b950756d4075b1..4f83794dbf60fd 100644 --- a/deps/icu-small/source/i18n/ucol.cpp +++ b/deps/icu-small/source/i18n/ucol.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines @@ -366,7 +368,7 @@ ucol_getStrength(const UCollator *coll) return ucol_getAttribute(coll, UCOL_STRENGTH, &status); } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucol_getReorderCodes(const UCollator *coll, int32_t *dest, int32_t destCapacity, @@ -378,7 +380,7 @@ ucol_getReorderCodes(const UCollator *coll, return Collator::fromUCollator(coll)->getReorderCodes(dest, destCapacity, *status); } -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 ucol_setReorderCodes(UCollator* coll, const int32_t* reorderCodes, int32_t reorderCodesLength, @@ -390,7 +392,7 @@ ucol_setReorderCodes(UCollator* coll, Collator::fromUCollator(coll)->setReorderCodes(reorderCodes, reorderCodesLength, *status); } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucol_getEquivalentReorderCodes(int32_t reorderCode, int32_t* dest, int32_t destCapacity, diff --git a/deps/icu-small/source/i18n/ucol_imp.h b/deps/icu-small/source/i18n/ucol_imp.h index bfa2bb445af30d..7c9e8f68911209 100644 --- a/deps/icu-small/source/i18n/ucol_imp.h +++ b/deps/icu-small/source/i18n/ucol_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -76,7 +78,7 @@ class CollationLoader { const CollationCacheEntry *createCacheEntry(UErrorCode &errorCode); private: - static void loadRootRules(UErrorCode &errorCode); + static void U_CALLCONV loadRootRules(UErrorCode &errorCode); // The following members are used by loadTailoring() // and the cache callback. diff --git a/deps/icu-small/source/i18n/ucol_res.cpp b/deps/icu-small/source/i18n/ucol_res.cpp index d7e2ab427c9f4d..314b766ee6db02 100644 --- a/deps/icu-small/source/i18n/ucol_res.cpp +++ b/deps/icu-small/source/i18n/ucol_res.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1996-2014, International Business Machines +* Copyright (C) 1996-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucol_res.cpp @@ -34,11 +36,13 @@ #include "unicode/uloc.h" #include "unicode/unistr.h" #include "unicode/ures.h" +#include "charstr.h" #include "cmemory.h" #include "cstring.h" #include "collationdatareader.h" #include "collationroot.h" #include "collationtailoring.h" +#include "resource.h" #include "putilimp.h" #include "uassert.h" #include "ucln_in.h" @@ -74,9 +78,7 @@ ucol_res_cleanup() { return TRUE; } -U_CDECL_END - -void +void U_CALLCONV CollationLoader::loadRootRules(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } rootBundle = ures_open(U_ICUDATA_COLL, kRootLocaleName, &errorCode); @@ -90,6 +92,8 @@ CollationLoader::loadRootRules(UErrorCode &errorCode) { ucln_i18n_registerCleanup(UCLN_I18N_UCOL_RES, ucol_res_cleanup); } +U_CDECL_END + void CollationLoader::appendRootRules(UnicodeString &s) { UErrorCode errorCode = U_ZERO_ERROR; @@ -501,8 +505,6 @@ U_CAPI UCollator* ucol_open(const char *loc, UErrorCode *status) { - U_NAMESPACE_USE - UTRACE_ENTRY_OC(UTRACE_UCOL_OPEN); UTRACE_DATA1(UTRACE_INFO, "locale = \"%s\"", loc); UCollator *result = NULL; @@ -523,8 +525,6 @@ ucol_getDisplayName( const char *objLoc, int32_t resultLength, UErrorCode *status) { - U_NAMESPACE_USE - if(U_FAILURE(*status)) return -1; UnicodeString dst; if(!(result==NULL && resultLength==0)) { @@ -558,8 +558,6 @@ ucol_countAvailable() #if !UCONFIG_NO_SERVICE U_CAPI UEnumeration* U_EXPORT2 ucol_openAvailableLocales(UErrorCode *status) { - U_NAMESPACE_USE - // This is a wrapper over Collator::getAvailableLocales() if (U_FAILURE(*status)) { return NULL; @@ -615,119 +613,75 @@ static const UEnumeration defaultKeywordValues = { ulist_reset_keyword_values_iterator }; -#include - -U_CAPI UEnumeration* U_EXPORT2 -ucol_getKeywordValuesForLocale(const char* /*key*/, const char* locale, - UBool /*commonlyUsed*/, UErrorCode* status) { - /* Get the locale base name. */ - char localeBuffer[ULOC_FULLNAME_CAPACITY] = ""; - uloc_getBaseName(locale, localeBuffer, sizeof(localeBuffer), status); - - /* Create the 2 lists - * -values is the temp location for the keyword values - * -results hold the actual list used by the UEnumeration object - */ - UList *values = ulist_createEmptyList(status); - UList *results = ulist_createEmptyList(status); - UEnumeration *en = (UEnumeration *)uprv_malloc(sizeof(UEnumeration)); - if (U_FAILURE(*status) || en == NULL) { - if (en == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - } else { - uprv_free(en); - } - ulist_deleteList(values); - ulist_deleteList(results); - return NULL; - } +namespace { - memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); - en->context = results; - - /* Open the resource bundle for collation with the given locale. */ - UResourceBundle bundle, collations, collres, defres; - ures_initStackObject(&bundle); - ures_initStackObject(&collations); - ures_initStackObject(&collres); - ures_initStackObject(&defres); - - ures_openFillIn(&bundle, U_ICUDATA_COLL, localeBuffer, status); - - while (U_SUCCESS(*status)) { - ures_getByKey(&bundle, RESOURCE_NAME, &collations, status); - ures_resetIterator(&collations); - while (U_SUCCESS(*status) && ures_hasNext(&collations)) { - ures_getNextResource(&collations, &collres, status); - const char *key = ures_getKey(&collres); - /* If the key is default, get the string and store it in results list only - * if results list is empty. - */ - if (uprv_strcmp(key, "default") == 0) { - if (ulist_getListSize(results) == 0) { - char *defcoll = (char *)uprv_malloc(sizeof(char) * ULOC_KEYWORDS_CAPACITY); - int32_t defcollLength = ULOC_KEYWORDS_CAPACITY; - - ures_getNextResource(&collres, &defres, status); -#if U_CHARSET_FAMILY==U_ASCII_FAMILY - /* optimize - use the utf-8 string */ - ures_getUTF8String(&defres, defcoll, &defcollLength, TRUE, status); -#else - { - const UChar* defString = ures_getString(&defres, &defcollLength, status); - if(U_SUCCESS(*status)) { - if(defcollLength+1 > ULOC_KEYWORDS_CAPACITY) { - *status = U_BUFFER_OVERFLOW_ERROR; - } else { - u_UCharsToChars(defString, defcoll, defcollLength+1); - } - } +struct KeywordsSink : public ResourceSink { +public: + KeywordsSink(UErrorCode &errorCode) : + values(ulist_createEmptyList(&errorCode)), hasDefault(FALSE) {} + virtual ~KeywordsSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + ResourceTable collations = value.getTable(errorCode); + for (int32_t i = 0; collations.getKeyAndValue(i, key, value); ++i) { + UResType type = value.getType(); + if (type == URES_STRING) { + if (!hasDefault && uprv_strcmp(key, "default") == 0) { + CharString defcoll; + defcoll.appendInvariantChars(value.getUnicodeString(errorCode), errorCode); + if (U_SUCCESS(errorCode) && !defcoll.isEmpty()) { + char *ownedDefault = uprv_strdup(defcoll.data()); + if (ownedDefault == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + ulist_removeString(values, defcoll.data()); + ulist_addItemBeginList(values, ownedDefault, TRUE, &errorCode); + hasDefault = TRUE; } -#endif - - ulist_addItemBeginList(results, defcoll, TRUE, status); } - } else if (uprv_strncmp(key, "private-", 8) != 0) { - ulist_addItemEndList(values, key, FALSE, status); - } - } - - /* If the locale is "" this is root so exit. */ - if (uprv_strlen(localeBuffer) == 0) { - break; - } - /* Get the parent locale and open a new resource bundle. */ - uloc_getParent(localeBuffer, localeBuffer, sizeof(localeBuffer), status); - ures_openFillIn(&bundle, U_ICUDATA_COLL, localeBuffer, status); - } - - ures_close(&defres); - ures_close(&collres); - ures_close(&collations); - ures_close(&bundle); - - if (U_SUCCESS(*status)) { - char *value = NULL; - ulist_resetList(values); - while ((value = (char *)ulist_getNext(values)) != NULL) { - if (!ulist_containsString(results, value, (int32_t)uprv_strlen(value))) { - ulist_addItemEndList(results, value, FALSE, status); - if (U_FAILURE(*status)) { - break; + } else if (type == URES_TABLE && uprv_strncmp(key, "private-", 8) != 0) { + if (!ulist_containsString(values, key, (int32_t)uprv_strlen(key))) { + ulist_addItemEndList(values, key, FALSE, &errorCode); } } + if (U_FAILURE(errorCode)) { return; } } } + UList *values; + UBool hasDefault; +}; + +KeywordsSink::~KeywordsSink() { ulist_deleteList(values); +} - if (U_FAILURE(*status)){ - uenum_close(en); - en = NULL; - } else { - ulist_resetList(results); - } +} // namespace + +U_CAPI UEnumeration* U_EXPORT2 +ucol_getKeywordValuesForLocale(const char* /*key*/, const char* locale, + UBool /*commonlyUsed*/, UErrorCode* status) { + // Note: The parameter commonlyUsed is not used. + // The switch is in the method signature for consistency + // with other locale services. + + // Read available collation values from collation bundles. + LocalUResourceBundlePointer bundle(ures_open(U_ICUDATA_COLL, locale, status)); + KeywordsSink sink(*status); + ures_getAllItemsWithFallback(bundle.getAlias(), RESOURCE_NAME, sink, *status); + if (U_FAILURE(*status)) { return NULL; } + UEnumeration *en = (UEnumeration *)uprv_malloc(sizeof(UEnumeration)); + if (en == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); + en->context = sink.values; + sink.values = NULL; // Avoid deletion in the sink destructor. return en; } diff --git a/deps/icu-small/source/i18n/ucol_sit.cpp b/deps/icu-small/source/i18n/ucol_sit.cpp index 5d9e0d4546d765..491fc8529e86a4 100644 --- a/deps/icu-small/source/i18n/ucol_sit.cpp +++ b/deps/icu-small/source/i18n/ucol_sit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2016, International Business Machines @@ -138,7 +140,7 @@ ucol_sit_letterToAttributeValue(char letter, UErrorCode *status) { *status = U_ILLEGAL_ARGUMENT_ERROR; #ifdef UCOL_TRACE_SIT fprintf(stderr, "%s:%d: unknown letter %c: %s\n", __FILE__, __LINE__, letter, u_errorName(*status)); -#endif +#endif return UCOL_DEFAULT; } @@ -199,7 +201,7 @@ _processCollatorOption(CollatorSpec *spec, uint32_t option, const char* string, if((*(++string) != '_' && *string) || U_FAILURE(*status)) { #ifdef UCOL_TRACE_SIT fprintf(stderr, "%s:%d: unknown collator option at '%s': %s\n", __FILE__, __LINE__, string, u_errorName(*status)); -#endif +#endif *status = U_ILLEGAL_ARGUMENT_ERROR; } return string; @@ -225,7 +227,7 @@ readHexCodeUnit(const char **string, UErrorCode *status) *status = U_ILLEGAL_ARGUMENT_ERROR; #ifdef UCOL_TRACE_SIT fprintf(stderr, "%s:%d: Bad hex char at '%s': %s\n", __FILE__, __LINE__, *string, u_errorName(*status)); -#endif +#endif return 0; } result = (result << 4) | (UChar)value; @@ -237,7 +239,7 @@ readHexCodeUnit(const char **string, UErrorCode *status) *status = U_ILLEGAL_ARGUMENT_ERROR; #ifdef UCOL_TRACE_SIT fprintf(stderr, "%s:%d: Short (only %d digits, wanted 4) at '%s': %s\n", __FILE__, __LINE__, noDigits,*string, u_errorName(*status)); -#endif +#endif } return result; } diff --git a/deps/icu-small/source/i18n/ucoleitr.cpp b/deps/icu-small/source/i18n/ucoleitr.cpp index 6ccabded67c898..9c73afda19b61b 100644 --- a/deps/icu-small/source/i18n/ucoleitr.cpp +++ b/deps/icu-small/source/i18n/ucoleitr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines @@ -9,7 +11,7 @@ * Modification History: * * Date Name Description -* 02/15/2001 synwee Modified all methods to process its own function +* 02/15/2001 synwee Modified all methods to process its own function * instead of calling the equivalent c++ api (coleitr.h) * 2012-2014 markus Rewritten in C++ again. ******************************************************************************/ @@ -34,9 +36,9 @@ U_NAMESPACE_USE #define DEFAULT_BUFFER_SIZE 16 #define BUFFER_GROW 8 -#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) +#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (size_t)(count) * sizeof (src)[0]) -#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type)) +#define NEW_ARRAY(type, count) (type *) uprv_malloc((size_t)(count) * sizeof(type)) #define DELETE_ARRAY(array) uprv_free((void *) (array)) @@ -311,7 +313,7 @@ ucol_reset(UCollationElements *elems) } U_CAPI int32_t U_EXPORT2 -ucol_next(UCollationElements *elems, +ucol_next(UCollationElements *elems, UErrorCode *status) { if (U_FAILURE(*status)) { @@ -395,7 +397,7 @@ UCollationPCE::previousProcessed( // buffer raw CEs up to non-ignorable primary RCEBuffer rceb; int32_t ce; - + // **** do we need to reset rceb, or will it always be empty at this point **** do { high = cei->getOffset(); @@ -431,14 +433,14 @@ UCollationPCE::previousProcessed( finish: if (pceBuffer.isEmpty()) { // **** Is -1 the right value for ixLow, ixHigh? **** - if (ixLow != NULL) { - *ixLow = -1; - } - - if (ixHigh != NULL) { - *ixHigh = -1 - ; - } + if (ixLow != NULL) { + *ixLow = -1; + } + + if (ixHigh != NULL) { + *ixHigh = -1 + ; + } return UCOL_PROCESSED_NULLORDER; } @@ -509,19 +511,19 @@ ucol_setOffset(UCollationElements *elems, } U_CAPI int32_t U_EXPORT2 -ucol_primaryOrder (int32_t order) +ucol_primaryOrder (int32_t order) { return (order >> 16) & 0xffff; } U_CAPI int32_t U_EXPORT2 -ucol_secondaryOrder (int32_t order) +ucol_secondaryOrder (int32_t order) { return (order >> 8) & 0xff; } U_CAPI int32_t U_EXPORT2 -ucol_tertiaryOrder (int32_t order) +ucol_tertiaryOrder (int32_t order) { return order & 0xff; } diff --git a/deps/icu-small/source/i18n/ucsdet.cpp b/deps/icu-small/source/i18n/ucsdet.cpp index f0445427c706a6..dd69d9f548b78a 100644 --- a/deps/icu-small/source/i18n/ucsdet.cpp +++ b/deps/icu-small/source/i18n/ucsdet.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/udat.cpp b/deps/icu-small/source/i18n/udat.cpp index 7b65aa739a47d3..3b8a36a1b6e9e1 100644 --- a/deps/icu-small/source/i18n/udat.cpp +++ b/deps/icu-small/source/i18n/udat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines @@ -414,8 +416,8 @@ udat_setLenient( UDateFormat* fmt, } U_DRAFT UBool U_EXPORT2 -udat_getBooleanAttribute(const UDateFormat* fmt, - UDateFormatBooleanAttribute attr, +udat_getBooleanAttribute(const UDateFormat* fmt, + UDateFormatBooleanAttribute attr, UErrorCode* status) { if(U_FAILURE(*status)) return FALSE; @@ -424,9 +426,9 @@ udat_getBooleanAttribute(const UDateFormat* fmt, } U_DRAFT void U_EXPORT2 -udat_setBooleanAttribute(UDateFormat *fmt, - UDateFormatBooleanAttribute attr, - UBool newValue, +udat_setBooleanAttribute(UDateFormat *fmt, + UDateFormatBooleanAttribute attr, + UBool newValue, UErrorCode* status) { if(U_FAILURE(*status)) return; @@ -446,7 +448,7 @@ udat_setCalendar(UDateFormat* fmt, ((DateFormat*)fmt)->setCalendar(*((Calendar*)calendarToSet)); } -U_DRAFT const UNumberFormat* U_EXPORT2 +U_DRAFT const UNumberFormat* U_EXPORT2 udat_getNumberFormatForField(const UDateFormat* fmt, UChar field) { UErrorCode status = U_ZERO_ERROR; @@ -461,7 +463,7 @@ udat_getNumberFormat(const UDateFormat* fmt) return (const UNumberFormat*) ((DateFormat*)fmt)->getNumberFormat(); } -U_DRAFT void U_EXPORT2 +U_DRAFT void U_EXPORT2 udat_adoptNumberFormatForFields( UDateFormat* fmt, const UChar* fields, UNumberFormat* numberFormatToSet, @@ -469,7 +471,7 @@ udat_adoptNumberFormatForFields( UDateFormat* fmt, { verifyIsSimpleDateFormat(fmt, status); if (U_FAILURE(*status)) return; - + if (fields!=NULL) { UnicodeString overrideFields(fields); ((SimpleDateFormat*)fmt)->adoptNumberFormat(overrideFields, (NumberFormat*)numberFormatToSet, *status); @@ -576,7 +578,7 @@ udat_applyPattern( UDateFormat *format, if(U_FAILURE(status)) { return; } - + if(localized) ((SimpleDateFormat*)format)->applyLocalizedPattern(pat, status); else @@ -1195,7 +1197,7 @@ udat_setSymbols( UDateFormat *format, default: *status = U_UNSUPPORTED_ERROR; break; - + } } @@ -1246,7 +1248,7 @@ static void verifyIsRelativeDateFormat(const UDateFormat* fmt, UErrorCode *statu } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 udat_toPatternRelativeDate(const UDateFormat *fmt, UChar *result, int32_t resultLength, @@ -1271,7 +1273,7 @@ udat_toPatternRelativeDate(const UDateFormat *fmt, return datePattern.extract(result, resultLength, *status); } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 udat_toPatternRelativeTime(const UDateFormat *fmt, UChar *result, int32_t resultLength, @@ -1296,7 +1298,7 @@ udat_toPatternRelativeTime(const UDateFormat *fmt, return timePattern.extract(result, resultLength, *status); } -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 udat_applyPatternRelative(UDateFormat *format, const UChar *datePattern, int32_t datePatternLength, diff --git a/deps/icu-small/source/i18n/udateintervalformat.cpp b/deps/icu-small/source/i18n/udateintervalformat.cpp index ef6fc197c75680..e6eec44847453c 100644 --- a/deps/icu-small/source/i18n/udateintervalformat.cpp +++ b/deps/icu-small/source/i18n/udateintervalformat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/udatpg.cpp b/deps/icu-small/source/i18n/udatpg.cpp index d0bafa30a89cc5..d8824afdfc4adf 100644 --- a/deps/icu-small/source/i18n/udatpg.cpp +++ b/deps/icu-small/source/i18n/udatpg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/ufieldpositer.cpp b/deps/icu-small/source/i18n/ufieldpositer.cpp index 7f8688425d6fb6..b1c9c64805889c 100644 --- a/deps/icu-small/source/i18n/ufieldpositer.cpp +++ b/deps/icu-small/source/i18n/ufieldpositer.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/uitercollationiterator.cpp b/deps/icu-small/source/i18n/uitercollationiterator.cpp index f717282eac03b8..eb71725380a635 100644 --- a/deps/icu-small/source/i18n/uitercollationiterator.cpp +++ b/deps/icu-small/source/i18n/uitercollationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/uitercollationiterator.h b/deps/icu-small/source/i18n/uitercollationiterator.h index a64f88561b3b33..da9f8d34687d0b 100644 --- a/deps/icu-small/source/i18n/uitercollationiterator.h +++ b/deps/icu-small/source/i18n/uitercollationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/ulocdata.c b/deps/icu-small/source/i18n/ulocdata.c index fc84756d4c88f4..587a74339d4272 100644 --- a/deps/icu-small/source/i18n/ulocdata.c +++ b/deps/icu-small/source/i18n/ulocdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -102,8 +104,8 @@ U_CAPI USet* U_EXPORT2 ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn, uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status){ - static const char* const exemplarSetTypes[] = { "ExemplarCharacters", - "AuxExemplarCharacters", + static const char* const exemplarSetTypes[] = { "ExemplarCharacters", + "AuxExemplarCharacters", "ExemplarCharactersIndex", "ExemplarCharactersPunctuation"}; const UChar *exemplarChars = NULL; @@ -193,15 +195,15 @@ static UResourceBundle * measurementTypeBundleForLocale(const char *localeID, co char region[ULOC_COUNTRY_CAPACITY]; UResourceBundle *rb; UResourceBundle *measTypeBundle = NULL; - + ulocimp_getRegionForSupplementalData(localeID, TRUE, region, ULOC_COUNTRY_CAPACITY, status); - + rb = ures_openDirect(NULL, "supplementalData", status); ures_getByKey(rb, "measurementData", rb, status); if (rb != NULL) { UResourceBundle *measDataBundle = ures_getByKey(rb, region, NULL, status); if (U_SUCCESS(*status)) { - measTypeBundle = ures_getByKey(measDataBundle, measurementType, NULL, status); + measTypeBundle = ures_getByKey(measDataBundle, measurementType, NULL, status); } if (*status == U_MISSING_RESOURCE_ERROR) { *status = U_ZERO_ERROR; diff --git a/deps/icu-small/source/i18n/umsg.cpp b/deps/icu-small/source/i18n/umsg.cpp index d4a55818cdbe17..179ab84e5481e0 100644 --- a/deps/icu-small/source/i18n/umsg.cpp +++ b/deps/icu-small/source/i18n/umsg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -16,7 +18,7 @@ * * 08/5/2001 Ram Added C wrappers for C++ API. Changed implementation of old API's * Removed pattern parser. -* +* */ #include "unicode/utypes.h" @@ -65,7 +67,7 @@ u_formatMessage(const char *locale, ...) { va_list ap; - int32_t actLen; + int32_t actLen; //argument checking defered to subsequent method calls // start vararg processing va_start(ap, status); @@ -284,7 +286,7 @@ umsg_clone(const UMessageFormat *fmt, *status = U_MEMORY_ALLOCATION_ERROR; return 0; } - return retVal; + return retVal; } U_CAPI void U_EXPORT2 @@ -294,7 +296,7 @@ umsg_setLocale(UMessageFormat *fmt, const char* locale) if(fmt==NULL){ return; } - ((MessageFormat*)fmt)->setLocale(Locale(locale)); + ((MessageFormat*)fmt)->setLocale(Locale(locale)); } U_CAPI const char* U_EXPORT2 @@ -331,12 +333,12 @@ umsg_applyPattern(UMessageFormat *fmt, patternLength=u_strlen(pattern); } - ((MessageFormat*)fmt)->applyPattern(UnicodeString(pattern,patternLength),*parseError,*status); + ((MessageFormat*)fmt)->applyPattern(UnicodeString(pattern,patternLength),*parseError,*status); } U_CAPI int32_t U_EXPORT2 umsg_toPattern(const UMessageFormat *fmt, - UChar* result, + UChar* result, int32_t resultLength, UErrorCode* status) { @@ -368,12 +370,12 @@ umsg_format( const UMessageFormat *fmt, ...) { va_list ap; - int32_t actLen; + int32_t actLen; //argument checking defered to last method call umsg_vformat which //saves time when arguments are valid and we dont care when arguments are not //since we return an error anyway - + // start vararg processing va_start(ap, status); @@ -411,7 +413,7 @@ umsg_vformat( const UMessageFormat *fmt, // iterate through the vararg list, and get the arguments out for(int32_t i = 0; i < count; ++i) { - + UChar *stringVal; double tDouble=0; int32_t tInt =0; @@ -422,12 +424,12 @@ umsg_vformat( const UMessageFormat *fmt, tempDate = va_arg(ap, UDate); args[i].setDate(tempDate); break; - + case Formattable::kDouble: tDouble =va_arg(ap, double); args[i].setDouble(tDouble); break; - + case Formattable::kLong: tInt = va_arg(ap, int32_t); args[i].setLong(tInt); @@ -437,7 +439,7 @@ umsg_vformat( const UMessageFormat *fmt, tInt64 = va_arg(ap, int64_t); args[i].setInt64(tInt64); break; - + case Formattable::kString: // For some reason, a temporary is needed stringVal = va_arg(ap, UChar*); @@ -447,7 +449,7 @@ umsg_vformat( const UMessageFormat *fmt, *status=U_ILLEGAL_ARGUMENT_ERROR; } break; - + case Formattable::kArray: // throw away this argument // this is highly platform-dependent, and probably won't work @@ -469,8 +471,8 @@ umsg_vformat( const UMessageFormat *fmt, } } UnicodeString resultStr; - FieldPosition fieldPosition(0); - + FieldPosition fieldPosition(FieldPosition::DONT_CARE); + /* format the message */ ((const MessageFormat*)fmt)->format(args,count,resultStr,fieldPosition,*status); @@ -617,7 +619,7 @@ umsg_vparse(const UMessageFormat *fmt, #define MAppend(c) if (len < destCapacity) dest[len++] = c; else len++ -int32_t umsg_autoQuoteApostrophe(const UChar* pattern, +int32_t umsg_autoQuoteApostrophe(const UChar* pattern, int32_t patternLength, UChar* dest, int32_t destCapacity, diff --git a/deps/icu-small/source/i18n/umsg_imp.h b/deps/icu-small/source/i18n/umsg_imp.h index 78bbf966bcec1c..e3538d39710f31 100644 --- a/deps/icu-small/source/i18n/umsg_imp.h +++ b/deps/icu-small/source/i18n/umsg_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001, International Business Machines diff --git a/deps/icu-small/source/i18n/unesctrn.cpp b/deps/icu-small/source/i18n/unesctrn.cpp index a4e9358ae68052..88a78d6e32558e 100644 --- a/deps/icu-small/source/i18n/unesctrn.cpp +++ b/deps/icu-small/source/i18n/unesctrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines @@ -83,9 +85,9 @@ static UChar* copySpec(const UChar* spec) { } ++len; UChar *result = (UChar *)uprv_malloc(len*sizeof(UChar)); - // Check for memory allocation error. + // Check for memory allocation error. if (result != NULL) { - uprv_memcpy(result, spec, len*sizeof(result[0])); + uprv_memcpy(result, spec, (size_t)len*sizeof(result[0])); } return result; } diff --git a/deps/icu-small/source/i18n/unesctrn.h b/deps/icu-small/source/i18n/unesctrn.h index bfde6fc134fdd7..7ae8302b0fcb33 100644 --- a/deps/icu-small/source/i18n/unesctrn.h +++ b/deps/icu-small/source/i18n/unesctrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/uni2name.cpp b/deps/icu-small/source/i18n/uni2name.cpp index a10fa14c7f31f7..44abbea2510034 100644 --- a/deps/icu-small/source/i18n/uni2name.cpp +++ b/deps/icu-small/source/i18n/uni2name.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines @@ -85,7 +87,7 @@ void UnicodeNameTransliterator::handleTransliterate(Replaceable& text, UTransPos offsets.start = offsets.limit; return; } - + int32_t cursor = offsets.start; int32_t limit = offsets.limit; diff --git a/deps/icu-small/source/i18n/uni2name.h b/deps/icu-small/source/i18n/uni2name.h index aede864564a65b..7d85113f665b1d 100644 --- a/deps/icu-small/source/i18n/uni2name.h +++ b/deps/icu-small/source/i18n/uni2name.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/alphaindex.h b/deps/icu-small/source/i18n/unicode/alphaindex.h index 9116ccc26c1d36..c7b361ff9486fd 100644 --- a/deps/icu-small/source/i18n/unicode/alphaindex.h +++ b/deps/icu-small/source/i18n/unicode/alphaindex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -81,7 +83,7 @@ class UVector; * AlphabeticIndex supports the creation of a UI index appropriate for a given language. * It can support either direct use, or use with a client that doesn't support localized collation. * The following is an example of what an index might look like in a UI: - * + * *
      *  ... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  ...
      *
    @@ -301,17 +303,17 @@ class U_I18N_API AlphabeticIndex: public UObject {
          */
          AlphabeticIndex(const Locale &locale, UErrorCode &status);
     
    -   /**
    +   /** 
          * Construct an AlphabeticIndex that uses a specific collator.
    -     *
    +     * 
          * The index will be created with no labels; the addLabels() function must be called
          * after creation to add the desired labels to the index.
    -     *
    -     * The index adopts the collator, and is responsible for deleting it.
    +     * 
    +     * The index adopts the collator, and is responsible for deleting it. 
          * The caller should make no further use of the collator after creating the index.
    -     *
    +     * 
          * @param collator The collator to use to order the contents of this index.
    -     * @param status Error code, will be set with the reason if the
    +     * @param status Error code, will be set with the reason if the 
          *               operation fails.
          * @stable ICU 51
          */
    @@ -322,7 +324,7 @@ class U_I18N_API AlphabeticIndex: public UObject {
          * that are already in the index; they do not replace the existing
          * ones.
          * @param additions The additional characters to add to the index, such as A-Z.
    -     * @param status Error code, will be set with the reason if the
    +     * @param status Error code, will be set with the reason if the 
          *               operation fails.
          * @return this, for chaining
          * @stable ICU 4.8
    @@ -337,7 +339,7 @@ class U_I18N_API AlphabeticIndex: public UObject {
          * when creating this Index.
          *
          * @param locale The locale whose index characters are to be added.
    -     * @param status Error code, will be set with the reason if the
    +     * @param status Error code, will be set with the reason if the 
          *               operation fails.
          * @return this, for chaining
          * @stable ICU 4.8
    diff --git a/deps/icu-small/source/i18n/unicode/basictz.h b/deps/icu-small/source/i18n/unicode/basictz.h
    index 5b470382507f54..90073b23add1a7 100644
    --- a/deps/icu-small/source/i18n/unicode/basictz.h
    +++ b/deps/icu-small/source/i18n/unicode/basictz.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     *******************************************************************************
     * Copyright (C) 2007-2013, International Business Machines Corporation and
    @@ -8,7 +10,7 @@
     #define BASICTZ_H
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: ICU TimeZone base class
      */
     
    diff --git a/deps/icu-small/source/i18n/unicode/calendar.h b/deps/icu-small/source/i18n/unicode/calendar.h
    index 35252bb9c809a0..8776e21d5ffad6 100644
    --- a/deps/icu-small/source/i18n/unicode/calendar.h
    +++ b/deps/icu-small/source/i18n/unicode/calendar.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ********************************************************************************
     *   Copyright (C) 1997-2014, International Business Machines
    @@ -28,7 +30,7 @@
     #include "unicode/utypes.h"
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: Calendar object
      */
     #if !UCONFIG_NO_FORMATTING
    @@ -135,7 +137,7 @@ class BasicTimeZone;
      * Calendar resolves the time using the UTC offset before the transition by default.
      * In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist),
      * so the final result will be 2:30 AM daylight time.
    - *
    + * 
      * 

    On the date switching back to standard time, wall clock time is moved back one * hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this * case, the ICU Calendar resolves the time using the UTC offset after the transition @@ -233,7 +235,7 @@ class U_I18N_API Calendar : public UObject { DST_OFFSET, // Example: 0 or U_MILLIS_PER_HOUR YEAR_WOY, // 'Y' Example: 1..big number - Year of Week of Year DOW_LOCAL, // 'e' Example: 1..7 - Day of Week / Localized - + EXTENDED_YEAR, JULIAN_DAY, MILLISECONDS_IN_DAY, @@ -912,7 +914,7 @@ class U_I18N_API Calendar : public UObject { * option for this. When the argument is neither UCAL_WALLTIME_FIRST * nor UCAL_WALLTIME_LAST, this method has no effect and will keep * the current setting. - * + * * @param option the behavior for handling repeating wall time, either * UCAL_WALLTIME_FIRST or UCAL_WALLTIME_LAST. * @see #getRepeatedWallTimeOption @@ -923,7 +925,7 @@ class U_I18N_API Calendar : public UObject { /** * Gets the behavior for handling wall time repeating multiple times * at negative time zone offset transitions. - * + * * @return the behavior for handling repeating wall time, either * UCAL_WALLTIME_FIRST or UCAL_WALLTIME_LAST. * @see #setRepeatedWallTimeOption @@ -944,12 +946,12 @@ class U_I18N_API Calendar : public UObject { *

    * Note:This option is effective only when this calendar is lenient. * When the calendar is strict, such non-existing wall time will cause an error. - * + * * @param option the behavior for handling skipped wall time at positive time zone * offset transitions, one of UCAL_WALLTIME_FIRST, UCAL_WALLTIME_LAST and * UCAL_WALLTIME_NEXT_VALID. * @see #getSkippedWallTimeOption - * + * * @stable ICU 49 */ void setSkippedWallTimeOption(UCalendarWallTimeOption option); @@ -957,7 +959,7 @@ class U_I18N_API Calendar : public UObject { /** * Gets the behavior for handling skipped wall time at positive time zone offset * transitions. - * + * * @return the behavior for handling skipped wall time, one of * UCAL_WALLTIME_FIRST, UCAL_WALLTIME_LAST * and UCAL_WALLTIME_NEXT_VALID. diff --git a/deps/icu-small/source/i18n/unicode/choicfmt.h b/deps/icu-small/source/i18n/unicode/choicfmt.h index cfd520624dc53a..ab3c28fe0740d7 100644 --- a/deps/icu-small/source/i18n/unicode/choicfmt.h +++ b/deps/icu-small/source/i18n/unicode/choicfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/coleitr.h b/deps/icu-small/source/i18n/unicode/coleitr.h index f07ada7b6703a2..4feaa1b55a5847 100644 --- a/deps/icu-small/source/i18n/unicode/coleitr.h +++ b/deps/icu-small/source/i18n/unicode/coleitr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2014, International Business Machines @@ -6,7 +8,7 @@ */ /** - * \file + * \file * \brief C++ API: Collation Element Iterator. */ @@ -23,7 +25,7 @@ * 08/03/98 erm Synched with 1.2 version CollationElementIterator.java * 12/10/99 aliu Ported Thai collation support from Java. * 01/25/01 swquek Modified into a C++ wrapper calling C APIs (ucoliter.h) -* 02/19/01 swquek Removed CollationElementsIterator() since it is +* 02/19/01 swquek Removed CollationElementsIterator() since it is * private constructor and no calls are made to it * 2012-2014 markus Rewritten in C++ again. */ @@ -51,10 +53,10 @@ class UCollationPCE; class UVector32; /** -* The CollationElementIterator class is used as an iterator to walk through +* The CollationElementIterator class is used as an iterator to walk through * each character of an international string. Use the iterator to return the -* ordering priority of the positioned character. The ordering priority of a -* character, which we refer to as a key, defines how a character is collated in +* ordering priority of the positioned character. The ordering priority of a +* character, which we refer to as a key, defines how a character is collated in * the given collation object. * For example, consider the following in Slovak and in traditional Spanish collation: *

    @@ -64,9 +66,9 @@ class UVector32;
     * 
     \htmlonly       "æb"-> the first key is key('a'), the second key is key('e'), and
     *        the third key is key('b'). \endhtmlonly 
    * The key of a character, is an integer composed of primary order(short), -* secondary order(char), and tertiary order(char). Java strictly defines the +* secondary order(char), and tertiary order(char). Java strictly defines the * size and signedness of its primitive data types. Therefore, the static -* functions primaryOrder(), secondaryOrder(), and tertiaryOrder() return +* functions primaryOrder(), secondaryOrder(), and tertiaryOrder() return * int32_t to ensure the correctness of the key value. *

    Example of the iterator usage: (without error checking) *

    @@ -92,8 +94,8 @@ class UVector32;
     * the comparison level of the collator. The method previous() returns the
     * collation order of the previous character based on the comparison level of
     * the collator. The Collation Element Iterator moves only in one direction
    -* between calls to reset(), setOffset(), or setText(). That is, next()
    -* and previous() can not be inter-used. Whenever previous() is to be called after
    +* between calls to reset(), setOffset(), or setText(). That is, next() 
    +* and previous() can not be inter-used. Whenever previous() is to be called after 
     * next() or vice versa, reset(), setOffset() or setText() has to be called first
     * to reset the status, shifting pointers to either the end or the start of
     * the string (reset() or setText()), or the specified position (setOffset()).
    @@ -104,9 +106,9 @@ class UVector32;
     * The result of a forward iterate (next()) and reversed result of the backward
     * iterate (previous()) on the same string are equivalent, if collation orders
     * with the value 0 are ignored.
    -* Character based on the comparison level of the collator.  A collation order
    -* consists of primary order, secondary order and tertiary order.  The data
    -* type of the collation order is int32_t.
    +* Character based on the comparison level of the collator.  A collation order 
    +* consists of primary order, secondary order and tertiary order.  The data 
    +* type of the collation order is int32_t. 
     *
     * Note, CollationElementIterator should not be subclassed.
     * @see     Collator
    @@ -114,7 +116,7 @@ class UVector32;
     * @version 1.8 Jan 16 2001
     */
     class U_I18N_API CollationElementIterator U_FINAL : public UObject {
    -public:
    +public: 
     
         // CollationElementIterator public data member ------------------------------
     
    @@ -136,7 +138,7 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         */
         CollationElementIterator(const CollationElementIterator& other);
     
    -    /**
    +    /** 
         * Destructor
         * @stable ICU 2.0
         */
    @@ -171,7 +173,7 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         /**
         * Gets the ordering priority of the next character in the string.
         * @param status the error code status.
    -    * @return the next character's ordering. otherwise returns NULLORDER if an
    +    * @return the next character's ordering. otherwise returns NULLORDER if an 
         *         error has occured or if the end of string has been reached
         * @stable ICU 2.0
         */
    @@ -180,7 +182,7 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         /**
         * Get the ordering priority of the previous collation element in the string.
         * @param status the error code status.
    -    * @return the previous element's ordering. otherwise returns NULLORDER if an
    +    * @return the previous element's ordering. otherwise returns NULLORDER if an 
         *         error has occured or if the start of string has been reached
         * @stable ICU 2.0
         */
    @@ -211,11 +213,11 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         static inline int32_t tertiaryOrder(int32_t order);
     
         /**
    -    * Return the maximum length of any expansion sequences that end with the
    +    * Return the maximum length of any expansion sequences that end with the 
         * specified comparison order.
         * @param order a collation order returned by previous or next.
    -    * @return maximum size of the expansion sequences ending with the collation
    -    *         element or 1 if collation element does not occur at the end of any
    +    * @return maximum size of the expansion sequences ending with the collation 
    +    *         element or 1 if collation element does not occur at the end of any 
         *         expansion sequence
         * @stable ICU 2.0
         */
    @@ -307,9 +309,9 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         friend class UCollationPCE;
     
         /**
    -    * CollationElementIterator constructor. This takes the source string and the
    -    * collation object. The cursor will walk thru the source string based on the
    -    * predefined collation rules. If the source string is empty, NULLORDER will
    +    * CollationElementIterator constructor. This takes the source string and the 
    +    * collation object. The cursor will walk thru the source string based on the 
    +    * predefined collation rules. If the source string is empty, NULLORDER will 
         * be returned on the calls to next().
         * @param sourceText    the source string.
         * @param order         the collation object.
    @@ -327,9 +329,9 @@ class U_I18N_API CollationElementIterator U_FINAL : public UObject {
         // but only contain the part of RBC== related to data and rules.
     
         /**
    -    * CollationElementIterator constructor. This takes the source string and the
    -    * collation object.  The cursor will walk thru the source string based on the
    -    * predefined collation rules.  If the source string is empty, NULLORDER will
    +    * CollationElementIterator constructor. This takes the source string and the 
    +    * collation object.  The cursor will walk thru the source string based on the 
    +    * predefined collation rules.  If the source string is empty, NULLORDER will 
         * be returned on the calls to next().
         * @param sourceText    the source string.
         * @param order         the collation object.
    diff --git a/deps/icu-small/source/i18n/unicode/coll.h b/deps/icu-small/source/i18n/unicode/coll.h
    index 5468342716b6d4..e41be2ee81a25c 100644
    --- a/deps/icu-small/source/i18n/unicode/coll.h
    +++ b/deps/icu-small/source/i18n/unicode/coll.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ******************************************************************************
     *   Copyright (C) 1996-2016, International Business Machines
    diff --git a/deps/icu-small/source/i18n/unicode/compactdecimalformat.h b/deps/icu-small/source/i18n/unicode/compactdecimalformat.h
    index ced6bee5994a4f..1fcc5c581e089d 100644
    --- a/deps/icu-small/source/i18n/unicode/compactdecimalformat.h
    +++ b/deps/icu-small/source/i18n/unicode/compactdecimalformat.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ********************************************************************************
     *   Copyright (C) 2012-2016, International Business Machines
    @@ -157,7 +159,6 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat {
                                       FieldPositionIterator* posIter,
                                       UErrorCode& status) const;
     
    -	/* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual. */
         /**
          * Format a long number using base-10 representation.
          *
    @@ -167,7 +168,7 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat {
          * @param pos       On input: an alignment field, if desired.
          *                  On output: the offsets of the alignment field.
          * @return          Reference to 'appendTo' parameter.
    -     * @draft ICU 56
    +     * @stable ICU 56
          */
         virtual UnicodeString& format(int32_t number,
                                       UnicodeString& appendTo,
    @@ -274,7 +275,7 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat {
          * @return          Reference to 'appendTo' parameter.
          * @internal
          */
    -    virtual UnicodeString& format(const StringPiece &number,
    +    virtual UnicodeString& format(StringPiece number,
                                       UnicodeString& appendTo,
                                       FieldPositionIterator* posIter,
                                       UErrorCode& status) const;
    diff --git a/deps/icu-small/source/i18n/unicode/curramt.h b/deps/icu-small/source/i18n/unicode/curramt.h
    index ce9acbfd5cda7c..65c5b39a7df4d4 100644
    --- a/deps/icu-small/source/i18n/unicode/curramt.h
    +++ b/deps/icu-small/source/i18n/unicode/curramt.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     **********************************************************************
     * Copyright (c) 2004-2006, International Business Machines
    @@ -19,10 +21,10 @@
     #include "unicode/currunit.h"
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: Currency Amount Object.
      */
    -
    + 
     U_NAMESPACE_BEGIN
     
     /**
    @@ -65,7 +67,7 @@ class U_I18N_API CurrencyAmount: public Measure {
          * @stable ICU 3.0
          */
         CurrencyAmount(const CurrencyAmount& other);
    -
    + 
         /**
          * Assignment operator
          * @stable ICU 3.0
    @@ -84,7 +86,7 @@ class U_I18N_API CurrencyAmount: public Measure {
          * @stable ICU 3.0
          */
         virtual ~CurrencyAmount();
    -
    +    
         /**
          * Returns a unique class ID for this object POLYMORPHICALLY.
          * This method implements a simple form of RTTI used by ICU.
    diff --git a/deps/icu-small/source/i18n/unicode/currpinf.h b/deps/icu-small/source/i18n/unicode/currpinf.h
    index 4f1f8962c38896..acf8b5326b9f5e 100644
    --- a/deps/icu-small/source/i18n/unicode/currpinf.h
    +++ b/deps/icu-small/source/i18n/unicode/currpinf.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
      *******************************************************************************
      * Copyright (C) 2009-2015, International Business Machines Corporation and         *
    @@ -25,13 +27,13 @@ class PluralRules;
     class Hashtable;
     
     /**
    - * This class represents the information needed by
    - * DecimalFormat to format currency plural,
    - * such as "3.00 US dollars" or "1.00 US dollar".
    + * This class represents the information needed by 
    + * DecimalFormat to format currency plural, 
    + * such as "3.00 US dollars" or "1.00 US dollar". 
      * DecimalFormat creates for itself an instance of
    - * CurrencyPluralInfo from its locale data.
    + * CurrencyPluralInfo from its locale data.  
      * If you need to change any of these symbols, you can get the
    - * CurrencyPluralInfo object from your
    + * CurrencyPluralInfo object from your 
      * DecimalFormat and modify it.
      *
      * Following are the information needed for currency plural format and parse:
    @@ -57,7 +59,7 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
          * @param status output param set to success/failure code on exit
          * @stable ICU 4.2
          */
    -    CurrencyPluralInfo(const Locale& locale, UErrorCode& status);
    +    CurrencyPluralInfo(const Locale& locale, UErrorCode& status); 
     
         /**
          * Copy constructor
    @@ -116,7 +118,7 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
         const PluralRules* getPluralRules() const;
     
         /**
    -     * Given a plural count, gets currency plural pattern of this locale,
    +     * Given a plural count, gets currency plural pattern of this locale, 
          * used for currency plural format
          *
          * @param  pluralCount currency plural count
    @@ -125,10 +127,10 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
          * @stable ICU 4.2
          */
         UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount,
    -                                            UnicodeString& result) const;
    +                                            UnicodeString& result) const; 
     
         /**
    -     * Get locale
    +     * Get locale 
          *
          * @return locale
          * @stable ICU 4.2
    @@ -153,16 +155,16 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
          * Set currency plural pattern.
          * The currency plural pattern is set when CurrencyPluralInfo
          * instance is created.
    -     * You can call this method to reset currency plural pattern only if
    +     * You can call this method to reset currency plural pattern only if 
          * you want to modify the default currency plural pattern of the locale.
          *
    -     * @param pluralCount the plural count for which the currency pattern will
    +     * @param pluralCount the plural count for which the currency pattern will 
          *                    be overridden.
          * @param pattern     the new currency plural pattern
          * @param status      output param set to success/failure code on exit
          * @stable ICU 4.2
          */
    -    void setCurrencyPluralPattern(const UnicodeString& pluralCount,
    +    void setCurrencyPluralPattern(const UnicodeString& pluralCount, 
                                       const UnicodeString& pattern,
                                       UErrorCode& status);
     
    @@ -194,7 +196,7 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
         friend class DecimalFormatImpl;
     
         void initialize(const Locale& loc, UErrorCode& status);
    -
    +   
         void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
     
         /*
    @@ -249,7 +251,7 @@ class  U_I18N_API CurrencyPluralInfo : public UObject {
     
     
     inline UBool
    -CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }
    +CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }  
     
     U_NAMESPACE_END
     
    diff --git a/deps/icu-small/source/i18n/unicode/currunit.h b/deps/icu-small/source/i18n/unicode/currunit.h
    index 93ecd2c48906e2..9ca4dc59173fdc 100644
    --- a/deps/icu-small/source/i18n/unicode/currunit.h
    +++ b/deps/icu-small/source/i18n/unicode/currunit.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     **********************************************************************
     * Copyright (c) 2004-2014, International Business Machines
    @@ -18,10 +20,10 @@
     #include "unicode/measunit.h"
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: Currency Unit Information.
      */
    -
    + 
     U_NAMESPACE_BEGIN
     
     /**
    diff --git a/deps/icu-small/source/i18n/unicode/datefmt.h b/deps/icu-small/source/i18n/unicode/datefmt.h
    index 2ccac7976037d9..31141265129630 100644
    --- a/deps/icu-small/source/i18n/unicode/datefmt.h
    +++ b/deps/icu-small/source/i18n/unicode/datefmt.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
      ********************************************************************************
      *   Copyright (C) 1997-2016, International Business Machines
    @@ -44,7 +46,7 @@ class DateTimePatternGenerator;
     // explicit template instantiation. see digitlst.h
     #if defined (_MSC_VER)
     template class U_I18N_API EnumSet;
     #endif
     
    @@ -587,7 +589,7 @@ class U_I18N_API DateFormat : public Format {
     #endif  /* U_HIDE_INTERNAL_API */
     
         /**
    -     * Creates a date/time formatter for the given skeleton and
    +     * Creates a date/time formatter for the given skeleton and 
          * default locale.
          *
          * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can
    @@ -663,20 +665,20 @@ class U_I18N_API DateFormat : public Format {
          * lenient parsing, the parser may use heuristics to interpret inputs that
          * do not precisely match this object's format.  Without lenient parsing,
          * inputs must match this object's format more closely.
    -     *
    -     * Note: ICU 53 introduced finer grained control of leniency (and added
    -     * new control points) making the preferred method a combination of
    -     * setCalendarLenient() & setBooleanAttribute() calls.
    -     * This method supports prior functionality but may not support all
    -     * future leniency control & behavior of DateFormat. For control of pre 53 leniency,
    -     * Calendar and DateFormat whitespace & numeric tolerance, this method is safe to
    -     * use. However, mixing leniency control via this method and modification of the
    -     * newer attributes via setBooleanAttribute() may produce undesirable
    +     * 
    +     * Note: ICU 53 introduced finer grained control of leniency (and added 
    +     * new control points) making the preferred method a combination of 
    +     * setCalendarLenient() & setBooleanAttribute() calls. 
    +     * This method supports prior functionality but may not support all 
    +     * future leniency control & behavior of DateFormat. For control of pre 53 leniency,  
    +     * Calendar and DateFormat whitespace & numeric tolerance, this method is safe to 
    +     * use. However, mixing leniency control via this method and modification of the 
    +     * newer attributes via setBooleanAttribute() may produce undesirable 
          * results.
          *
          * @param lenient  True specifies date/time interpretation to be lenient.
          * @see Calendar::setLenient
    -     * @stable ICU 2.0
    +     * @stable ICU 2.0     
          */
         virtual void setLenient(UBool lenient);
     
    @@ -782,7 +784,7 @@ class U_I18N_API DateFormat : public Format {
          * @param value The UDisplayContext value to set.
          * @param status Input/output status. If at entry this indicates a failure
          *               status, the function will do nothing; otherwise this will be
    -     *               updated with any new status from the function.
    +     *               updated with any new status from the function. 
          * @stable ICU 53
          */
         virtual void setContext(UDisplayContext value, UErrorCode& status);
    @@ -793,7 +795,7 @@ class U_I18N_API DateFormat : public Format {
          * @param type The UDisplayContextType whose value to return
          * @param status Input/output status. If at entry this indicates a failure
          *               status, the function will do nothing; otherwise this will be
    -     *               updated with any new status from the function.
    +     *               updated with any new status from the function. 
          * @return The UDisplayContextValue for the specified type.
          * @stable ICU 53
          */
    @@ -811,8 +813,8 @@ class U_I18N_API DateFormat : public Format {
          */
     
         virtual DateFormat&  U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
    -									UBool newvalue,
    -									UErrorCode &status);
    +    									UBool newvalue,
    +    									UErrorCode &status);
     
         /**
          * Returns a boolean from this DateFormat
    @@ -875,7 +877,7 @@ class U_I18N_API DateFormat : public Format {
          */
         static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
     
    -
    +     
         /**
          * enum set of active boolean attributes for this instance
          */
    diff --git a/deps/icu-small/source/i18n/unicode/dcfmtsym.h b/deps/icu-small/source/i18n/unicode/dcfmtsym.h
    index 9b406b14172b43..946227addb7557 100644
    --- a/deps/icu-small/source/i18n/unicode/dcfmtsym.h
    +++ b/deps/icu-small/source/i18n/unicode/dcfmtsym.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ********************************************************************************
     *   Copyright (C) 1997-2016, International Business Machines
    diff --git a/deps/icu-small/source/i18n/unicode/decimfmt.h b/deps/icu-small/source/i18n/unicode/decimfmt.h
    index e7f8ea592e09af..7339399f72e001 100644
    --- a/deps/icu-small/source/i18n/unicode/decimfmt.h
    +++ b/deps/icu-small/source/i18n/unicode/decimfmt.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ********************************************************************************
     *   Copyright (C) 1997-2016, International Business Machines
    @@ -968,7 +970,7 @@ class U_I18N_API DecimalFormat: public NumberFormat {
          *                  Can be NULL.
          * @param status    Output param filled with success/failure status.
          * @return          Reference to 'appendTo' parameter.
    -     * @stable 4.4
    +     * @stable ICU 4.4
          */
         virtual UnicodeString& format(double number,
                                       UnicodeString& appendTo,
    @@ -1017,7 +1019,7 @@ class U_I18N_API DecimalFormat: public NumberFormat {
          *                  Can be NULL.
          * @param status    Output param filled with success/failure status.
          * @return          Reference to 'appendTo' parameter.
    -     * @stable 4.4
    +     * @stable ICU 4.4
          */
         virtual UnicodeString& format(int32_t number,
                                       UnicodeString& appendTo,
    @@ -1066,7 +1068,7 @@ class U_I18N_API DecimalFormat: public NumberFormat {
          *                  Can be NULL.
          * @param status    Output param filled with success/failure status.
          * @return          Reference to 'appendTo' parameter.
    -     * @stable 4.4
    +     * @stable ICU 4.4
          */
         virtual UnicodeString& format(int64_t number,
                                       UnicodeString& appendTo,
    @@ -1087,9 +1089,9 @@ class U_I18N_API DecimalFormat: public NumberFormat {
          *                  Can be NULL.
          * @param status    Output param filled with success/failure status.
          * @return          Reference to 'appendTo' parameter.
    -     * @stable 4.4
    +     * @stable ICU 4.4
          */
    -    virtual UnicodeString& format(const StringPiece &number,
    +    virtual UnicodeString& format(StringPiece number,
                                       UnicodeString& appendTo,
                                       FieldPositionIterator* posIter,
                                       UErrorCode& status) const;
    @@ -2101,6 +2103,8 @@ class U_I18N_API DecimalFormat: public NumberFormat {
                        DecimalFormatSymbols*    symbolsToAdopt = 0
                        );
     
    +    void handleCurrencySignInPattern(UErrorCode& status);
    +
         void parse(const UnicodeString& text,
                    Formattable& result,
                    ParsePosition& pos,
    diff --git a/deps/icu-small/source/i18n/unicode/dtfmtsym.h b/deps/icu-small/source/i18n/unicode/dtfmtsym.h
    index c338c46fac2dbc..757347881fde5d 100644
    --- a/deps/icu-small/source/i18n/unicode/dtfmtsym.h
    +++ b/deps/icu-small/source/i18n/unicode/dtfmtsym.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     ********************************************************************************
     *   Copyright (C) 1997-2016, International Business Machines
    @@ -270,9 +272,15 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
          * @stable ICU 3.6
          */
         enum DtContextType {
    -         FORMAT,
    -         STANDALONE,
    -         DT_CONTEXT_COUNT
    +        FORMAT,
    +        STANDALONE,
    +#ifndef U_HIDE_DEPRECATED_API
    +        /**
    +         * One more than the highest normal DtContextType value.
    +         * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
    +         */
    +        DT_CONTEXT_COUNT
    +#endif  // U_HIDE_DEPRECATED_API
         };
     
         /**
    @@ -280,17 +288,21 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
          * @stable ICU 3.6
          */
         enum DtWidthType {
    -         ABBREVIATED,
    -         WIDE,
    -         NARROW,
    -         /**
    -          * Short width is currently only supported for weekday names.
    -          * @stable ICU 51
    -          */
    -         SHORT,
    -         /**
    -          */
    -         DT_WIDTH_COUNT = 4
    +        ABBREVIATED,
    +        WIDE,
    +        NARROW,
    +        /**
    +         * Short width is currently only supported for weekday names.
    +         * @stable ICU 51
    +         */
    +        SHORT,
    +#ifndef U_HIDE_DEPRECATED_API
    +        /**
    +         * One more than the highest normal DtWidthType value.
    +         * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
    +         */
    +        DT_WIDTH_COUNT = 4
    +#endif  // U_HIDE_DEPRECATED_API
         };
     
         /**
    @@ -584,7 +596,7 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
         Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
     
         /* The following type and kCapContextUsageTypeCount cannot be #ifndef U_HIDE_INTERNAL_API,
    -       they are needed for .h file declarations. */
    +       they are needed for .h file declarations. */ 
         /**
          * Constants for capitalization context usage types.
          * @internal
    @@ -801,7 +813,7 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
          * entry containing the localized names for a single TimeZone.
          *
          * Each such row contains (with i ranging from 0..n-1):
    -     *
    +     * 
          * zoneStrings[i][0] - time zone ID
          *  example: America/Los_Angeles
          * zoneStrings[i][1] - long name of zone in standard time
    @@ -887,7 +899,7 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
         int32_t         fStandaloneNarrowDayPeriodsCount;
     
     private:
    -    /** valid/actual locale information
    +    /** valid/actual locale information 
          *  these are always ICU locales, so the length should not be a problem
          */
         char validLocale[ULOC_FULLNAME_CAPACITY];
    diff --git a/deps/icu-small/source/i18n/unicode/dtitvfmt.h b/deps/icu-small/source/i18n/unicode/dtitvfmt.h
    index 181d46c8e0af72..68360b87dffaf5 100644
    --- a/deps/icu-small/source/i18n/unicode/dtitvfmt.h
    +++ b/deps/icu-small/source/i18n/unicode/dtitvfmt.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /********************************************************************************
     * Copyright (C) 2008-2016, International Business Machines Corporation and
     * others. All Rights Reserved.
    diff --git a/deps/icu-small/source/i18n/unicode/dtitvinf.h b/deps/icu-small/source/i18n/unicode/dtitvinf.h
    index 1c7f3983df991e..325eca66d6b666 100644
    --- a/deps/icu-small/source/i18n/unicode/dtitvinf.h
    +++ b/deps/icu-small/source/i18n/unicode/dtitvinf.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
      *******************************************************************************
      * Copyright (C) 2008-2016, International Business Machines Corporation and
    @@ -150,7 +152,8 @@ U_NAMESPACE_BEGIN
     
     class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
     public:
    -#ifndef U_HIDE_INTERNAL_API
    +    // Do not enclose the protected default constructor with #ifndef U_HIDE_INTERNAL_API
    +    // or else the compiler will create a public default constructor.
         /**
          * Default constructor.
          * It does not initialize any interval patterns except
    @@ -165,7 +168,6 @@ class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
          * @internal ICU 4.0
          */
         DateIntervalInfo(UErrorCode& status);
    -#endif  /* U_HIDE_INTERNAL_API */
     
     
         /**
    @@ -339,7 +341,10 @@ class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
          */
         friend class DateIntervalFormat;
     
    -    friend struct DateIntervalSink;
    +    /**
    +     * Internal struct used to load resource bundle data.
    +     */
    +    struct DateIntervalSink;
     
         /**
          * Following is for saving the interval patterns.
    @@ -514,3 +519,4 @@ U_NAMESPACE_END
     #endif
     
     #endif
    +
    diff --git a/deps/icu-small/source/i18n/unicode/dtptngen.h b/deps/icu-small/source/i18n/unicode/dtptngen.h
    index eb8a44541e061c..fd617ce3cdcbfb 100644
    --- a/deps/icu-small/source/i18n/unicode/dtptngen.h
    +++ b/deps/icu-small/source/i18n/unicode/dtptngen.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     *******************************************************************************
     * Copyright (C) 2007-2016, International Business Machines Corporation and
    @@ -116,7 +118,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
          */
         UBool operator!=(const DateTimePatternGenerator& other) const;
     
    -#ifndef U_HIDE_DRAFT_API
         /**
          * Utility to return a unique skeleton from a given pattern. For example,
          * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
    @@ -125,10 +126,9 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
          * @param status  Output param set to success/failure code on exit,
          *                  which must not indicate a failure before the function call.
          * @return skeleton such as "MMMdd"
    -     * @draft ICU 56
    +     * @stable ICU 56
          */
         static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status);
    -#endif  /* U_HIDE_DRAFT_API */
     
         /**
          * Utility to return a unique skeleton from a given pattern. For example,
    @@ -149,7 +149,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
             return staticGetSkeleton(pattern, status);
         }*/
     
    -#ifndef U_HIDE_DRAFT_API
         /**
          * Utility to return a unique base skeleton from a given pattern. This is
          * the same as the skeleton, except that differences in length are minimized
    @@ -161,10 +160,9 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
          * @param status  Output param set to success/failure code on exit,
          *               which must not indicate a failure before the function call.
          * @return base skeleton, such as "MMMd"
    -     * @draft ICU 56
    +     * @stable ICU 56
          */
         static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
    -#endif  /* U_HIDE_DRAFT_API */
     
         /**
          * Utility to return a unique base skeleton from a given pattern. This is
    @@ -518,7 +516,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
         UnicodeString decimal;
         DateTimeMatcher *skipMatcher;
         Hashtable *fAvailableFormatKeyHash;
    -    UnicodeString hackPattern;
         UnicodeString emptyString;
         UChar fDefaultHourFormatChar;
     
    @@ -534,9 +531,11 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
         };
     
         void initData(const Locale &locale, UErrorCode &status);
    -    void addCanonicalItems();
    +    void addCanonicalItems(UErrorCode &status);
         void addICUPatterns(const Locale& locale, UErrorCode& status);
         void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
    +    void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err);
    +    void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status);
         void addCLDRData(const Locale& locale, UErrorCode& status);
         UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
         void initHashtable(UErrorCode& status);
    @@ -544,6 +543,7 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
         void setDecimalSymbols(const Locale& locale, UErrorCode& status);
         UDateTimePatternField getAppendFormatNumber(const char* field) const;
         UDateTimePatternField getAppendNameNumber(const char* field) const;
    +    UnicodeString& getMutableAppendItemName(UDateTimePatternField field);
         void getAppendName(UDateTimePatternField field, UnicodeString& value);
         int32_t getCanonicalIndex(const UnicodeString& field);
         const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0);
    @@ -554,8 +554,12 @@ class U_I18N_API DateTimePatternGenerator : public UObject {
         UBool isAvailableFormatSet(const UnicodeString &key) const;
         void copyHashtable(Hashtable *other, UErrorCode &status);
         UBool isCanonicalItem(const UnicodeString& item) const;
    -    static void loadAllowedHourFormatsData(UErrorCode &status);
    +    static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status);
         void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
    +
    +    struct AppendItemFormatsSink;
    +    struct AppendItemNamesSink;
    +    struct AvailableFormatsSink;
     } ;// end class DateTimePatternGenerator
     
     U_NAMESPACE_END
    diff --git a/deps/icu-small/source/i18n/unicode/dtrule.h b/deps/icu-small/source/i18n/unicode/dtrule.h
    index 3ef080b4eb0ee9..fa1294e95f30c1 100644
    --- a/deps/icu-small/source/i18n/unicode/dtrule.h
    +++ b/deps/icu-small/source/i18n/unicode/dtrule.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
     *******************************************************************************
     * Copyright (C) 2007-2008, International Business Machines Corporation and         *
    @@ -10,7 +12,7 @@
     #include "unicode/utypes.h"
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: Rule for specifying date and time in an year
      */
     
    @@ -23,7 +25,7 @@ U_NAMESPACE_BEGIN
      * DateTimeRule is a class representing a time in a year by
      * a rule specified by month, day of month, day of week and
      * time in the day.
    - *
    + * 
      * @stable ICU 3.8
      */
     class U_I18N_API DateTimeRule : public UObject {
    @@ -58,7 +60,7 @@ class U_I18N_API DateTimeRule : public UObject {
          * Constructs a DateTimeRule by the day of month and
          * the time rule.  The date rule type for an instance created by
          * this constructor is DOM.
    -     *
    +     * 
          * @param month         The rule month, for example, Calendar::JANUARY
          * @param dayOfMonth    The day of month, 1-based.
          * @param millisInDay   The milliseconds in the rule date.
    @@ -73,7 +75,7 @@ class U_I18N_API DateTimeRule : public UObject {
          * Constructs a DateTimeRule by the day of week and its oridinal
          * number and the time rule.  The date rule type for an instance created
          * by this constructor is DOW.
    -     *
    +     * 
          * @param month         The rule month, for example, Calendar::JANUARY.
          * @param weekInMonth   The ordinal number of the day of week.  Negative number
          *                      may be used for specifying a rule date counted from the
    @@ -92,7 +94,7 @@ class U_I18N_API DateTimeRule : public UObject {
          * on or after/before the day of month and the time rule.  The date rule
          * type for an instance created by this constructor is either
          * DOM_GEQ_DOM or DOM_LEQ_DOM.
    -     *
    +     * 
          * @param month         The rule month, for example, Calendar::JANUARY
          * @param dayOfMonth    The day of month, 1-based.
          * @param dayOfWeek     The day of week, for example, Calendar::SUNDAY.
    diff --git a/deps/icu-small/source/i18n/unicode/fieldpos.h b/deps/icu-small/source/i18n/unicode/fieldpos.h
    index b3d64b4e842186..ad75b77f8de64d 100644
    --- a/deps/icu-small/source/i18n/unicode/fieldpos.h
    +++ b/deps/icu-small/source/i18n/unicode/fieldpos.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
      ********************************************************************************
      *   Copyright (C) 1997-2006, International Business Machines
    @@ -18,14 +20,14 @@
     // *****************************************************************************
     // This file was generated from the java source file FieldPosition.java
     // *****************************************************************************
    -
    + 
     #ifndef FIELDPOS_H
     #define FIELDPOS_H
     
     #include "unicode/utypes.h"
     
     /**
    - * \file
    + * \file 
      * \brief C++ API: FieldPosition identifies the fields in a formatted output.
      */
     
    @@ -56,7 +58,7 @@ U_NAMESPACE_BEGIN
      * to perform partial formatting or to get information about the
      * formatted output (such as the position of a field).
      *
    - * The FieldPosition class is not suitable for subclassing.
    + * The FieldPosition class is not intended for public subclassing.
      *
      * 

    * Below is an example of using FieldPosition to aid @@ -67,14 +69,14 @@ U_NAMESPACE_BEGIN * double doubleNum[] = {123456789.0, -12345678.9, 1234567.89, -123456.789, * 12345.6789, -1234.56789, 123.456789, -12.3456789, 1.23456789}; * int dNumSize = (int)(sizeof(doubleNum)/sizeof(double)); - * + * * UErrorCode status = U_ZERO_ERROR; * DecimalFormat* fmt = (DecimalFormat*) NumberFormat::createInstance(status); * fmt->setDecimalSeparatorAlwaysShown(true); - * + * * const int tempLen = 20; * char temp[tempLen]; - * + * * for (int i=0; i= limit for any run). */ void setData(UVector32 *adopt, UErrorCode& status); diff --git a/deps/icu-small/source/i18n/unicode/gender.h b/deps/icu-small/source/i18n/unicode/gender.h index cbb73916c66ce7..943d44544a6dc0 100644 --- a/deps/icu-small/source/i18n/unicode/gender.h +++ b/deps/icu-small/source/i18n/unicode/gender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2013, International Business Machines Corporation and @@ -58,7 +60,7 @@ class U_I18N_API GenderInfo : public UObject { /** * Determines the gender of a list as a whole given the gender of each * of the elements. - * + * * @param genders the gender of each element in the list. * @param length the length of gender array. * @param status Output param set to success/failure code on exit, which diff --git a/deps/icu-small/source/i18n/unicode/gregocal.h b/deps/icu-small/source/i18n/unicode/gregocal.h index 1e507d3bb7b620..756bba1b4394a0 100644 --- a/deps/icu-small/source/i18n/unicode/gregocal.h +++ b/deps/icu-small/source/i18n/unicode/gregocal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2013, International Business Machines Corporation and others. * All Rights Reserved. @@ -31,13 +33,13 @@ #include "unicode/calendar.h" /** - * \file + * \file * \brief C++ API: Concrete class which provides the standard calendar. */ U_NAMESPACE_BEGIN -/** +/** * Concrete class which provides the standard calendar used by most of the world. *

    * The standard (Gregorian) calendar has 2 eras, BC and AD. @@ -343,7 +345,7 @@ class U_I18N_API GregorianCalendar: public Calendar { * Returns TRUE if the given Calendar object is equivalent to this * one. Calendar override. * - * @param other the Calendar to be compared with this Calendar + * @param other the Calendar to be compared with this Calendar * @stable ICU 2.4 */ virtual UBool isEquivalentTo(const Calendar& other) const; @@ -512,7 +514,7 @@ class U_I18N_API GregorianCalendar: public Calendar { * Subclasses may override this. This method calls * handleGetMonthLength() to obtain the calendar-specific month * length. - * @param bestField which field to use to calculate the date + * @param bestField which field to use to calculate the date * @return julian day specified by calendar fields. * @internal */ @@ -561,7 +563,7 @@ class U_I18N_API GregorianCalendar: public Calendar { * @internal */ int32_t yearLength(int32_t year) const; - + /** * return the length of the year field. * @return the length of the year field @@ -583,7 +585,7 @@ class U_I18N_API GregorianCalendar: public Calendar { * Return the day number with respect to the epoch. January 1, 1970 (Gregorian) * is day zero. * @param status Fill-in parameter which receives the status of this operation. - * @return the day number with respect to the epoch. + * @return the day number with respect to the epoch. * @internal */ virtual UDate getEpochDay(UErrorCode& status); @@ -621,8 +623,8 @@ class U_I18N_API GregorianCalendar: public Calendar { */ virtual int32_t handleGetExtendedYear(); - /** - * Subclasses may override this to convert from week fields + /** + * Subclasses may override this to convert from week fields * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case * where YEAR, EXTENDED_YEAR are not set. * The Gregorian implementation assumes a yearWoy in gregorian format, according to the current era. @@ -654,12 +656,12 @@ class U_I18N_API GregorianCalendar: public Calendar { * Compute the julian day number of the given year. * @param isGregorian if true, using Gregorian calendar, otherwise using Julian calendar * @param year the given year. - * @param isLeap true if the year is a leap year. - * @return + * @param isLeap true if the year is a leap year. + * @return */ static double computeJulianDayOfYear(UBool isGregorian, int32_t year, UBool& isLeap); - + /** * Validates the values of the set time fields. True if they're all valid. * @return True if the set time fields are all valid. @@ -751,7 +753,7 @@ class U_I18N_API GregorianCalendar: public Calendar { /** * @return TRUE if this calendar has the notion of a default century - * @internal + * @internal */ virtual UBool haveDefaultCentury() const; @@ -763,7 +765,7 @@ class U_I18N_API GregorianCalendar: public Calendar { /** * @return the beginning year of the default century - * @internal + * @internal */ virtual int32_t defaultCenturyStartYear() const; }; @@ -774,3 +776,4 @@ U_NAMESPACE_END #endif // _GREGOCAL //eof + diff --git a/deps/icu-small/source/i18n/unicode/measfmt.h b/deps/icu-small/source/i18n/unicode/measfmt.h index c177a963f80b63..37b331493114ca 100644 --- a/deps/icu-small/source/i18n/unicode/measfmt.h +++ b/deps/icu-small/source/i18n/unicode/measfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -19,7 +21,7 @@ #include "unicode/udat.h" /** - * \file + * \file * \brief C++ API: Formatter for measure objects. */ @@ -36,10 +38,10 @@ enum UMeasureFormatWidth { // Wide, short, and narrow must be first and in this order. /** * Spell out measure units. - * @stable ICU 53 + * @stable ICU 53 */ UMEASFMT_WIDTH_WIDE, - + /** * Abbreviate measure units. * @stable ICU 53 @@ -59,14 +61,16 @@ enum UMeasureFormatWidth { */ UMEASFMT_WIDTH_NUMERIC, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of values in this enum. - * @stable ICU 53 + * One more than the highest normal UMeasureFormatWidth value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UMEASFMT_WIDTH_COUNT = 4 +#endif // U_HIDE_DEPRECATED_API }; /** @stable ICU 53 */ -typedef enum UMeasureFormatWidth UMeasureFormatWidth; +typedef enum UMeasureFormatWidth UMeasureFormatWidth; U_NAMESPACE_BEGIN @@ -83,7 +87,7 @@ class ListFormatter; class DateFormat; /** - * + * * A formatter for measure objects. * * @see Format @@ -206,6 +210,21 @@ class U_I18N_API MeasureFormat : public Format { FieldPosition &pos, UErrorCode &status) const; +#ifndef U_HIDE_DRAFT_API + /** + * Gets the display name of the specified {@link MeasureUnit} corresponding to the current + * locale and format width. + * @param unit The unit for which to get a display name. + * @param status the error. + * @return The display name in the locale and width specified in + * {@link MeasureFormat#getInstance}, or null if there is no display name available + * for the specified unit. + * + * @draft ICU 58 + */ + UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const; +#endif /* U_HIDE_DRAFT_API */ + /** * Return a formatter for CurrencyAmount objects in the given @@ -260,7 +279,7 @@ class U_I18N_API MeasureFormat : public Format { */ MeasureFormat(); -#ifndef U_HIDE_INTERNAL_API +#ifndef U_HIDE_INTERNAL_API /** * ICU use only. @@ -318,7 +337,7 @@ class U_I18N_API MeasureFormat : public Format { const MeasureFormatCacheData *cache; const SharedNumberFormat *numberFormat; const SharedPluralRules *pluralRules; - UMeasureFormatWidth width; + UMeasureFormatWidth width; // Declared outside of MeasureFormatSharedData because ListFormatter // objects are relatively cheap to copy; therefore, they don't need to be diff --git a/deps/icu-small/source/i18n/unicode/measunit.h b/deps/icu-small/source/i18n/unicode/measunit.h index 8f8c92415b9dc2..afef83ed0e96c5 100644 --- a/deps/icu-small/source/i18n/unicode/measunit.h +++ b/deps/icu-small/source/i18n/unicode/measunit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -18,10 +20,10 @@ #include "unicode/unistr.h" /** - * \file + * \file * \brief C++ API: A unit for measuring a quantity. */ - + U_NAMESPACE_BEGIN class StringEnumeration; @@ -40,16 +42,16 @@ class U_I18N_API MeasureUnit: public UObject { * Default constructor. * @stable ICU 3.0 */ - MeasureUnit() : fTypeId(0), fSubTypeId(0) { + MeasureUnit() : fTypeId(0), fSubTypeId(0) { fCurrency[0] = 0; } - + /** * Copy constructor. * @stable ICU 3.0 */ MeasureUnit(const MeasureUnit &other); - + /** * Assignment operator. * @stable ICU 3.0 @@ -255,15 +257,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createRadian(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of angle: revolution. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createRevolutionAngle(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of area: acre. @@ -375,15 +375,13 @@ class U_I18N_API MeasureUnit: public UObject { static MeasureUnit *createPartPerMillion(UErrorCode &status); #endif /* U_HIDE_DRAFT_API */ -#ifndef U_HIDE_DRAFT_API /** * Returns unit of consumption: liter-per-100kilometers. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of consumption: liter-per-kilometer. @@ -411,6 +409,46 @@ class U_I18N_API MeasureUnit: public UObject { static MeasureUnit *createMilePerGallonImperial(UErrorCode &status); #endif /* U_HIDE_DRAFT_API */ +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: east. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createEast(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: north. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createNorth(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: south. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createSouth(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: west. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createWest(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + /** * Returns unit of digital: bit. * Caller owns returned value and must free it. @@ -491,15 +529,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createTerabyte(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of duration: century. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createCentury(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of duration: day. @@ -789,15 +825,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createMile(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of length: mile-scandinavian. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createMileScandinavian(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of length: millimeter. @@ -1039,15 +1073,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createKilometerPerHour(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of speed: knot. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createKnot(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of speed: meter-per-second. @@ -1081,15 +1113,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createFahrenheit(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of temperature: generic. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createGenericTemperature(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of temperature: kelvin. @@ -1187,15 +1217,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createCup(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of volume: cup-metric. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createCupMetric(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of volume: deciliter. @@ -1271,15 +1299,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createPint(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of volume: pint-metric. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createPintMetric(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of volume: quart. diff --git a/deps/icu-small/source/i18n/unicode/measure.h b/deps/icu-small/source/i18n/unicode/measure.h index a9c75989965ae6..2bd78d29f096c1 100644 --- a/deps/icu-small/source/i18n/unicode/measure.h +++ b/deps/icu-small/source/i18n/unicode/measure.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2015, International Business Machines @@ -14,10 +16,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: MeasureUnit object. */ - + #if !UCONFIG_NO_FORMATTING #include "unicode/fmtable.h" @@ -77,7 +79,7 @@ class U_I18N_API Measure: public UObject { * @stable ICU 3.0 */ virtual ~Measure(); - + /** * Equality operator. Return true if this object is equal * to the given object. diff --git a/deps/icu-small/source/i18n/unicode/msgfmt.h b/deps/icu-small/source/i18n/unicode/msgfmt.h index 5de91e41ff70c3..1a9973872d627d 100644 --- a/deps/icu-small/source/i18n/unicode/msgfmt.h +++ b/deps/icu-small/source/i18n/unicode/msgfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/unicode/numfmt.h b/deps/icu-small/source/i18n/unicode/numfmt.h index 072b566da13a18..d46e1fd68df48c 100644 --- a/deps/icu-small/source/i18n/unicode/numfmt.h +++ b/deps/icu-small/source/i18n/unicode/numfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines Corporation and others. @@ -71,7 +73,7 @@ class StringEnumeration; * #include "unicode/unistr.h" * #include "unicode/ustream.h" * using namespace std; - * + * * int main() { * double myNumber = 7.0; * UnicodeString myString; @@ -266,7 +268,7 @@ class U_I18N_API NumberFormat : public Format { * NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, @@ -389,7 +391,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(double number, UnicodeString& appendTo, @@ -441,7 +443,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int32_t number, UnicodeString& appendTo, @@ -494,7 +496,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, @@ -515,9 +517,9 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ - virtual UnicodeString& format(const StringPiece &number, + virtual UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter, UErrorCode& status) const; @@ -939,7 +941,7 @@ class U_I18N_API NumberFormat : public Format { * @stable ICU 2.6 */ const UChar* getCurrency() const; - + /** * Set a particular UDisplayContext value in the formatter, such as * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. diff --git a/deps/icu-small/source/i18n/unicode/numsys.h b/deps/icu-small/source/i18n/unicode/numsys.h index 2b21afc074ac5f..4cc083f69bc149 100644 --- a/deps/icu-small/source/i18n/unicode/numsys.h +++ b/deps/icu-small/source/i18n/unicode/numsys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines Corporation and @@ -40,7 +42,7 @@ U_NAMESPACE_BEGIN /** - * Defines numbering systems. A numbering system describes the scheme by which + * Defines numbering systems. A numbering system describes the scheme by which * numbers are to be presented to the end user. In its simplest form, a numbering * system describes the set of digit characters that are to be used to display * numbers, such as Western digits, Thai digits, Arabic-Indic digits, etc., in a @@ -92,7 +94,7 @@ class U_I18N_API NumberingSystem : public UObject { static NumberingSystem* U_EXPORT2 createInstance(UErrorCode& status); /** - * Create a numbering system using the specified radix, type, and description. + * Create a numbering system using the specified radix, type, and description. * @param radix The radix (base) for this numbering system. * @param isAlgorithmic TRUE if the numbering system is algorithmic rather than numeric. * @param description The string representing the set of digits used in a numeric system, or the name of the RBNF diff --git a/deps/icu-small/source/i18n/unicode/plurfmt.h b/deps/icu-small/source/i18n/unicode/plurfmt.h index 6b417b8d57a2f2..369a8b7cc1ee89 100644 --- a/deps/icu-small/source/i18n/unicode/plurfmt.h +++ b/deps/icu-small/source/i18n/unicode/plurfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2014, International Business Machines Corporation and @@ -385,7 +387,7 @@ class U_I18N_API PluralFormat : public Format { FieldPosition& pos, UErrorCode& status) const; -#ifndef U_HIDE_DEPRECATED_API +#ifndef U_HIDE_DEPRECATED_API /** * Sets the locale used by this PluraFormat object. * Note: Calling this method resets this PluraFormat object, @@ -451,7 +453,7 @@ class U_I18N_API PluralFormat : public Format { /** * Formats a plural message for a number taken from a Formattable object. * - * @param obj The object containing a number for which the + * @param obj The object containing a number for which the * plural message should be formatted. * The object must be of a numeric type. * @param appendTo output parameter to receive result. diff --git a/deps/icu-small/source/i18n/unicode/plurrule.h b/deps/icu-small/source/i18n/unicode/plurrule.h index 7abd6574086495..146e6bea831f09 100644 --- a/deps/icu-small/source/i18n/unicode/plurrule.h +++ b/deps/icu-small/source/i18n/unicode/plurrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/rbnf.h b/deps/icu-small/source/i18n/unicode/rbnf.h index 2cd02e70f14b6f..d41ffbe3816a67 100644 --- a/deps/icu-small/source/i18n/unicode/rbnf.h +++ b/deps/icu-small/source/i18n/unicode/rbnf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and others. @@ -54,7 +56,13 @@ enum URBNFRuleSetTag { URBNF_ORDINAL, URBNF_DURATION, URBNF_NUMBERING_SYSTEM, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal URBNFRuleSetTag value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ URBNF_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** @@ -951,7 +959,7 @@ class U_I18N_API RuleBasedNumberFormat : public NumberFormat { * @param value The UDisplayContext value to set. * @param status Input/output status. If at entry this indicates a failure * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. + * updated with any new status from the function. * @stable ICU 53 */ virtual void setContext(UDisplayContext value, UErrorCode& status); diff --git a/deps/icu-small/source/i18n/unicode/rbtz.h b/deps/icu-small/source/i18n/unicode/rbtz.h index 79805dd64eeac9..4df5850a88f60a 100644 --- a/deps/icu-small/source/i18n/unicode/rbtz.h +++ b/deps/icu-small/source/i18n/unicode/rbtz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and * @@ -10,7 +12,7 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: Rule based customizable time zone */ diff --git a/deps/icu-small/source/i18n/unicode/regex.h b/deps/icu-small/source/i18n/unicode/regex.h index 2333f96b25f2c0..d23a3ab4d7b7c1 100644 --- a/deps/icu-small/source/i18n/unicode/regex.h +++ b/deps/icu-small/source/i18n/unicode/regex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines @@ -344,7 +346,7 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { */ virtual RegexMatcher *matcher(const UnicodeString &input, UErrorCode &status) const; - + private: /** * Cause a compilation error if an application accidentally attempts to @@ -424,8 +426,8 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { * @stable ICU 2.4 */ virtual UnicodeString pattern() const; - - + + /** * Returns the regular expression from which this pattern was compiled. This method will work * even if the pattern was compiled from a UnicodeString. @@ -482,9 +484,9 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { * * If the delimiter pattern includes capture groups, the captured text will * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, + * with the fields. This is similar to Perl, but differs from Java, * which ignores the presence of capture groups in the pattern. - * + * * Trailing empty fields will always be returned, assuming sufficient * destination capacity. This differs from the default behavior for Java * and Perl where trailing empty fields are not returned. @@ -526,9 +528,9 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { * * If the delimiter pattern includes capture groups, the captured text will * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, + * with the fields. This is similar to Perl, but differs from Java, * which ignores the presence of capture groups in the pattern. - * + * * Trailing empty fields will always be returned, assuming sufficient * destination capacity. This differs from the default behavior for Java * and Perl where trailing empty fields are not returned. @@ -552,7 +554,7 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { * of fields, the trailing part of the input string, including any * field delimiters, is placed in the last destination string. * @param status A reference to a UErrorCode to receive any errors. - * @return The number of destination strings used. + * @return The number of destination strings used. * * @stable ICU 4.6 */ @@ -599,7 +601,7 @@ class U_I18N_API RegexPattern U_FINAL : public UObject { // >= this value. For some patterns, this calculated // value may be less than the true shortest // possible match. - + int32_t fFrameSize; // Size of a state stack frame in the // execution engine. @@ -779,7 +781,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { /** - * Resets the matcher, then attempts to match the input beginning + * Resets the matcher, then attempts to match the input beginning * at the specified startIndex, and extending to the end of the input. * The input region is reset to include the entire input string. * A successful match must extend to the end of the input. @@ -793,7 +795,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { /** * Attempts to match the input string, starting from the beginning of the region, - * against the pattern. Like the matches() method, this function + * against the pattern. Like the matches() method, this function * always starts at the beginning of the input region; * unlike that function, it does not require that the entire region be matched. * @@ -918,7 +920,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * * @stable ICU 4.6 */ - virtual UText *group(UText *dest, int64_t &group_len, UErrorCode &status) const; + virtual UText *group(UText *dest, int64_t &group_len, UErrorCode &status) const; /** * Returns a shallow clone of the entire live input string with the UText current native index @@ -1130,14 +1132,14 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * without changing any other aspect of the matching state. * The new and previous text strings must have the same content. * - * This function is intended for use in environments where ICU is operating on + * This function is intended for use in environments where ICU is operating on * strings that may move around in memory. It provides a mechanism for notifying * ICU that the string has been relocated, and providing a new UText to access the * string in its new position. * * Note that the regular expression implementation never copies the underlying text - * of a string being matched, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text + * of a string being matched, but always operates directly on the original text + * provided by the user. Refreshing simply drops the references to the old text * and replaces them with references to the new. * * Caution: this function is normally used only by very specialized, @@ -1147,7 +1149,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @param input The new (moved) text string. * @param status Receives errors detected by this function. * - * @stable ICU 4.8 + * @stable ICU 4.8 */ virtual RegexMatcher &refreshInputText(UText *input, UErrorCode &status); @@ -1175,7 +1177,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 2.4 */ virtual const UnicodeString &input() const; - + /** * Returns the input string being matched. This is the live input text; it should not be * altered or deleted. This method will work even if the input was originally supplied as @@ -1185,7 +1187,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 4.6 */ virtual UText *inputText() const; - + /** * Returns the input string being matched, either by copying it into the provided * UText parameter or by returning a shallow clone of the live input. Note that copying @@ -1197,7 +1199,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 4.6 */ virtual UText *getInput(UText *dest, UErrorCode &status) const; - + /** Sets the limits of this matcher's region. * The region is the part of the input string that will be searched to find a match. @@ -1219,14 +1221,14 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { */ virtual RegexMatcher ®ion(int64_t start, int64_t limit, UErrorCode &status); - /** + /** * Identical to region(start, limit, status) but also allows a start position without * resetting the region state. * @param regionStart The region start * @param regionLimit the limit of the region * @param startIndex The (native) index within the region bounds at which to begin searches. * @param status A reference to a UErrorCode to receive any errors. - * If startIndex is not within the specified region bounds, + * If startIndex is not within the specified region bounds, * U_INDEX_OUTOFBOUNDS_ERROR is returned. * @stable ICU 4.6 */ @@ -1303,14 +1305,14 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { **/ virtual RegexMatcher &useTransparentBounds(UBool b); - + /** * Return true if this matcher is using anchoring bounds. * By default, matchers use anchoring region bounds. * * @return TRUE if this matcher is using anchoring bounds. * @stable ICU 4.0 - */ + */ virtual UBool hasAnchoringBounds() const; @@ -1403,7 +1405,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 4.6 */ virtual UText *replaceAll(UText *replacement, UText *dest, UErrorCode &status); - + /** * Replaces the first substring of the input that matches @@ -1426,7 +1428,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 2.4 */ virtual UnicodeString replaceFirst(const UnicodeString &replacement, UErrorCode &status); - + /** * Replaces the first substring of the input that matches @@ -1453,8 +1455,8 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 4.6 */ virtual UText *replaceFirst(UText *replacement, UText *dest, UErrorCode &status); - - + + /** * Implements a replace operation intended to be used as part of an * incremental find-and-replace. @@ -1484,8 +1486,8 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { */ virtual RegexMatcher &appendReplacement(UnicodeString &dest, const UnicodeString &replacement, UErrorCode &status); - - + + /** * Implements a replace operation intended to be used as part of an * incremental find-and-replace. @@ -1602,10 +1604,10 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { UText *dest[], int32_t destCapacity, UErrorCode &status); - + /** * Set a processing time limit for match operations with this Matcher. - * + * * Some patterns, when matching certain strings, can run in exponential time. * For practical purposes, the match operation may appear to be in an * infinite loop. @@ -1656,7 +1658,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { * @stable ICU 4.0 */ virtual void setStackLimit(int32_t limit, UErrorCode &status); - + /** * Get the size of the heap storage available for use by the back tracking stack. * @@ -1688,7 +1690,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { /** * Get the callback function for this URegularExpression. * - * @param callback Out parameter, receives a pointer to the user-supplied + * @param callback Out parameter, receives a pointer to the user-supplied * callback function. * @param context Out parameter, receives the user context pointer that * was set when uregex_setMatchCallback() was called. @@ -1721,7 +1723,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { /** * Get the find progress callback function for this URegularExpression. * - * @param callback Out parameter, receives a pointer to the user-supplied + * @param callback Out parameter, receives a pointer to the user-supplied * callback function. * @param context Out parameter, receives the user context pointer that * was set when uregex_setFindProgressCallback() was called. @@ -1788,9 +1790,9 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { // Call user find callback function, if set. Return TRUE if operation should be interrupted. inline UBool findProgressInterrupt(int64_t matchIndex, UErrorCode &status); - + int64_t appendGroup(int32_t groupNum, UText *dest, UErrorCode &status) const; - + UBool findUsingChunk(UErrorCode &status); void MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &status); UBool isChunkWordBoundary(int32_t pos); @@ -1805,13 +1807,13 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { // Only created if the pattern contains backreferences. int64_t fInputLength; // Full length of the input text. int32_t fFrameSize; // The size of a frame in the backtrack stack. - + int64_t fRegionStart; // Start of the input region, default = 0. int64_t fRegionLimit; // End of input region, default to input.length. - + int64_t fAnchorStart; // Region bounds for anchoring operations (^ or $). int64_t fAnchorLimit; // See useAnchoringBounds - + int64_t fLookStart; // Region bounds for look-ahead/behind and int64_t fLookLimit; // and other boundary tests. See // useTransparentBounds @@ -1833,7 +1835,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { // or -1 if there was no previous match. int64_t fAppendPosition; // First position after the end of the previous // appendReplacement(). As described by the - // JavaDoc for Java Matcher, where it is called + // JavaDoc for Java Matcher, where it is called // "append position" UBool fHitEnd; // True if the last match touched the end of input. UBool fRequireEnd; // True if the last match required end-of-input @@ -1849,7 +1851,7 @@ class U_I18N_API RegexMatcher U_FINAL : public UObject { int32_t fTimeLimit; // Max time (in arbitrary steps) to let the // match engine run. Zero for unlimited. - + int32_t fTime; // Match time, accumulates while matching. int32_t fTickCounter; // Low bits counter for time. Counts down StateSaves. // Kept separately from fTime to keep as much diff --git a/deps/icu-small/source/i18n/unicode/region.h b/deps/icu-small/source/i18n/unicode/region.h index 2e1ac82a62f1d1..6bb6c746b10702 100644 --- a/deps/icu-small/source/i18n/unicode/region.h +++ b/deps/icu-small/source/i18n/unicode/region.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014-2016, International Business Machines Corporation and others. @@ -9,7 +11,7 @@ #define REGION_H /** - * \file + * \file * \brief C++ API: Region classes (territory containment) */ @@ -26,23 +28,23 @@ U_NAMESPACE_BEGIN /** - * Region is the class representing a Unicode Region Code, also known as a + * Region is the class representing a Unicode Region Code, also known as a * Unicode Region Subtag, which is defined based upon the BCP 47 standard. We often think of * "regions" as "countries" when defining the characteristics of a locale. Region codes There are different * types of region codes that are important to distinguish. *

    - * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or - * selected economic and other grouping" as defined in - * UN M.49 (http://unstats.un.org/unsd/methods/m49/m49regin.htm). - * These are typically 3-digit codes, but contain some 2-letter codes, such as the LDML code QO + * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or + * selected economic and other grouping" as defined in + * UN M.49 (http://unstats.un.org/unsd/methods/m49/m49regin.htm). + * These are typically 3-digit codes, but contain some 2-letter codes, such as the LDML code QO * added for Outlying Oceania. Not all UNM.49 codes are defined in LDML, but most of them are. * Macroregions are represented in ICU by one of three region types: WORLD ( region code 001 ), * CONTINENTS ( regions contained directly by WORLD ), and SUBCONTINENTS ( things contained directly * by a continent ). *

    * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also - * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code - * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate + * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code + * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate * codes. The codes are typically 2-letter codes aligned with the ISO 3166 standard, but BCP47 allows * for the use of 3-digit codes in the future. *

    @@ -53,7 +55,7 @@ U_NAMESPACE_BEGIN * usually due to a country splitting into multiple territories or changing its name. *

    * GROUPING - A widely understood grouping of territories that has a well defined membership such - * that a region code has been assigned for it. Some of these are UNM.49 codes that do't fall into + * that a region code has been assigned for it. Some of these are UNM.49 codes that do't fall into * the world/continent/sub-continent hierarchy, while others are just well known groupings that have * their own region code. Region "EU" (European Union) is one such region code that is a grouping. * Groupings will never be returned by the getContainingRegion() API, since a different type of region @@ -84,20 +86,20 @@ class U_I18N_API Region : public UObject { * @stable ICU 51 */ UBool operator!=(const Region &that) const; - + /** * Returns a pointer to a Region using the given region code. The region code can be either 2-letter ISO code, * 3-letter ISO code, UNM.49 numeric code, or other valid Unicode Region Code as defined by the LDML specification. * The identifier will be canonicalized internally using the supplemental metadata as defined in the CLDR. * If the region code is NULL or not recognized, the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ) - * @stable ICU 51 + * @stable ICU 51 */ static const Region* U_EXPORT2 getInstance(const char *region_code, UErrorCode &status); /** * Returns a pointer to a Region using the given numeric region code. If the numeric region code is not recognized, * the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ). - * @stable ICU 51 + * @stable ICU 51 */ static const Region* U_EXPORT2 getInstance (int32_t code, UErrorCode &status); @@ -106,12 +108,12 @@ class U_I18N_API Region : public UObject { * @stable ICU 55 */ static StringEnumeration* U_EXPORT2 getAvailable(URegionType type, UErrorCode &status); - + /** * Returns a pointer to the region that contains this region. Returns NULL if this region is code "001" (World) * or "ZZ" (Unknown region). For example, calling this method with region "IT" (Italy) returns the * region "039" (Southern Europe). - * @stable ICU 51 + * @stable ICU 51 */ const Region* getContainingRegion() const; @@ -121,7 +123,7 @@ class U_I18N_API Region : public UObject { * that matches the given type. Note: The URegionTypes = "URGN_GROUPING", "URGN_DEPRECATED", or "URGN_UNKNOWN" * are not appropriate for use in this API. NULL will be returned in this case. For example, calling this method * with region "IT" (Italy) for type "URGN_CONTINENT" returns the region "150" ( Europe ). - * @stable ICU 51 + * @stable ICU 51 */ const Region* getContainingRegion(URegionType type) const; @@ -144,10 +146,10 @@ class U_I18N_API Region : public UObject { * @stable ICU 55 */ StringEnumeration* getContainedRegions( URegionType type, UErrorCode &status ) const; - + /** * Returns true if this region contains the supplied other region anywhere in the region hierarchy. - * @stable ICU 51 + * @stable ICU 51 */ UBool contains(const Region &other) const; @@ -155,33 +157,33 @@ class U_I18N_API Region : public UObject { * For deprecated regions, return an enumeration over the IDs of the regions that are the preferred replacement * regions for this region. Returns null for a non-deprecated region. For example, calling this method with region * "SU" (Soviet Union) would return a list of the regions containing "RU" (Russia), "AM" (Armenia), "AZ" (Azerbaijan), etc... - * @stable ICU 55 + * @stable ICU 55 */ StringEnumeration* getPreferredValues(UErrorCode &status) const; /** * Return this region's canonical region code. - * @stable ICU 51 + * @stable ICU 51 */ const char* getRegionCode() const; /** * Return this region's numeric code. * Returns a negative value if the given region does not have a numeric code assigned to it. - * @stable ICU 51 + * @stable ICU 51 */ int32_t getNumericCode() const; /** * Returns the region type of this region. - * @stable ICU 51 + * @stable ICU 51 */ URegionType getType() const; #ifndef U_HIDE_INTERNAL_API /** * Cleans up statically allocated memory. - * @internal + * @internal */ static void cleanupRegionData(); #endif /* U_HIDE_INTERNAL_API */ @@ -205,12 +207,12 @@ class U_I18N_API Region : public UObject { * Initializes the region data from the ICU resource bundles. The region data * contains the basic relationships such as which regions are known, what the numeric * codes are, any known aliases, and the territory containment data. - * + * * If the region data has already loaded, then this method simply returns without doing * anything meaningful. */ - static void loadRegionData(UErrorCode &status); + static void U_CALLCONV loadRegionData(UErrorCode &status); }; diff --git a/deps/icu-small/source/i18n/unicode/reldatefmt.h b/deps/icu-small/source/i18n/unicode/reldatefmt.h index b336e2fe3ddc9f..e91d20667e39af 100644 --- a/deps/icu-small/source/i18n/unicode/reldatefmt.h +++ b/deps/icu-small/source/i18n/unicode/reldatefmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2014-2016, International Business Machines Corporation and @@ -23,7 +25,7 @@ * \brief C++ API: Formats relative dates such as "1 day ago" or "tomorrow" */ -#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION +#if !UCONFIG_NO_FORMATTING /** * Represents the unit for formatting a relative date. e.g "in 5 days" @@ -74,11 +76,13 @@ typedef enum UDateRelativeUnit { */ UDAT_RELATIVE_YEARS, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateRelativeUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_RELATIVE_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateRelativeUnit; /** @@ -161,11 +165,13 @@ typedef enum UDateAbsoluteUnit { */ UDAT_ABSOLUTE_NOW, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateAbsoluteUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_ABSOLUTE_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateAbsoluteUnit; /** @@ -211,13 +217,16 @@ typedef enum UDateDirection { */ UDAT_DIRECTION_PLAIN, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateDirection value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateDirection; +#if !UCONFIG_NO_BREAK_ITERATION U_NAMESPACE_BEGIN @@ -336,7 +345,7 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject { * @param style the format style. The UDAT_RELATIVE bit field has no effect. * @param capitalizationContext A value from UDisplayContext that pertains to * capitalization. - * @status Any error is returned here. + * @status Any error is returned here. * @stable ICU 54 */ RelativeDateTimeFormatter( @@ -410,7 +419,7 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject { * Format a combination of URelativeDateTimeUnit and numeric offset * using a numeric style, e.g. "1 week ago", "in 1 week", * "5 weeks ago", "in 5 weeks". - * + * * @param offset The signed offset for the specified unit. This * will be formatted according to this object's * NumberFormat object. @@ -509,5 +518,6 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject { U_NAMESPACE_END -#endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION*/ -#endif +#endif /* !UCONFIG_NO_BREAK_ITERATION */ +#endif /* !UCONFIG_NO_FORMATTING */ +#endif /* __RELDATEFMT_H */ diff --git a/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h b/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h index 710238a796d6b1..0035a6e69d1669 100644 --- a/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h +++ b/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2014-2016, International Business Machines @@ -15,7 +17,7 @@ #include "unicode/unistr.h" /** - * \file + * \file * \brief C++ API: Formats in scientific notation. */ @@ -217,4 +219,4 @@ U_NAMESPACE_END #endif /* !UCONFIG_NO_FORMATTING */ -#endif +#endif diff --git a/deps/icu-small/source/i18n/unicode/search.h b/deps/icu-small/source/i18n/unicode/search.h index 5b65e88b9c3e75..0acfcced34207a 100644 --- a/deps/icu-small/source/i18n/unicode/search.h +++ b/deps/icu-small/source/i18n/unicode/search.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011 IBM and others. All rights reserved. @@ -13,10 +15,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: SearchIterator object. */ - + #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION #include "unicode/uobject.h" @@ -38,27 +40,27 @@ U_NAMESPACE_BEGIN /** * - * SearchIterator is an abstract base class that provides + * SearchIterator is an abstract base class that provides * methods to search for a pattern within a text string. Instances of - * SearchIterator maintain a current position and scans over the - * target text, returning the indices the pattern is matched and the length + * SearchIterator maintain a current position and scans over the + * target text, returning the indices the pattern is matched and the length * of each match. *

    - * SearchIterator defines a protocol for text searching. - * Subclasses provide concrete implementations of various search algorithms. - * For example, StringSearch implements language-sensitive pattern - * matching based on the comparison rules defined in a - * RuleBasedCollator object. - *

    - * Other options for searching includes using a BreakIterator to restrict + * SearchIterator defines a protocol for text searching. + * Subclasses provide concrete implementations of various search algorithms. + * For example, StringSearch implements language-sensitive pattern + * matching based on the comparison rules defined in a + * RuleBasedCollator object. + *

    + * Other options for searching includes using a BreakIterator to restrict * the points at which matches are detected. *

    * SearchIterator provides an API that is similar to that of - * other text iteration classes such as BreakIterator. Using - * this class, it is easy to scan through text looking for all occurances of - * a given pattern. The following example uses a StringSearch - * object to find all instances of "fox" in the target string. Any other - * subclass of SearchIterator can be used in an identical + * other text iteration classes such as BreakIterator. Using + * this class, it is easy to scan through text looking for all occurances of + * a given pattern. The following example uses a StringSearch + * object to find all instances of "fox" in the target string. Any other + * subclass of SearchIterator can be used in an identical * manner. *

    
      * UnicodeString target("The quick brown fox jumped over the lazy fox");
    @@ -66,9 +68,9 @@ U_NAMESPACE_BEGIN
      *
      * SearchIterator *iter  = new StringSearch(pattern, target);
      * UErrorCode      error = U_ZERO_ERROR;
    - * for (int pos = iter->first(error); pos != USEARCH_DONE;
    + * for (int pos = iter->first(error); pos != USEARCH_DONE; 
      *                               pos = iter->next(error)) {
    - *     printf("Found match at %d pos, length is %d\n", pos,
    + *     printf("Found match at %d pos, length is %d\n", pos, 
      *                                             iter.getMatchLength());
      * }
      * 
    @@ -82,9 +84,9 @@ class U_I18N_API SearchIterator : public UObject { // public constructors and destructors ------------------------------- - /** - * Copy constructor that creates a SearchIterator instance with the same - * behavior, and iterating over the same text. + /** + * Copy constructor that creates a SearchIterator instance with the same + * behavior, and iterating over the same text. * @param other the SearchIterator instance to be copied. * @stable ICU 2.0 */ @@ -99,14 +101,14 @@ class U_I18N_API SearchIterator : public UObject { // public get and set methods ---------------------------------------- /** - * Sets the index to point to the given position, and clears any state + * Sets the index to point to the given position, and clears any state * that's affected. *

    - * This method takes the argument index and sets the position in the text - * string accordingly without checking if the index is pointing to a - * valid starting point to begin searching. + * This method takes the argument index and sets the position in the text + * string accordingly without checking if the index is pointing to a + * valid starting point to begin searching. * @param position within the text to be set. If position is less - * than or greater than the text range for searching, + * than or greater than the text range for searching, * an U_INDEX_OUTOFBOUNDS_ERROR will be returned * @param status for errors if it occurs * @stable ICU 2.0 @@ -124,7 +126,7 @@ class U_I18N_API SearchIterator : public UObject { virtual int32_t getOffset(void) const = 0; /** - * Sets the text searching attributes located in the enum + * Sets the text searching attributes located in the enum * USearchAttribute with values from the enum USearchAttributeValue. * USEARCH_DEFAULT can be used for all attributes for resetting. * @param attribute text attribute (enum USearchAttribute) to be set @@ -136,23 +138,23 @@ class U_I18N_API SearchIterator : public UObject { USearchAttributeValue value, UErrorCode &status); - /** + /** * Gets the text searching attributes * @param attribute text attribute (enum USearchAttribute) to be retrieve * @return text attribute value * @stable ICU 2.0 */ USearchAttributeValue getAttribute(USearchAttribute attribute) const; - + /** * Returns the index to the match in the text string that was searched. - * This call returns a valid result only after a successful call to + * This call returns a valid result only after a successful call to * first, next, previous, or last. - * Just after construction, or after a searching method returns + * Just after construction, or after a searching method returns * USEARCH_DONE, this method will return USEARCH_DONE. *

    * Use getMatchedLength to get the matched string length. - * @return index of a substring within the text string that is being + * @return index of a substring within the text string that is being * searched. * @see #first * @see #next @@ -163,10 +165,10 @@ class U_I18N_API SearchIterator : public UObject { int32_t getMatchedStart(void) const; /** - * Returns the length of text in the string which matches the search - * pattern. This call returns a valid result only after a successful call + * Returns the length of text in the string which matches the search + * pattern. This call returns a valid result only after a successful call * to first, next, previous, or last. - * Just after construction, or after a searching method returns + * Just after construction, or after a searching method returns * USEARCH_DONE, this method will return 0. * @return The length of the match in the target text, or 0 if there * is no match currently. @@ -177,13 +179,13 @@ class U_I18N_API SearchIterator : public UObject { * @stable ICU 2.0 */ int32_t getMatchedLength(void) const; - + /** - * Returns the text that was matched by the most recent call to + * Returns the text that was matched by the most recent call to * first, next, previous, or last. - * If the iterator is not pointing at a valid match (e.g. just after - * construction or after USEARCH_DONE has been returned, - * returns an empty string. + * If the iterator is not pointing at a valid match (e.g. just after + * construction or after USEARCH_DONE has been returned, + * returns an empty string. * @param result stores the matched string or an empty string if a match * is not found. * @see #first @@ -193,16 +195,16 @@ class U_I18N_API SearchIterator : public UObject { * @stable ICU 2.0 */ void getMatchedText(UnicodeString &result) const; - + /** * Set the BreakIterator that will be used to restrict the points - * at which matches are detected. The user is responsible for deleting + * at which matches are detected. The user is responsible for deleting * the breakiterator. - * @param breakiter A BreakIterator that will be used to restrict the - * points at which matches are detected. If a match is - * found, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match will be rejected and another will be searched + * @param breakiter A BreakIterator that will be used to restrict the + * points at which matches are detected. If a match is + * found, but the match's start or end index is not a + * boundary as determined by the BreakIterator, + * the match will be rejected and another will be searched * for. If this parameter is NULL, no break * detection is attempted. * @param status for errors if it occurs @@ -210,10 +212,10 @@ class U_I18N_API SearchIterator : public UObject { * @stable ICU 2.0 */ void setBreakIterator(BreakIterator *breakiter, UErrorCode &status); - + /** - * Returns the BreakIterator that is used to restrict the points at - * which matches are detected. This will be the same object that was + * Returns the BreakIterator that is used to restrict the points at + * which matches are detected. This will be the same object that was * passed to the constructor or to setBreakIterator. * Note that NULL is a legal value; it means that break * detection should not be attempted. @@ -224,34 +226,34 @@ class U_I18N_API SearchIterator : public UObject { const BreakIterator * getBreakIterator(void) const; /** - * Set the string text to be searched. Text iteration will hence begin at - * the start of the text string. This method is useful if you want to - * re-use an iterator to search for the same pattern within a different + * Set the string text to be searched. Text iteration will hence begin at + * the start of the text string. This method is useful if you want to + * re-use an iterator to search for the same pattern within a different * body of text. The user is responsible for deleting the text. * @param text string to be searched. - * @param status for errors. If the text length is 0, + * @param status for errors. If the text length is 0, * an U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ - virtual void setText(const UnicodeString &text, UErrorCode &status); + virtual void setText(const UnicodeString &text, UErrorCode &status); /** - * Set the string text to be searched. Text iteration will hence begin at - * the start of the text string. This method is useful if you want to - * re-use an iterator to search for the same pattern within a different + * Set the string text to be searched. Text iteration will hence begin at + * the start of the text string. This method is useful if you want to + * re-use an iterator to search for the same pattern within a different * body of text. *

    - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text + * Note: No parsing of the text within the CharacterIterator + * will be done during searching for this version. The block of text * in CharacterIterator will be used as it is. * The user is responsible for deleting the text. * @param text string iterator to be searched. - * @param status for errors if any. If the text length is 0 then an + * @param status for errors if any. If the text length is 0 then an * U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ virtual void setText(CharacterIterator &text, UErrorCode &status); - + /** * Return the string text to be searched. * @return text string to be searched. @@ -262,9 +264,9 @@ class U_I18N_API SearchIterator : public UObject { // operator overloading ---------------------------------------------- /** - * Equality operator. + * Equality operator. * @param that SearchIterator instance to be compared. - * @return TRUE if both BreakIterators are of the same class, have the + * @return TRUE if both BreakIterators are of the same class, have the * same behavior, terates over the same text and have the same * attributes. FALSE otherwise. * @stable ICU 2.0 @@ -272,7 +274,7 @@ class U_I18N_API SearchIterator : public UObject { virtual UBool operator==(const SearchIterator &that) const; /** - * Not-equal operator. + * Not-equal operator. * @param that SearchIterator instance to be compared. * @return FALSE if operator== returns TRUE, and vice versa. * @stable ICU 2.0 @@ -282,7 +284,7 @@ class U_I18N_API SearchIterator : public UObject { // public methods ---------------------------------------------------- /** - * Returns a copy of SearchIterator with the same behavior, and + * Returns a copy of SearchIterator with the same behavior, and * iterating over the same text, as this one. Note that all data will be * replicated, except for the text string to be searched. * @return cloned object @@ -291,14 +293,14 @@ class U_I18N_API SearchIterator : public UObject { virtual SearchIterator* safeClone(void) const = 0; /** - * Returns the first index at which the string text matches the search - * pattern. The iterator is adjusted so that its current index (as - * returned by getOffset) is the match position if one + * Returns the first index at which the string text matches the search + * pattern. The iterator is adjusted so that its current index (as + * returned by getOffset) is the match position if one * was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE * @param status for errors if it occurs - * @return The character index of the first match, or + * @return The character index of the first match, or * USEARCH_DONE if there are no matches. * @see #getOffset * @stable ICU 2.0 @@ -306,33 +308,33 @@ class U_I18N_API SearchIterator : public UObject { int32_t first(UErrorCode &status); /** - * Returns the first index equal or greater than position at which the - * string text matches the search pattern. The iterator is adjusted so - * that its current index (as returned by getOffset) is the + * Returns the first index equal or greater than position at which the + * string text matches the search pattern. The iterator is adjusted so + * that its current index (as returned by getOffset) is the * match position if one was found. * If a match is not found, USEARCH_DONE will be returned and the * iterator will be adjusted to the index USEARCH_DONE. * @param position where search if to start from. If position is less - * than or greater than the text range for searching, + * than or greater than the text range for searching, * an U_INDEX_OUTOFBOUNDS_ERROR will be returned * @param status for errors if it occurs - * @return The character index of the first match following - * position, or USEARCH_DONE if there are no + * @return The character index of the first match following + * position, or USEARCH_DONE if there are no * matches. * @see #getOffset * @stable ICU 2.0 */ int32_t following(int32_t position, UErrorCode &status); - + /** - * Returns the last index in the target text at which it matches the - * search pattern. The iterator is adjusted so that its current index - * (as returned by getOffset) is the match position if one was + * Returns the last index in the target text at which it matches the + * search pattern. The iterator is adjusted so that its current index + * (as returned by getOffset) is the match position if one was * found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE. * @param status for errors if it occurs - * @return The index of the first match, or USEARCH_DONE if + * @return The index of the first match, or USEARCH_DONE if * there are no matches. * @see #getOffset * @stable ICU 2.0 @@ -340,11 +342,11 @@ class U_I18N_API SearchIterator : public UObject { int32_t last(UErrorCode &status); /** - * Returns the first index less than position at which the string - * text matches the search pattern. The iterator is adjusted so that its - * current index (as returned by getOffset) is the match - * position if one was found. If a match is not found, - * USEARCH_DONE will be returned and the iterator will be + * Returns the first index less than position at which the string + * text matches the search pattern. The iterator is adjusted so that its + * current index (as returned by getOffset) is the match + * position if one was found. If a match is not found, + * USEARCH_DONE will be returned and the iterator will be * adjusted to the index USEARCH_DONE *

    * When USEARCH_OVERLAP option is off, the last index of the @@ -353,11 +355,11 @@ class U_I18N_API SearchIterator : public UObject { * position. * * @param position where search is to start from. If position is less - * than or greater than the text range for searching, + * than or greater than the text range for searching, * an U_INDEX_OUTOFBOUNDS_ERROR will be returned * @param status for errors if it occurs - * @return The character index of the first match preceding - * position, or USEARCH_DONE if there are + * @return The character index of the first match preceding + * position, or USEARCH_DONE if there are * no matches. * @see #getOffset * @stable ICU 2.0 @@ -367,10 +369,10 @@ class U_I18N_API SearchIterator : public UObject { /** * Returns the index of the next point at which the text matches the * search pattern, starting from the current position - * The iterator is adjusted so that its current index (as returned by + * The iterator is adjusted so that its current index (as returned by * getOffset) is the match position if one was found. * If a match is not found, USEARCH_DONE will be returned and - * the iterator will be adjusted to a position after the end of the text + * the iterator will be adjusted to a position after the end of the text * string. * @param status for errors if it occurs * @return The index of the next match after the current position, @@ -381,9 +383,9 @@ class U_I18N_API SearchIterator : public UObject { int32_t next(UErrorCode &status); /** - * Returns the index of the previous point at which the string text + * Returns the index of the previous point at which the string text * matches the search pattern, starting at the current position. - * The iterator is adjusted so that its current index (as returned by + * The iterator is adjusted so that its current index (as returned by * getOffset) is the match position if one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE @@ -395,12 +397,12 @@ class U_I18N_API SearchIterator : public UObject { */ int32_t previous(UErrorCode &status); - /** + /** * Resets the iteration. - * Search will begin at the start of the text string if a forward - * iteration is initiated before a backwards iteration. Otherwise if a - * backwards iteration is initiated before a forwards iteration, the - * search will begin at the end of the text string. + * Search will begin at the start of the text string if a forward + * iteration is initiated before a backwards iteration. Otherwise if a + * backwards iteration is initiated before a forwards iteration, the + * search will begin at the end of the text string. * @stable ICU 2.0 */ virtual void reset(); @@ -423,7 +425,7 @@ class U_I18N_API SearchIterator : public UObject { * @stable ICU 2.0 */ BreakIterator *m_breakiterator_; - + /** * Unicode string version of the search text * @stable ICU 2.0 @@ -442,35 +444,35 @@ class U_I18N_API SearchIterator : public UObject { /** * Constructor for use by subclasses. * @param text The target text to be searched. - * @param breakiter A {@link BreakIterator} that is used to restrict the - * points at which matches are detected. If - * handleNext or handlePrev finds a - * match, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match is rejected and handleNext or - * handlePrev is called again. If this parameter - * is NULL, no break detection is attempted. + * @param breakiter A {@link BreakIterator} that is used to restrict the + * points at which matches are detected. If + * handleNext or handlePrev finds a + * match, but the match's start or end index is not a + * boundary as determined by the BreakIterator, + * the match is rejected and handleNext or + * handlePrev is called again. If this parameter + * is NULL, no break detection is attempted. * @see #handleNext * @see #handlePrev * @stable ICU 2.0 */ - SearchIterator(const UnicodeString &text, + SearchIterator(const UnicodeString &text, BreakIterator *breakiter = NULL); /** * Constructor for use by subclasses. *

    - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text + * Note: No parsing of the text within the CharacterIterator + * will be done during searching for this version. The block of text * in CharacterIterator will be used as it is. * @param text The target text to be searched. - * @param breakiter A {@link BreakIterator} that is used to restrict the - * points at which matches are detected. If - * handleNext or handlePrev finds a - * match, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match is rejected and handleNext or - * handlePrev is called again. If this parameter + * @param breakiter A {@link BreakIterator} that is used to restrict the + * points at which matches are detected. If + * handleNext or handlePrev finds a + * match, but the match's start or end index is not a + * boundary as determined by the BreakIterator, + * the match is rejected and handleNext or + * handlePrev is called again. If this parameter * is NULL, no break detection is attempted. * @see #handleNext * @see #handlePrev @@ -494,20 +496,20 @@ class U_I18N_API SearchIterator : public UObject { * subclasses to provide different search algorithms. *

    * If a match is found, the implementation should return the index at - * which the match starts and should call - * setMatchLength with the number of characters - * in the target text that make up the match. If no match is found, the + * which the match starts and should call + * setMatchLength with the number of characters + * in the target text that make up the match. If no match is found, the * method should return USEARCH_DONE. *

    - * @param position The index in the target text at which the search + * @param position The index in the target text at which the search * should start. * @param status for error codes if it occurs. - * @return index at which the match starts, else if match is not found + * @return index at which the match starts, else if match is not found * USEARCH_DONE is returned * @see #setMatchLength * @stable ICU 2.0 */ - virtual int32_t handleNext(int32_t position, UErrorCode &status) + virtual int32_t handleNext(int32_t position, UErrorCode &status) = 0; /** @@ -516,20 +518,20 @@ class U_I18N_API SearchIterator : public UObject { * subclasses to provide different search algorithms. *

    * If a match is found, the implementation should return the index at - * which the match starts and should call - * setMatchLength with the number of characters - * in the target text that make up the match. If no match is found, the + * which the match starts and should call + * setMatchLength with the number of characters + * in the target text that make up the match. If no match is found, the * method should return USEARCH_DONE. *

    - * @param position The index in the target text at which the search + * @param position The index in the target text at which the search * should start. * @param status for error codes if it occurs. - * @return index at which the match starts, else if match is not found + * @return index at which the match starts, else if match is not found * USEARCH_DONE is returned * @see #setMatchLength * @stable ICU 2.0 */ - virtual int32_t handlePrev(int32_t position, UErrorCode &status) + virtual int32_t handlePrev(int32_t position, UErrorCode &status) = 0; /** @@ -557,7 +559,7 @@ class U_I18N_API SearchIterator : public UObject { virtual void setMatchStart(int32_t position); /** - * sets match not found + * sets match not found * @stable ICU 2.0 */ void setMatchNotFound(); @@ -565,10 +567,11 @@ class U_I18N_API SearchIterator : public UObject { inline UBool SearchIterator::operator!=(const SearchIterator &that) const { - return !operator==(that); + return !operator==(that); } U_NAMESPACE_END #endif /* #if !UCONFIG_NO_COLLATION */ #endif + diff --git a/deps/icu-small/source/i18n/unicode/selfmt.h b/deps/icu-small/source/i18n/unicode/selfmt.h old mode 100644 new mode 100755 index 635144bb9b35d6..37a8f2b82192fc --- a/deps/icu-small/source/i18n/unicode/selfmt.h +++ b/deps/icu-small/source/i18n/unicode/selfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/simpletz.h b/deps/icu-small/source/i18n/unicode/simpletz.h index a0639d6a708d40..d71fe369210528 100644 --- a/deps/icu-small/source/i18n/unicode/simpletz.h +++ b/deps/icu-small/source/i18n/unicode/simpletz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2013, International Business Machines * @@ -27,10 +29,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: SimpleTimeZone is a concrete subclass of TimeZone. */ - + #if !UCONFIG_NO_FORMATTING #include "unicode/basictz.h" diff --git a/deps/icu-small/source/i18n/unicode/smpdtfmt.h b/deps/icu-small/source/i18n/unicode/smpdtfmt.h index b7fa42054dc9a3..e6cf28d22be00d 100644 --- a/deps/icu-small/source/i18n/unicode/smpdtfmt.h +++ b/deps/icu-small/source/i18n/unicode/smpdtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. @@ -651,7 +653,7 @@ class SimpleDateFormatMutableNFs; * = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success ); * GregorianCalendar cal(success); * UDate currentTime_1 = cal.getTime(success); - * FieldPosition fp(0); + * FieldPosition fp(FieldPosition::DONT_CARE); * UnicodeString dateString; * formatter->format( currentTime_1, dateString, fp ); * cout << "result: " << dateString << endl; @@ -999,6 +1001,12 @@ class U_I18N_API SimpleDateFormat: public DateFormat { * (Presumably, letters that would be more mnemonic in that locale's * language.) This function would produce a pattern using those * letters. + *

    + * Note: This implementation depends on DateFormatSymbols::getLocalPatternChars() + * to get localized format pattern characters. ICU does not include + * localized pattern character data, therefore, unless user sets localized + * pattern characters manually, this method returns the same result as + * toPattern(). * * @param result Receives the localized pattern. * @param status Output param set to success/failure code on diff --git a/deps/icu-small/source/i18n/unicode/sortkey.h b/deps/icu-small/source/i18n/unicode/sortkey.h index b4629d4e241ccc..814e29c4b3d512 100644 --- a/deps/icu-small/source/i18n/unicode/sortkey.h +++ b/deps/icu-small/source/i18n/unicode/sortkey.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 1996-2014, International Business Machines Corporation and others. @@ -24,10 +26,10 @@ #include "unicode/utypes.h" /** - * \file - * \brief C++ API: Keys for comparing strings multiple times. + * \file + * \brief C++ API: Keys for comparing strings multiple times. */ - + #if !UCONFIG_NO_COLLATION #include "unicode/uobject.h" @@ -182,7 +184,7 @@ class U_I18N_API CollationKey : public UObject { uint8_t* toByteArray(int32_t& count) const; #endif -#ifndef U_HIDE_DEPRECATED_API +#ifndef U_HIDE_DEPRECATED_API /** * Convenience method which does a string(bit-wise) comparison of the * two collation keys. diff --git a/deps/icu-small/source/i18n/unicode/stsearch.h b/deps/icu-small/source/i18n/unicode/stsearch.h index 64317608b5acf2..ec50151e235e96 100644 --- a/deps/icu-small/source/i18n/unicode/stsearch.h +++ b/deps/icu-small/source/i18n/unicode/stsearch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 IBM and others. All rights reserved. @@ -13,10 +15,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: Service for searching text based on RuleBasedCollator. */ - + #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION #include "unicode/tblcoll.h" @@ -25,7 +27,7 @@ U_NAMESPACE_BEGIN -/** +/** * * StringSearch is a SearchIterator that provides * language-sensitive text searching based on the comparison rules defined @@ -42,7 +44,7 @@ U_NAMESPACE_BEGIN *
    * A pattern string P matches a text string S at the offsets [start, end] * if - *

    + * 
     
      * option 1. Some canonical equivalent of P matches some canonical equivalent
      *           of S'
      * option 2. P matches S' and if P starts or ends with a combining mark,
    @@ -51,10 +53,10 @@ U_NAMESPACE_BEGIN
      * 
    * Option 2. will be the default. *

    - * This search has APIs similar to that of other text iteration mechanisms - * such as the break iterators in BreakIterator. Using these - * APIs, it is easy to scan through text looking for all occurrences of - * a given pattern. This search iterator allows changing of direction by + * This search has APIs similar to that of other text iteration mechanisms + * such as the break iterators in BreakIterator. Using these + * APIs, it is easy to scan through text looking for all occurrences of + * a given pattern. This search iterator allows changing of direction by * calling a reset followed by a next or previous. * Though a direction change can occur without calling reset first, * this operation comes with some speed penalty. @@ -97,7 +99,7 @@ U_NAMESPACE_BEGIN * from getCollator and using the APIs in coll.h. * Lastly to update StringSearch to the new collator attributes, * reset has to be called. - *

    + *

    * Restriction:
    * Currently there are no composite characters that consists of a * character with combining class > 0 before a character with combining @@ -114,10 +116,10 @@ U_NAMESPACE_BEGIN * UErrorCode error = U_ZERO_ERROR; * StringSearch iter(pattern, target, Locale::getUS(), NULL, status); * for (int pos = iter.first(error); - * pos != USEARCH_DONE; + * pos != USEARCH_DONE; * pos = iter.next(error)) * { - * printf("Found match at %d pos, length is %d\n", pos, + * printf("Found match at %d pos, length is %d\n", pos, * iter.getMatchLength()); * } *

    @@ -136,120 +138,120 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator // public constructors and destructors -------------------------------- /** - * Creating a StringSearch instance using the argument locale - * language rule set. A collator will be created in the process, which - * will be owned by this instance and will be deleted during + * Creating a StringSearch instance using the argument locale + * language rule set. A collator will be created in the process, which + * will be owned by this instance and will be deleted during * destruction * @param pattern The text for which this object will search. * @param text The text in which to search for the pattern. - * @param locale A locale which defines the language-sensitive - * comparison rules used to determine whether text in the - * pattern and target matches. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, + * @param locale A locale which defines the language-sensitive + * comparison rules used to determine whether text in the + * pattern and target matches. + * @param breakiter A BreakIterator object used to constrain + * the matches that are found. Matches whose start and end + * indices in the target text are not boundaries as + * determined by the BreakIterator are + * ignored. If this behavior is not desired, * NULL can be passed in instead. * @param status for errors if any. If pattern or text is NULL, or if - * either the length of pattern or text is 0 then an + * either the length of pattern or text is 0 then an * U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ StringSearch(const UnicodeString &pattern, const UnicodeString &text, - const Locale &locale, + const Locale &locale, BreakIterator *breakiter, UErrorCode &status); /** - * Creating a StringSearch instance using the argument collator - * language rule set. Note, user retains the ownership of this collator, + * Creating a StringSearch instance using the argument collator + * language rule set. Note, user retains the ownership of this collator, * it does not get destroyed during this instance's destruction. * @param pattern The text for which this object will search. * @param text The text in which to search for the pattern. - * @param coll A RuleBasedCollator object which defines - * the language-sensitive comparison rules used to - * determine whether text in the pattern and target + * @param coll A RuleBasedCollator object which defines + * the language-sensitive comparison rules used to + * determine whether text in the pattern and target * matches. User is responsible for the clearing of this * object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, + * @param breakiter A BreakIterator object used to constrain + * the matches that are found. Matches whose start and end + * indices in the target text are not boundaries as + * determined by the BreakIterator are + * ignored. If this behavior is not desired, * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or + * @param status for errors if any. If either the length of pattern or * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ - StringSearch(const UnicodeString &pattern, + StringSearch(const UnicodeString &pattern, const UnicodeString &text, - RuleBasedCollator *coll, + RuleBasedCollator *coll, BreakIterator *breakiter, UErrorCode &status); /** - * Creating a StringSearch instance using the argument locale - * language rule set. A collator will be created in the process, which - * will be owned by this instance and will be deleted during + * Creating a StringSearch instance using the argument locale + * language rule set. A collator will be created in the process, which + * will be owned by this instance and will be deleted during * destruction *

    - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text + * Note: No parsing of the text within the CharacterIterator + * will be done during searching for this version. The block of text * in CharacterIterator will be used as it is. * @param pattern The text for which this object will search. * @param text The text iterator in which to search for the pattern. - * @param locale A locale which defines the language-sensitive - * comparison rules used to determine whether text in the - * pattern and target matches. User is responsible for + * @param locale A locale which defines the language-sensitive + * comparison rules used to determine whether text in the + * pattern and target matches. User is responsible for * the clearing of this object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, + * @param breakiter A BreakIterator object used to constrain + * the matches that are found. Matches whose start and end + * indices in the target text are not boundaries as + * determined by the BreakIterator are + * ignored. If this behavior is not desired, * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or + * @param status for errors if any. If either the length of pattern or * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ StringSearch(const UnicodeString &pattern, CharacterIterator &text, - const Locale &locale, + const Locale &locale, BreakIterator *breakiter, UErrorCode &status); /** - * Creating a StringSearch instance using the argument collator - * language rule set. Note, user retains the ownership of this collator, + * Creating a StringSearch instance using the argument collator + * language rule set. Note, user retains the ownership of this collator, * it does not get destroyed during this instance's destruction. *

    - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text + * Note: No parsing of the text within the CharacterIterator + * will be done during searching for this version. The block of text * in CharacterIterator will be used as it is. * @param pattern The text for which this object will search. * @param text The text in which to search for the pattern. - * @param coll A RuleBasedCollator object which defines - * the language-sensitive comparison rules used to - * determine whether text in the pattern and target + * @param coll A RuleBasedCollator object which defines + * the language-sensitive comparison rules used to + * determine whether text in the pattern and target * matches. User is responsible for the clearing of this * object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, + * @param breakiter A BreakIterator object used to constrain + * the matches that are found. Matches whose start and end + * indices in the target text are not boundaries as + * determined by the BreakIterator are + * ignored. If this behavior is not desired, * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or + * @param status for errors if any. If either the length of pattern or * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ StringSearch(const UnicodeString &pattern, CharacterIterator &text, - RuleBasedCollator *coll, + RuleBasedCollator *coll, BreakIterator *breakiter, UErrorCode &status); /** - * Copy constructor that creates a StringSearch instance with the same + * Copy constructor that creates a StringSearch instance with the same * behavior, and iterating over the same text. * @param that StringSearch instance to be copied. * @stable ICU 2.0 @@ -287,10 +289,10 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator StringSearch & operator=(const StringSearch &that); /** - * Equality operator. + * Equality operator. * @param that instance to be compared. - * @return TRUE if both instances have the same attributes, - * breakiterators, collators and iterate over the same text + * @return TRUE if both instances have the same attributes, + * breakiterators, collators and iterate over the same text * while looking for the same pattern. * @stable ICU 2.0 */ @@ -299,14 +301,14 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator // public get and set methods ---------------------------------------- /** - * Sets the index to point to the given position, and clears any state + * Sets the index to point to the given position, and clears any state * that's affected. *

    - * This method takes the argument index and sets the position in the text - * string accordingly without checking if the index is pointing to a - * valid starting point to begin searching. + * This method takes the argument index and sets the position in the text + * string accordingly without checking if the index is pointing to a + * valid starting point to begin searching. * @param position within the text to be set. If position is less - * than or greater than the text range for searching, + * than or greater than the text range for searching, * an U_INDEX_OUTOFBOUNDS_ERROR will be returned * @param status for errors if it occurs * @stable ICU 2.0 @@ -325,28 +327,28 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator /** * Set the target text to be searched. - * Text iteration will hence begin at the start of the text string. - * This method is - * useful if you want to re-use an iterator to search for the same + * Text iteration will hence begin at the start of the text string. + * This method is + * useful if you want to re-use an iterator to search for the same * pattern within a different body of text. * @param text text string to be searched - * @param status for errors if any. If the text length is 0 then an + * @param status for errors if any. If the text length is 0 then an * U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ virtual void setText(const UnicodeString &text, UErrorCode &status); - + /** * Set the target text to be searched. - * Text iteration will hence begin at the start of the text string. - * This method is - * useful if you want to re-use an iterator to search for the same + * Text iteration will hence begin at the start of the text string. + * This method is + * useful if you want to re-use an iterator to search for the same * pattern within a different body of text. - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text + * Note: No parsing of the text within the CharacterIterator + * will be done during searching for this version. The block of text * in CharacterIterator will be used as it is. * @param text text string to be searched - * @param status for errors if any. If the text length is 0 then an + * @param status for errors if any. If the text length is 0 then an * U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ @@ -356,33 +358,33 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator * Gets the collator used for the language rules. *

    * Caller may modify but must not delete the RuleBasedCollator! - * Modifications to this collator will affect the original collator passed in to + * Modifications to this collator will affect the original collator passed in to * the StringSearch> constructor or to setCollator, if any. * @return collator used for string search * @stable ICU 2.0 */ RuleBasedCollator * getCollator() const; - + /** - * Sets the collator used for the language rules. User retains the - * ownership of this collator, thus the responsibility of deletion lies + * Sets the collator used for the language rules. User retains the + * ownership of this collator, thus the responsibility of deletion lies * with the user. The iterator's position will not be changed by this method. - * @param coll collator + * @param coll collator * @param status for errors if any * @stable ICU 2.0 */ void setCollator(RuleBasedCollator *coll, UErrorCode &status); - + /** * Sets the pattern used for matching. * The iterator's position will not be changed by this method. * @param pattern search pattern to be found - * @param status for errors if any. If the pattern length is 0 then an + * @param status for errors if any. If the pattern length is 0 then an * U_ILLEGAL_ARGUMENT_ERROR is returned. * @stable ICU 2.0 */ void setPattern(const UnicodeString &pattern, UErrorCode &status); - + /** * Gets the search pattern. * @return pattern used for matching @@ -392,18 +394,18 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator // public methods ---------------------------------------------------- - /** + /** * Reset the iteration. - * Search will begin at the start of the text string if a forward - * iteration is initiated before a backwards iteration. Otherwise if - * a backwards iteration is initiated before a forwards iteration, the + * Search will begin at the start of the text string if a forward + * iteration is initiated before a backwards iteration. Otherwise if + * a backwards iteration is initiated before a forwards iteration, the * search will begin at the end of the text string. * @stable ICU 2.0 */ virtual void reset(); /** - * Returns a copy of StringSearch with the same behavior, and + * Returns a copy of StringSearch with the same behavior, and * iterating over the same text, as this one. Note that all data will be * replicated, except for the user-specified collator and the * breakiterator. @@ -411,7 +413,7 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator * @stable ICU 2.0 */ virtual SearchIterator * safeClone(void) const; - + /** * ICU "poor man's RTTI", returns a UClassID for the actual class. * @@ -432,23 +434,23 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator /** * Search forward for matching text, starting at a given location. - * Clients should not call this method directly; instead they should + * Clients should not call this method directly; instead they should * call {@link SearchIterator#next }. *

    * If a match is found, this method returns the index at which the match - * starts and calls {@link SearchIterator#setMatchLength } with the number - * of characters in the target text that make up the match. If no match + * starts and calls {@link SearchIterator#setMatchLength } with the number + * of characters in the target text that make up the match. If no match * is found, the method returns USEARCH_DONE. *

    - * The StringSearch is adjusted so that its current index - * (as returned by {@link #getOffset }) is the match position if one was + * The StringSearch is adjusted so that its current index + * (as returned by {@link #getOffset }) is the match position if one was * found. * If a match is not found, USEARCH_DONE will be returned and * the StringSearch will be adjusted to the index USEARCH_DONE. - * @param position The index in the target text at which the search + * @param position The index in the target text at which the search * starts * @param status for errors if any occurs - * @return The index at which the matched text in the target starts, or + * @return The index at which the matched text in the target starts, or * USEARCH_DONE if no match was found. * @stable ICU 2.0 */ @@ -460,24 +462,24 @@ class U_I18N_API StringSearch U_FINAL : public SearchIterator * SearchIterator.previous(), which this method overrides. *

    * If a match is found, this method returns the index at which the match - * starts and calls {@link SearchIterator#setMatchLength } with the number - * of characters in the target text that make up the match. If no match + * starts and calls {@link SearchIterator#setMatchLength } with the number + * of characters in the target text that make up the match. If no match * is found, the method returns USEARCH_DONE. *

    - * The StringSearch is adjusted so that its current index - * (as returned by {@link #getOffset }) is the match position if one was + * The StringSearch is adjusted so that its current index + * (as returned by {@link #getOffset }) is the match position if one was * found. * If a match is not found, USEARCH_DONE will be returned and * the StringSearch will be adjusted to the index USEARCH_DONE. - * @param position The index in the target text at which the search + * @param position The index in the target text at which the search * starts. * @param status for errors if any occurs - * @return The index at which the matched text in the target starts, or + * @return The index at which the matched text in the target starts, or * USEARCH_DONE if no match was found. * @stable ICU 2.0 */ virtual int32_t handlePrev(int32_t position, UErrorCode &status); - + private : StringSearch(); // default constructor not implemented @@ -501,3 +503,4 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_COLLATION */ #endif + diff --git a/deps/icu-small/source/i18n/unicode/tblcoll.h b/deps/icu-small/source/i18n/unicode/tblcoll.h index 020c4b96062ad7..c48ea38c130a2f 100644 --- a/deps/icu-small/source/i18n/unicode/tblcoll.h +++ b/deps/icu-small/source/i18n/unicode/tblcoll.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2016, International Business Machines Corporation and @@ -854,7 +856,7 @@ class U_I18N_API RuleBasedCollator : public Collator { */ UBool isUnsafe(UChar32 c) const; - static void computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); + static void U_CALLCONV computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); UBool initMaxExpansions(UErrorCode &errorCode) const; void setFastLatinOptions(CollationSettings &ownedSettings) const; diff --git a/deps/icu-small/source/i18n/unicode/timezone.h b/deps/icu-small/source/i18n/unicode/timezone.h index 6c72095537f75f..8cfe7e5220e691 100644 --- a/deps/icu-small/source/i18n/unicode/timezone.h +++ b/deps/icu-small/source/i18n/unicode/timezone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************* * Copyright (c) 1997-2016, International Business Machines Corporation * and others. All Rights Reserved. @@ -30,7 +32,7 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: TimeZone object */ @@ -180,10 +182,10 @@ class U_I18N_API TimeZone : public UObject { * @param zoneType The system time zone type. * @param region The ISO 3166 two-letter country code or UN M.49 * three-digit area code. When NULL, no filtering - * done by region. + * done by region. * @param rawOffset An offset from GMT in milliseconds, ignoring * the effect of daylight savings time, if any. - * When NULL, no filtering done by zone offset. + * When NULL, no filtering done by zone offset. * @param ec Output param to filled in with a success or * an error. * @return an enumeration object, owned by the caller. @@ -676,7 +678,7 @@ class U_I18N_API TimeZone : public UObject { * @stable ICU 2.0 */ UnicodeString& getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const; - + /** * Queries if this time zone uses daylight savings time. * @return true if this time zone uses daylight savings time, @@ -708,7 +710,7 @@ class U_I18N_API TimeZone : public UObject { * always returns a BasicTimeZone) provides a series of methods allowing * historic and future time zone rule iteration, so you can check if daylight saving * time is observed or not within a given period. - * + * * @stable ICU 2.0 */ virtual UBool useDaylightTime(void) const = 0; @@ -767,7 +769,7 @@ class U_I18N_API TimeZone : public UObject { * @stable ICU 2.0 */ virtual UClassID getDynamicClassID(void) const = 0; - + /** * Returns the amount of time to be added to local standard time * to get local wall clock time. @@ -792,7 +794,7 @@ class U_I18N_API TimeZone : public UObject { * When the time zone is not associated with a specific location, * for example - "Etc/UTC", "EST5EDT", then this method returns * "001" (UN M.49 area code for World). - * + * * @param id The system time zone ID. * @param region Output buffer for receiving the region code. * @param capacity The size of the output buffer. @@ -800,10 +802,10 @@ class U_I18N_API TimeZone : public UObject { * is not a known system time zone ID, * U_ILLEGAL_ARGUMENT_ERROR is set. * @return The length of the output region code. - * @stable ICU 4.8 - */ - static int32_t U_EXPORT2 getRegion(const UnicodeString& id, - char *region, int32_t capacity, UErrorCode& status); + * @stable ICU 4.8 + */ + static int32_t U_EXPORT2 getRegion(const UnicodeString& id, + char *region, int32_t capacity, UErrorCode& status); protected: diff --git a/deps/icu-small/source/i18n/unicode/tmunit.h b/deps/icu-small/source/i18n/unicode/tmunit.h index e398ab96bdcf23..a19a1f3c1760c3 100644 --- a/deps/icu-small/source/i18n/unicode/tmunit.h +++ b/deps/icu-small/source/i18n/unicode/tmunit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation, * @@ -41,7 +43,13 @@ class U_I18N_API TimeUnit: public MeasureUnit { UTIMEUNIT_HOUR, UTIMEUNIT_MINUTE, UTIMEUNIT_SECOND, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UTimeUnitFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTIMEUNIT_FIELD_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** diff --git a/deps/icu-small/source/i18n/unicode/tmutamt.h b/deps/icu-small/source/i18n/unicode/tmutamt.h index ad8047a1f1a4de..ff132f8a4c2cde 100644 --- a/deps/icu-small/source/i18n/unicode/tmutamt.h +++ b/deps/icu-small/source/i18n/unicode/tmutamt.h @@ -1,9 +1,11 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2010, Google, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* - */ + */ #ifndef __TMUTAMT_H__ #define __TMUTAMT_H__ @@ -32,27 +34,27 @@ class U_I18N_API TimeUnitAmount: public Measure { public: /** * Construct TimeUnitAmount object with the given number and the - * given time unit. + * given time unit. * @param number a numeric object; number.isNumeric() must be TRUE * @param timeUnitField the time unit field of a time unit - * @param status the input-output error code. + * @param status the input-output error code. * If the number is not numeric or the timeUnitField * is not valid, * then this will be set to a failing value: * U_ILLEGAL_ARGUMENT_ERROR. * @stable ICU 4.2 */ - TimeUnitAmount(const Formattable& number, + TimeUnitAmount(const Formattable& number, TimeUnit::UTimeUnitFields timeUnitField, UErrorCode& status); /** * Construct TimeUnitAmount object with the given numeric amount and the - * given time unit. + * given time unit. * @param amount a numeric amount. * @param timeUnitField the time unit field on which a time unit amount * object will be created. - * @param status the input-output error code. + * @param status the input-output error code. * If the timeUnitField is not valid, * then this will be set to a failing value: * U_ILLEGAL_ARGUMENT_ERROR. @@ -63,7 +65,7 @@ class U_I18N_API TimeUnitAmount: public Measure { /** - * Copy constructor + * Copy constructor * @stable ICU 4.2 */ TimeUnitAmount(const TimeUnitAmount& other); @@ -77,22 +79,22 @@ class U_I18N_API TimeUnitAmount: public Measure { /** - * Clone. + * Clone. * @return a polymorphic clone of this object. The result will have the same class as returned by getDynamicClassID(). * @stable ICU 4.2 */ virtual UObject* clone() const; - + /** * Destructor * @stable ICU 4.2 */ virtual ~TimeUnitAmount(); - - /** - * Equality operator. + + /** + * Equality operator. * @param other the object to compare to. * @return true if this object is equal to the given object. * @stable ICU 4.2 @@ -100,8 +102,8 @@ class U_I18N_API TimeUnitAmount: public Measure { virtual UBool operator==(const UObject& other) const; - /** - * Not-equality operator. + /** + * Not-equality operator. * @param other the object to compare to. * @return true if this object is not equal to the given object. * @stable ICU 4.2 @@ -154,7 +156,7 @@ class U_I18N_API TimeUnitAmount: public Measure { -inline UBool +inline UBool TimeUnitAmount::operator!=(const UObject& other) const { return !operator==(other); } diff --git a/deps/icu-small/source/i18n/unicode/tmutfmt.h b/deps/icu-small/source/i18n/unicode/tmutfmt.h index 728ff13219a012..b90d4a096d71bb 100644 --- a/deps/icu-small/source/i18n/unicode/tmutfmt.h +++ b/deps/icu-small/source/i18n/unicode/tmutfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2014, Google, International Business Machines Corporation @@ -50,6 +52,8 @@ U_NAMESPACE_BEGIN class Hashtable; class UVector; +struct TimeUnitFormatReadSink; + /** * Format or parse a TimeUnitAmount, using plural rules for the units where available. * @@ -227,6 +231,7 @@ class U_I18N_API TimeUnitFormat: public MeasureFormat { // UTIMEUNIT_YEAR. static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status); + friend struct TimeUnitFormatReadSink; }; inline UBool diff --git a/deps/icu-small/source/i18n/unicode/translit.h b/deps/icu-small/source/i18n/unicode/translit.h index d41b5c0a80edc8..b06879100208b7 100644 --- a/deps/icu-small/source/i18n/unicode/translit.h +++ b/deps/icu-small/source/i18n/unicode/translit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines @@ -13,10 +15,10 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: Tranforms text from one format to another. */ - + #if !UCONFIG_NO_TRANSLITERATION #include "unicode/uobject.h" diff --git a/deps/icu-small/source/i18n/unicode/tzfmt.h b/deps/icu-small/source/i18n/unicode/tzfmt.h index 9b39bf0ee43c6e..faf4b814f43961 100644 --- a/deps/icu-small/source/i18n/unicode/tzfmt.h +++ b/deps/icu-small/source/i18n/unicode/tzfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and @@ -238,7 +240,7 @@ typedef enum UTimeZoneFormatParseOption { * When parsing a time zone display name in UTZFMT_STYLE_SPECIFIC_SHORT, * look for the IANA tz database compatible zone abbreviations in addition * to the localized names coming from the {@link TimeZoneNames} currently - * used by the {@link TimeZoneFormat}. + * used by the {@link TimeZoneFormat}. * @stable ICU 54 */ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS = 0x02 diff --git a/deps/icu-small/source/i18n/unicode/tznames.h b/deps/icu-small/source/i18n/unicode/tznames.h index cbc9c1f3a847e3..8861a7d026b89b 100644 --- a/deps/icu-small/source/i18n/unicode/tznames.h +++ b/deps/icu-small/source/i18n/unicode/tznames.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2011-2015, International Business Machines Corporation and +* Copyright (C) 2011-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -133,7 +135,7 @@ class U_I18N_API TimeZoneNames : public UObject { virtual ~TimeZoneNames(); /** - * Return true if the given TimeZoneNames objects are emantically equal. + * Return true if the given TimeZoneNames objects are semantically equal. * @param other the object to be compared with. * @return Return TRUE if the given Format objects are semantically equal. * @stable ICU 50 @@ -288,6 +290,18 @@ class U_I18N_API TimeZoneNames : public UObject { */ virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const; + /** + * @internal For specific users only until proposed publicly. + * @deprecated This API is ICU internal only. + */ + virtual void loadAllDisplayNames(UErrorCode& status); + + /** + * @internal For specific users only until proposed publicly. + * @deprecated This API is ICU internal only. + */ + virtual void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + /** * MatchInfoCollection represents a collection of time zone name matches used by * {@link TimeZoneNames#find}. diff --git a/deps/icu-small/source/i18n/unicode/tzrule.h b/deps/icu-small/source/i18n/unicode/tzrule.h index c153afa1e94da2..51b3ae17d24460 100644 --- a/deps/icu-small/source/i18n/unicode/tzrule.h +++ b/deps/icu-small/source/i18n/unicode/tzrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and * @@ -8,7 +10,7 @@ #define TZRULE_H /** - * \file + * \file * \brief C++ API: Time zone rule classes */ @@ -26,7 +28,7 @@ U_NAMESPACE_BEGIN * TimeZoneRule is a class representing a rule for time zone. * TimeZoneRule has a set of time zone attributes, such as zone name, * raw offset (UTC offset for standard time) and daylight saving time offset. - * + * * @stable ICU 3.8 */ class U_I18N_API TimeZoneRule : public UObject { @@ -370,7 +372,7 @@ class U_I18N_API InitialTimeZoneRule : public TimeZoneRule { * AnnualTimeZoneRule is a class used for representing a time zone * rule which takes effect annually. The calenday system used for the rule is * is based on Gregorian calendar - * + * * @stable ICU 3.8 */ class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule { @@ -610,7 +612,7 @@ class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule { /** * TimeArrayTimeZoneRule represents a time zone rule whose start times are * defined by an array of milliseconds since the standard base time. - * + * * @stable ICU 3.8 */ class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule { @@ -685,7 +687,7 @@ class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule { * Gets the time type of the start times used by this rule. The return value * is either DateTimeRule::WALL_TIME or STANDARD_TIME * or UTC_TIME. - * + * * @return The time type used of the start times used by this rule. * @stable ICU 3.8 */ diff --git a/deps/icu-small/source/i18n/unicode/tztrans.h b/deps/icu-small/source/i18n/unicode/tztrans.h index f5934d91254525..53c34fef90f2bb 100644 --- a/deps/icu-small/source/i18n/unicode/tztrans.h +++ b/deps/icu-small/source/i18n/unicode/tztrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and * @@ -8,7 +10,7 @@ #define TZTRANS_H /** - * \file + * \file * \brief C++ API: Time zone transition */ @@ -33,7 +35,7 @@ class U_I18N_API TimeZoneTransition : public UObject { /** * Constructs a TimeZoneTransition with the time and the rules before/after * the transition. - * + * * @param time The time of transition in milliseconds since the base time. * @param from The time zone rule used before the transition. * @param to The time zone rule used after the transition. diff --git a/deps/icu-small/source/i18n/unicode/ucal.h b/deps/icu-small/source/i18n/unicode/ucal.h index 8f3bf71f99a587..29c084574e16be 100644 --- a/deps/icu-small/source/i18n/unicode/ucal.h +++ b/deps/icu-small/source/i18n/unicode/ucal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines Corporation and @@ -152,7 +154,7 @@ */ typedef void* UCalendar; -/** Possible types of UCalendars +/** Possible types of UCalendars * @stable ICU 2.0 */ enum UCalendarType { @@ -177,25 +179,25 @@ enum UCalendarType { /** @stable ICU 2.0 */ typedef enum UCalendarType UCalendarType; -/** Possible fields in a UCalendar +/** Possible fields in a UCalendar * @stable ICU 2.0 */ enum UCalendarDateFields { - /** - * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar. + /** + * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar. * This is a calendar-specific value. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_ERA, /** * Field number indicating the year. This is a calendar-specific value. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_YEAR, /** - * Field number indicating the month. This is a calendar-specific value. + * Field number indicating the month. This is a calendar-specific value. * The first month of the year is * JANUARY; the last depends on the number of months in a year. * @see #UCAL_JANUARY @@ -211,7 +213,7 @@ enum UCalendarDateFields { * @see #UCAL_NOVEMBER * @see #UCAL_DECEMBER * @see #UCAL_UNDECIMBER - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_MONTH, @@ -224,7 +226,7 @@ enum UCalendarDateFields { * the year. * @see ucal_getAttribute * @see ucal_setAttribute - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_WEEK_OF_YEAR, @@ -239,7 +241,7 @@ enum UCalendarDateFields { * @see ucal_setAttribute * @see #UCAL_FIRST_DAY_OF_WEEK * @see #UCAL_MINIMAL_DAYS_IN_FIRST_WEEK - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_WEEK_OF_MONTH, @@ -248,14 +250,14 @@ enum UCalendarDateFields { * day of the month. This is a synonym for DAY_OF_MONTH. * The first day of the month has value 1. * @see #UCAL_DAY_OF_MONTH - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_DATE, /** * Field number indicating the day * number within the current year. The first day of the year has value 1. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_DAY_OF_YEAR, @@ -271,7 +273,7 @@ enum UCalendarDateFields { * @see #UCAL_THURSDAY * @see #UCAL_FRIDAY * @see #UCAL_SATURDAY - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_DAY_OF_WEEK, @@ -296,7 +298,7 @@ enum UCalendarDateFields { * DAY_OF_WEEK_IN_MONTH 5 and the end of 4. * @see #UCAL_DAY_OF_WEEK * @see #UCAL_WEEK_OF_MONTH - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_DAY_OF_WEEK_IN_MONTH, @@ -307,7 +309,7 @@ enum UCalendarDateFields { * @see #UCAL_AM * @see #UCAL_PM * @see #UCAL_HOUR - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_AM_PM, @@ -318,7 +320,7 @@ enum UCalendarDateFields { * E.g., at 10:04:15.250 PM the HOUR is 10. * @see #UCAL_AM_PM * @see #UCAL_HOUR_OF_DAY - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_HOUR, @@ -327,7 +329,7 @@ enum UCalendarDateFields { * hour of the day. HOUR_OF_DAY is used for the 24-hour clock. * E.g., at 10:04:15.250 PM the HOUR_OF_DAY is 22. * @see #UCAL_HOUR - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_HOUR_OF_DAY, @@ -335,7 +337,7 @@ enum UCalendarDateFields { * Field number indicating the * minute within the hour. * E.g., at 10:04:15.250 PM the UCAL_MINUTE is 4. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_MINUTE, @@ -343,7 +345,7 @@ enum UCalendarDateFields { * Field number indicating the * second within the minute. * E.g., at 10:04:15.250 PM the UCAL_SECOND is 15. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_SECOND, @@ -351,26 +353,26 @@ enum UCalendarDateFields { * Field number indicating the * millisecond within the second. * E.g., at 10:04:15.250 PM the UCAL_MILLISECOND is 250. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_MILLISECOND, /** * Field number indicating the * raw offset from GMT in milliseconds. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_ZONE_OFFSET, /** * Field number indicating the * daylight savings offset in milliseconds. - * @stable ICU 2.6 + * @stable ICU 2.6 */ UCAL_DST_OFFSET, - + /** - * Field number + * Field number * indicating the extended year corresponding to the * UCAL_WEEK_OF_YEAR field. This may be one greater or less * than the value of UCAL_EXTENDED_YEAR. @@ -379,7 +381,7 @@ enum UCalendarDateFields { UCAL_YEAR_WOY, /** - * Field number + * Field number * indicating the localized day of week. This will be a value from 1 * to 7 inclusive, with 1 being the localized first day of the week. * @stable ICU 2.6 @@ -387,15 +389,15 @@ enum UCalendarDateFields { UCAL_DOW_LOCAL, /** - * Year of this calendar system, encompassing all supra-year fields. For example, + * Year of this calendar system, encompassing all supra-year fields. For example, * in Gregorian/Julian calendars, positive Extended Year values indicate years AD, - * 1 BC = 0 extended, 2 BC = -1 extended, and so on. - * @stable ICU 2.8 + * 1 BC = 0 extended, 2 BC = -1 extended, and so on. + * @stable ICU 2.8 */ UCAL_EXTENDED_YEAR, /** - * Field number + * Field number * indicating the modified Julian day number. This is different from * the conventional Julian day number in two regards. First, it * demarcates days at local zone midnight, rather than noon GMT. @@ -404,13 +406,13 @@ enum UCalendarDateFields { * the date-related fields. * @stable ICU 2.8 */ - UCAL_JULIAN_DAY, + UCAL_JULIAN_DAY, /** - * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves exactly - * like a composite of all time-related fields, not including the zone fields. As such, + * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves exactly + * like a composite of all time-related fields, not including the zone fields. As such, * it also reflects discontinuities of those fields on DST transition days. On a day - * of DST onset, it will jump forward. On a day of DST cessation, it will jump + * of DST onset, it will jump forward. On a day of DST cessation, it will jump * backward. This reflects the fact that it must be combined with the DST_OFFSET field * to obtain a unique local time value. * @stable ICU 2.8 @@ -423,10 +425,12 @@ enum UCalendarDateFields { */ UCAL_IS_LEAP_MONTH, - /** - * Field count - * @stable ICU 2.6 - */ + // Do not conditionalize with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of Calendar, DateFormat, and other objects + /** + * One more than the highest normal UCalendarDateFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCAL_FIELD_COUNT, /** @@ -447,7 +451,7 @@ typedef enum UCalendarDateFields UCalendarDateFields; * who create locale resources for the field of first-day-of-week should be aware of * this. For instance, in US locale, first-day-of-week is set to 1, i.e., UCAL_SUNDAY. */ -/** Possible days of the week in a UCalendar +/** Possible days of the week in a UCalendar * @stable ICU 2.0 */ enum UCalendarDaysOfWeek { @@ -508,7 +512,7 @@ enum UCalendarMonths { /** @stable ICU 2.0 */ typedef enum UCalendarMonths UCalendarMonths; -/** Possible AM/PM values in a UCalendar +/** Possible AM/PM values in a UCalendar * @stable ICU 2.0 */ enum UCalendarAMPMs { @@ -548,13 +552,13 @@ enum USystemTimeZoneType { /** @stable ICU 4.8 */ typedef enum USystemTimeZoneType USystemTimeZoneType; -/** +/** * Create an enumeration over system time zone IDs with the given - * filter conditions. + * filter conditions. * @param zoneType The system time zone type. * @param region The ISO 3166 two-letter country code or UN M.49 * three-digit area code. When NULL, no filtering - * done by region. + * done by region. * @param rawOffset An offset from GMT in milliseconds, ignoring the * effect of daylight savings time, if any. When NULL, * no filtering done by zone offset. @@ -563,7 +567,7 @@ typedef enum USystemTimeZoneType USystemTimeZoneType; * using enum_close(), or NULL upon failure. In case of failure, * *ec will indicate the error. * @stable ICU 4.8 - */ + */ U_STABLE UEnumeration* U_EXPORT2 ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region, const int32_t* rawOffset, UErrorCode* ec); @@ -657,7 +661,7 @@ ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec); * @return The current date and time. * @stable ICU 2.0 */ -U_STABLE UDate U_EXPORT2 +U_STABLE UDate U_EXPORT2 ucal_getNow(void); /** @@ -669,7 +673,7 @@ ucal_getNow(void); * the UCalendar returned by the function is initialized with GMT zone with TimeZone ID * UCAL_UNKNOWN_ZONE_ID ("Etc/Unknown") without any errors/warnings. If you want * to check if a TimeZone ID is valid prior to this function, use ucal_getCanonicalTimeZoneID. - * + * * @param zoneID The desired TimeZone ID. If 0, use the default time zone. * @param len The length of zoneID, or -1 if null-terminated. * @param locale The desired locale @@ -683,7 +687,7 @@ ucal_getNow(void); * @see #UCAL_UNKNOWN_ZONE_ID * @stable ICU 2.0 */ -U_STABLE UCalendar* U_EXPORT2 +U_STABLE UCalendar* U_EXPORT2 ucal_open(const UChar* zoneID, int32_t len, const char* locale, @@ -696,7 +700,7 @@ ucal_open(const UChar* zoneID, * @param cal The UCalendar to close. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_close(UCalendar *cal); #if U_SHOW_CPLUSPLUS_API @@ -726,7 +730,7 @@ U_NAMESPACE_END * @return A pointer to a UCalendar identical to cal. * @stable ICU 4.0 */ -U_STABLE UCalendar* U_EXPORT2 +U_STABLE UCalendar* U_EXPORT2 ucal_clone(const UCalendar* cal, UErrorCode* status); @@ -739,30 +743,30 @@ ucal_clone(const UCalendar* cal, * @param status A pointer to an UErrorCode to receive any errors. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setTimeZone(UCalendar* cal, const UChar* zoneID, int32_t len, UErrorCode* status); -/** - * Get the ID of the UCalendar's time zone. - * - * @param cal The UCalendar to query. - * @param result Receives the UCalendar's time zone ID. - * @param resultLength The maximum size of result. - * @param status Receives the status. - * @return The total buffer size needed; if greater than resultLength, the output was truncated. - * @stable ICU 51 - */ -U_STABLE int32_t U_EXPORT2 +/** + * Get the ID of the UCalendar's time zone. + * + * @param cal The UCalendar to query. + * @param result Receives the UCalendar's time zone ID. + * @param resultLength The maximum size of result. + * @param status Receives the status. + * @return The total buffer size needed; if greater than resultLength, the output was truncated. + * @stable ICU 51 + */ +U_STABLE int32_t U_EXPORT2 ucal_getTimeZoneID(const UCalendar *cal, UChar *result, int32_t resultLength, UErrorCode *status); /** - * Possible formats for a UCalendar's display name + * Possible formats for a UCalendar's display name * @stable ICU 2.0 */ enum UCalendarDisplayNameType { @@ -792,7 +796,7 @@ typedef enum UCalendarDisplayNameType UCalendarDisplayNameType; * @return The total buffer size needed; if greater than resultLength, the output was truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getTimeZoneDisplayName(const UCalendar* cal, UCalendarDisplayNameType type, const char* locale, @@ -808,7 +812,7 @@ ucal_getTimeZoneDisplayName(const UCalendar* cal, * @return TRUE if cal is currently in daylight savings time, FALSE otherwise * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucal_inDaylightTime(const UCalendar* cal, UErrorCode* status ); @@ -859,7 +863,7 @@ U_STABLE UDate U_EXPORT2 ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode); /** - * Types of UCalendar attributes + * Types of UCalendar attributes * @stable ICU 2.0 */ enum UCalendarAttribute { @@ -936,7 +940,7 @@ typedef enum UCalendarWallTimeOption UCalendarWallTimeOption; * @see ucal_setAttribute * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getAttribute(const UCalendar* cal, UCalendarAttribute attr); @@ -951,7 +955,7 @@ ucal_getAttribute(const UCalendar* cal, * @see ucal_getAttribute * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setAttribute(UCalendar* cal, UCalendarAttribute attr, int32_t newValue); @@ -965,7 +969,7 @@ ucal_setAttribute(UCalendar* cal, * @see ucal_countAvailable * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 ucal_getAvailable(int32_t localeIndex); /** @@ -976,7 +980,7 @@ ucal_getAvailable(int32_t localeIndex); * @see ucal_getAvailable * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_countAvailable(void); /** @@ -990,7 +994,7 @@ ucal_countAvailable(void); * @see ucal_setDateTime * @stable ICU 2.0 */ -U_STABLE UDate U_EXPORT2 +U_STABLE UDate U_EXPORT2 ucal_getMillis(const UCalendar* cal, UErrorCode* status); @@ -1005,7 +1009,7 @@ ucal_getMillis(const UCalendar* cal, * @see ucal_setDateTime * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setMillis(UCalendar* cal, UDate dateTime, UErrorCode* status ); @@ -1024,7 +1028,7 @@ ucal_setMillis(UCalendar* cal, * @see ucal_setDateTime * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setDate(UCalendar* cal, int32_t year, int32_t month, @@ -1048,7 +1052,7 @@ ucal_setDate(UCalendar* cal, * @see ucal_setDate * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setDateTime(UCalendar* cal, int32_t year, int32_t month, @@ -1067,7 +1071,7 @@ ucal_setDateTime(UCalendar* cal, * @return TRUE if cal1 and cal2 are equivalent, FALSE otherwise. * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucal_equivalentTo(const UCalendar* cal1, const UCalendar* cal2); @@ -1089,7 +1093,7 @@ ucal_equivalentTo(const UCalendar* cal1, * @see ucal_roll * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_add(UCalendar* cal, UCalendarDateFields field, int32_t amount, @@ -1119,7 +1123,7 @@ ucal_add(UCalendar* cal, * @see ucal_add * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_roll(UCalendar* cal, UCalendarDateFields field, int32_t amount, @@ -1141,7 +1145,7 @@ ucal_roll(UCalendar* cal, * @see ucal_clear * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_get(const UCalendar* cal, UCalendarDateFields field, UErrorCode* status ); @@ -1161,7 +1165,7 @@ ucal_get(const UCalendar* cal, * @see ucal_clear * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_set(UCalendar* cal, UCalendarDateFields field, int32_t value); @@ -1181,7 +1185,7 @@ ucal_set(UCalendar* cal, * @see ucal_clear * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucal_isSet(const UCalendar* cal, UCalendarDateFields field); @@ -1199,7 +1203,7 @@ ucal_isSet(const UCalendar* cal, * @see ucal_clear * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_clearField(UCalendar* cal, UCalendarDateFields field); @@ -1213,11 +1217,11 @@ ucal_clearField(UCalendar* cal, * @see ucal_clearField * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_clear(UCalendar* calendar); /** - * Possible limit values for a UCalendar + * Possible limit values for a UCalendar * @stable ICU 2.0 */ enum UCalendarLimitType { @@ -1252,7 +1256,7 @@ typedef enum UCalendarLimitType UCalendarLimitType; * @return The requested value. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getLimit(const UCalendar* cal, UCalendarDateFields field, UCalendarLimitType type, @@ -1260,7 +1264,7 @@ ucal_getLimit(const UCalendar* cal, /** Get the locale for this calendar object. You can choose between valid and actual locale. * @param cal The calendar object - * @param type type of the locale we're looking for (valid or actual) + * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale name * @stable ICU 2.8 @@ -1337,24 +1341,24 @@ ucal_getKeywordValuesForLocale(const char* key, enum UCalendarWeekdayType { /** * Designates a full weekday (no part of the day is included in the weekend). - * @stable ICU 4.4 + * @stable ICU 4.4 */ UCAL_WEEKDAY, /** * Designates a full weekend day (the entire day is included in the weekend). - * @stable ICU 4.4 + * @stable ICU 4.4 */ UCAL_WEEKEND, /** * Designates a day that starts as a weekday and transitions to the weekend. * Call ucal_getWeekendTransition() to get the time of transition. - * @stable ICU 4.4 + * @stable ICU 4.4 */ UCAL_WEEKEND_ONSET, /** * Designates a day that starts as the weekend and transitions to a weekday. * Call ucal_getWeekendTransition() to get the time of transition. - * @stable ICU 4.4 + * @stable ICU 4.4 */ UCAL_WEEKEND_CEASE }; @@ -1426,7 +1430,7 @@ ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status); * * A typical way of using this function is to call it first with the largest field of interest, then * with progressively smaller fields. - * + * * @param cal The UCalendar to compare and update. * @param target The target date to compare to the current calendar setting. * @param field The field to compare; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, @@ -1437,7 +1441,7 @@ ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status); * @return The date difference for the specified field. * @stable ICU 4.8 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getFieldDifference(UCalendar* cal, UDate target, UCalendarDateFields field, @@ -1491,7 +1495,7 @@ typedef enum UTimeZoneTransitionType UTimeZoneTransitionType; /**< @stable ICU 5 * otherwise. * @stable ICU 50 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType type, UDate* transition, UErrorCode* status); diff --git a/deps/icu-small/source/i18n/unicode/ucol.h b/deps/icu-small/source/i18n/unicode/ucol.h index 25f90408c92ecc..eae88f8ce69d94 100644 --- a/deps/icu-small/source/i18n/unicode/ucol.h +++ b/deps/icu-small/source/i18n/unicode/ucol.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (c) 1996-2015, International Business Machines Corporation and others. @@ -21,7 +23,7 @@ /** * \file - * \brief C API: Collator + * \brief C API: Collator * *

    Collator C API

    * @@ -29,12 +31,12 @@ * string comparison. You use this service to build * searching and sorting routines for natural language text. *

    - * For more information about the collation service see + * For more information about the collation service see * the User Guide. *

    - * Collation service provides correct sorting orders for most locales supported in ICU. + * Collation service provides correct sorting orders for most locales supported in ICU. * If specific data for a locale is not available, the orders eventually falls back - * to the CLDR root sort order. + * to the CLDR root sort order. *

    * Sort ordering may be customized by providing your own set of rules. For more on * this subject see the @@ -50,7 +52,7 @@ * For usage in C programs. */ struct UCollator; -/** structure representing a collator object instance +/** structure representing a collator object instance * @stable ICU 2.0 */ typedef struct UCollator UCollator; @@ -65,7 +67,7 @@ typedef struct UCollator UCollator; * target string in the ucol_strcoll() method. * @see ucol_strcoll() *

    - * Possible values for a comparison result + * Possible values for a comparison result * @stable ICU 2.0 */ typedef enum { @@ -80,8 +82,8 @@ typedef enum { /** Enum containing attribute values for controling collation behavior. * Here are all the allowable values. Not every attribute can take every value. The only - * universal value is UCOL_DEFAULT, which resets the attribute value to the predefined - * value for that locale + * universal value is UCOL_DEFAULT, which resets the attribute value to the predefined + * value for that locale * @stable ICU 2.0 */ typedef enum { @@ -103,28 +105,33 @@ typedef enum { UCOL_IDENTICAL=15, UCOL_STRENGTH_LIMIT, - /** Turn the feature off - works for UCOL_FRENCH_COLLATION, + /** Turn the feature off - works for UCOL_FRENCH_COLLATION, UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE & UCOL_DECOMPOSITION_MODE*/ UCOL_OFF = 16, - /** Turn the feature on - works for UCOL_FRENCH_COLLATION, + /** Turn the feature on - works for UCOL_FRENCH_COLLATION, UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE & UCOL_DECOMPOSITION_MODE*/ UCOL_ON = 17, - + /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be shifted */ UCOL_SHIFTED = 20, /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be non ignorable */ UCOL_NON_IGNORABLE = 21, - /** Valid for UCOL_CASE_FIRST - + /** Valid for UCOL_CASE_FIRST - lower case sorts before upper case */ UCOL_LOWER_FIRST = 24, /** upper case sorts before lower case */ UCOL_UPPER_FIRST = 25, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColAttributeValue value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_ATTRIBUTE_VALUE_COUNT - +#endif // U_HIDE_DEPRECATED_API } UColAttributeValue; /** @@ -141,62 +148,63 @@ typedef enum { * A special reordering code that is used to specify the default * reordering codes for a locale. * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_DEFAULT = -1, /** * A special reordering code that is used to specify no reordering codes. * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_NONE = USCRIPT_UNKNOWN, /** * A special reordering code that is used to specify all other codes used for * reordering except for the codes lised as UColReorderCode values and those * listed explicitly in a reordering. * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_OTHERS = USCRIPT_UNKNOWN, /** * Characters with the space property. * This is equivalent to the rule value "space". * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_SPACE = 0x1000, /** * The first entry in the enumeration of reordering groups. This is intended for use in * range checking and enumeration of the reorder codes. * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_FIRST = UCOL_REORDER_CODE_SPACE, /** * Characters with the punctuation property. * This is equivalent to the rule value "punct". * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_PUNCTUATION = 0x1001, /** * Characters with the symbol property. * This is equivalent to the rule value "symbol". * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_SYMBOL = 0x1002, /** * Characters with the currency property. * This is equivalent to the rule value "currency". * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_CURRENCY = 0x1003, /** * Characters with the digit property. * This is equivalent to the rule value "digit". * @stable ICU 4.8 - */ + */ UCOL_REORDER_CODE_DIGIT = 0x1004, - /** - * The limit of the reorder codes. This is intended for use in range checking - * and enumeration of the reorder codes. - * @stable ICU 4.8 - */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColReorderCode value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_REORDER_CODE_LIMIT = 0x1005 +#endif // U_HIDE_DEPRECATED_API } UColReorderCode; /** @@ -204,7 +212,7 @@ typedef enum { * level to UCOL_PRIMARY to ignore secondary and tertiary differences. * Use this to set the strength of a Collator object. * Example of primary difference, "abc" < "abd" - * + * * Diacritical differences on the same base letter represent a secondary * difference. Set comparison level to UCOL_SECONDARY to ignore tertiary * differences. Use this to set the strength of a Collator object. @@ -220,7 +228,7 @@ typedef enum { * unicode spellings. UCOL_IDENTICAL. * For example, "ä" == "ä". * - * UCollationStrength is also used to determine the strength of sort keys + * UCollationStrength is also used to determine the strength of sort keys * generated from UCollator objects * These values can be now found in the UColAttributeValue enum. * @stable ICU 2.0 @@ -228,7 +236,7 @@ typedef enum { typedef UColAttributeValue UCollationStrength; /** Attributes that collation service understands. All the attributes can take UCOL_DEFAULT - * value, as well as the values specific to each one. + * value, as well as the values specific to each one. * @stable ICU 2.0 */ typedef enum { @@ -238,32 +246,32 @@ typedef enum { * weights in the order they appear. * @stable ICU 2.0 */ - UCOL_FRENCH_COLLATION, + UCOL_FRENCH_COLLATION, /** Attribute for handling variable elements. * Acceptable values are UCOL_NON_IGNORABLE (default) - * which treats all the codepoints with non-ignorable + * which treats all the codepoints with non-ignorable * primary weights in the same way, - * and UCOL_SHIFTED which causes codepoints with primary + * and UCOL_SHIFTED which causes codepoints with primary * weights that are equal or below the variable top value - * to be ignored on primary level and moved to the quaternary + * to be ignored on primary level and moved to the quaternary * level. * @stable ICU 2.0 */ - UCOL_ALTERNATE_HANDLING, + UCOL_ALTERNATE_HANDLING, /** Controls the ordering of upper and lower case letters. * Acceptable values are UCOL_OFF (default), which orders * upper and lower case letters in accordance to their tertiary - * weights, UCOL_UPPER_FIRST which forces upper case letters to - * sort before lower case letters, and UCOL_LOWER_FIRST which does + * weights, UCOL_UPPER_FIRST which forces upper case letters to + * sort before lower case letters, and UCOL_LOWER_FIRST which does * the opposite. * @stable ICU 2.0 */ - UCOL_CASE_FIRST, + UCOL_CASE_FIRST, /** Controls whether an extra case level (positioned before the third - * level) is generated or not. Acceptable values are UCOL_OFF (default), + * level) is generated or not. Acceptable values are UCOL_OFF (default), * when case level is not generated, and UCOL_ON which causes the case * level to be generated. Contents of the case level are affected by - * the value of UCOL_CASE_FIRST attribute. A simple way to ignore + * the value of UCOL_CASE_FIRST attribute. A simple way to ignore * accent differences in a string is to set the strength to UCOL_PRIMARY * and enable case level. * @stable ICU 2.0 @@ -271,14 +279,14 @@ typedef enum { UCOL_CASE_LEVEL, /** Controls whether the normalization check and necessary normalizations * are performed. When set to UCOL_OFF (default) no normalization check - * is performed. The correctness of the result is guaranteed only if the + * is performed. The correctness of the result is guaranteed only if the * input data is in so-called FCD form (see users manual for more info). * When set to UCOL_ON, an incremental check is performed to see whether * the input data is in the FCD form. If the data is not in the FCD form, * incremental NFD normalization is performed. * @stable ICU 2.0 */ - UCOL_NORMALIZATION_MODE, + UCOL_NORMALIZATION_MODE, /** An alias for UCOL_NORMALIZATION_MODE attribute. * @stable ICU 2.0 */ @@ -287,7 +295,7 @@ typedef enum { * UCOL_TERTIARY, UCOL_QUATERNARY or UCOL_IDENTICAL. The usual strength * for most locales (except Japanese) is tertiary. * - * Quaternary strength + * Quaternary strength * is useful when combined with shifted setting for alternate handling * attribute and for JIS X 4061 collation, when it is used to distinguish * between Katakana and Hiragana. @@ -295,13 +303,13 @@ typedef enum { * is affected only by the number of non-ignorable code points in * the string. * - * Identical strength is rarely useful, as it amounts + * Identical strength is rarely useful, as it amounts * to codepoints of the NFD form of the string. * @stable ICU 2.0 */ - UCOL_STRENGTH, + UCOL_STRENGTH, #ifndef U_HIDE_DEPRECATED_API - /** When turned on, this attribute positions Hiragana before all + /** When turned on, this attribute positions Hiragana before all * non-ignorables on quaternary level This is a sneaky way to produce JIS * sort order. * @@ -332,15 +340,18 @@ typedef enum { * * @stable ICU 2.8 */ - UCOL_NUMERIC_COLLATION = UCOL_STRENGTH + 2, - /** - * The number of UColAttribute constants. - * @stable ICU 2.0 - */ + UCOL_NUMERIC_COLLATION = UCOL_STRENGTH + 2, + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of RuleBasedCollator object. + /** + * One more than the highest normal UColAttribute value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_ATTRIBUTE_COUNT } UColAttribute; -/** Options for retrieving the rule string +/** Options for retrieving the rule string * @stable ICU 2.0 */ typedef enum { @@ -349,7 +360,7 @@ typedef enum { * Same as calling the version of getRules() without UColRuleOption. * @stable ICU 2.0 */ - UCOL_TAILORING_ONLY, + UCOL_TAILORING_ONLY, /** * Retrieves the "UCA rules" concatenated with the tailoring rules. * The "UCA rules" are an approximation of the root collator's sort order. @@ -357,7 +368,7 @@ typedef enum { * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales * @stable ICU 2.0 */ - UCOL_FULL_RULES + UCOL_FULL_RULES } UColRuleOption ; /** @@ -370,11 +381,11 @@ typedef enum { * or in language tag syntax ("el-u-kf-upper"). * See User Guide: Collation API. * - * The UCollator pointer is used in all the calls to the Collation + * The UCollator pointer is used in all the calls to the Collation * service. After finished, collator must be disposed of by calling * {@link #ucol_close }. - * @param loc The locale containing the required collation rules. - * Special values for locales can be passed in - + * @param loc The locale containing the required collation rules. + * Special values for locales can be passed in - * if NULL is passed for the locale, the default locale * collation rules will be used. If empty string ("") or * "root" are passed, the root collator will be returned. @@ -385,7 +396,7 @@ typedef enum { * @see ucol_close * @stable ICU 2.0 */ -U_STABLE UCollator* U_EXPORT2 +U_STABLE UCollator* U_EXPORT2 ucol_open(const char *loc, UErrorCode *status); /** @@ -413,7 +424,7 @@ ucol_open(const char *loc, UErrorCode *status); * @see ucol_close * @stable ICU 2.0 */ -U_STABLE UCollator* U_EXPORT2 +U_STABLE UCollator* U_EXPORT2 ucol_openRules( const UChar *rules, int32_t rulesLength, UColAttributeValue normalizationMode, @@ -422,31 +433,31 @@ ucol_openRules( const UChar *rules, UErrorCode *status); #ifndef U_HIDE_DEPRECATED_API -/** +/** * Open a collator defined by a short form string. * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: + * section of the users guide: * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme * Attributes are overriden by the subsequent attributes. So, for "S2_S3", final * strength will be 3. 3066bis locale overrides individual locale parts. - * The call to this function is equivalent to a call to ucol_open, followed by a + * The call to this function is equivalent to a call to ucol_open, followed by a * series of calls to ucol_setAttribute and ucol_setVariableTop. - * @param definition A short string containing a locale and a set of attributes. + * @param definition A short string containing a locale and a set of attributes. * Attributes not explicitly mentioned are left at the default * state for a locale. * @param parseError if not NULL, structure that will get filled with error's pre * and post context in case of error. - * @param forceDefaults if FALSE, the settings that are the same as the collator + * @param forceDefaults if FALSE, the settings that are the same as the collator * default settings will not be applied (for example, setting - * French secondary on a French collator would not be executed). - * If TRUE, all the settings will be applied regardless of the + * French secondary on a French collator would not be executed). + * If TRUE, all the settings will be applied regardless of the * collator default value. If the definition * strings are to be cached, should be set to FALSE. - * @param status Error code. Apart from regular error conditions connected to + * @param status Error code. Apart from regular error conditions connected to * instantiating collators (like out of memory or similar), this * API will return an error if an invalid attribute or attribute/value * combination is specified. - * @return A pointer to a UCollator or 0 if an error occured (including an + * @return A pointer to a UCollator or 0 if an error occured (including an * invalid attribute). * @see ucol_open * @see ucol_setAttribute @@ -466,11 +477,11 @@ ucol_openFromShortString( const char *definition, /** * Get a set containing the contractions defined by the collator. The set includes * both the root collator's contractions and the contractions defined by the collator. This set - * will contain only strings. If a tailoring explicitly suppresses contractions from + * will contain only strings. If a tailoring explicitly suppresses contractions from * the root collator (like Russian), removed contractions will not be in the resulting set. - * @param coll collator + * @param coll collator * @param conts the set to hold the result. It gets emptied before - * contractions are added. + * contractions are added. * @param status to hold the error code * @return the size of the contraction set * @@ -498,7 +509,7 @@ ucol_getContractionsAndExpansions( const UCollator *coll, USet *contractions, USet *expansions, UBool addPrefixes, UErrorCode *status); -/** +/** * Close a UCollator. * Once closed, a UCollator should not be used. Every open collator should * be closed. Otherwise, a memory leak will result. @@ -508,7 +519,7 @@ ucol_getContractionsAndExpansions( const UCollator *coll, * @see ucol_safeClone * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucol_close(UCollator *coll); #if U_SHOW_CPLUSPLUS_API @@ -545,31 +556,31 @@ U_NAMESPACE_END * @see ucol_equal * @stable ICU 2.0 */ -U_STABLE UCollationResult U_EXPORT2 +U_STABLE UCollationResult U_EXPORT2 ucol_strcoll( const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); -/** -* Compare two strings in UTF-8. -* The strings will be compared using the options already specified. -* Note: When input string contains malformed a UTF-8 byte sequence, +/** +* Compare two strings in UTF-8. +* The strings will be compared using the options already specified. +* Note: When input string contains malformed a UTF-8 byte sequence, * this function treats these bytes as REPLACEMENT CHARACTER (U+FFFD). -* @param coll The UCollator containing the comparison rules. -* @param source The source UTF-8 string. -* @param sourceLength The length of source, or -1 if null-terminated. -* @param target The target UTF-8 string. -* @param targetLength The length of target, or -1 if null-terminated. -* @param status A pointer to a UErrorCode to receive any errors -* @return The result of comparing the strings; one of UCOL_EQUAL, -* UCOL_GREATER, UCOL_LESS -* @see ucol_greater -* @see ucol_greaterOrEqual -* @see ucol_equal -* @stable ICU 50 -*/ +* @param coll The UCollator containing the comparison rules. +* @param source The source UTF-8 string. +* @param sourceLength The length of source, or -1 if null-terminated. +* @param target The target UTF-8 string. +* @param targetLength The length of target, or -1 if null-terminated. +* @param status A pointer to a UErrorCode to receive any errors +* @return The result of comparing the strings; one of UCOL_EQUAL, +* UCOL_GREATER, UCOL_LESS +* @see ucol_greater +* @see ucol_greaterOrEqual +* @see ucol_equal +* @stable ICU 50 +*/ U_STABLE UCollationResult U_EXPORT2 ucol_strcollUTF8( const UCollator *coll, @@ -593,7 +604,7 @@ ucol_strcollUTF8( * @see ucol_equal * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucol_greater(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); @@ -612,7 +623,7 @@ ucol_greater(const UCollator *coll, * @see ucol_equal * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucol_greaterOrEqual(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); @@ -631,7 +642,7 @@ ucol_greaterOrEqual(const UCollator *coll, * @see ucol_greaterOrEqual * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ucol_equal(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); @@ -648,7 +659,7 @@ ucol_equal(const UCollator *coll, * @see ucol_strcoll * @stable ICU 2.6 */ -U_STABLE UCollationResult U_EXPORT2 +U_STABLE UCollationResult U_EXPORT2 ucol_strcollIter( const UCollator *coll, UCharIterator *sIter, UCharIterator *tIter, @@ -663,19 +674,19 @@ ucol_strcollIter( const UCollator *coll, * @see ucol_setStrength * @stable ICU 2.0 */ -U_STABLE UCollationStrength U_EXPORT2 +U_STABLE UCollationStrength U_EXPORT2 ucol_getStrength(const UCollator *coll); /** * Set the collation strength used in a UCollator. * The strength influences how strings are compared. * @param coll The UCollator to set. - * @param strength The desired collation strength; one of UCOL_PRIMARY, + * @param strength The desired collation strength; one of UCOL_PRIMARY, * UCOL_SECONDARY, UCOL_TERTIARY, UCOL_QUATERNARY, UCOL_IDENTICAL, UCOL_DEFAULT * @see ucol_getStrength * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucol_setStrength(UCollator *coll, UCollationStrength strength); @@ -684,9 +695,9 @@ ucol_setStrength(UCollator *coll, * These reordering codes are a combination of UScript codes and UColReorderCode entries. * @param coll The UCollator to query. * @param dest The array to fill with the script ordering. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function + * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function * will only return the length of the result without writing any codes (pre-flighting). - * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a + * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a * failure before the function call. * @return The number of reordering codes written to the dest array. * @see ucol_setReorderCodes @@ -695,41 +706,41 @@ ucol_setStrength(UCollator *coll, * @see UColReorderCode * @stable ICU 4.8 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getReorderCodes(const UCollator* coll, int32_t* dest, int32_t destCapacity, UErrorCode *pErrorCode); -/** +/** * Sets the reordering codes for this collator. * Collation reordering allows scripts and some other groups of characters * to be moved relative to each other. This reordering is done on top of - * the DUCET/CLDR standard collation order. Reordering can specify groups to be placed + * the DUCET/CLDR standard collation order. Reordering can specify groups to be placed * at the start and/or the end of the collation order. These groups are specified using * UScript codes and UColReorderCode entries. * - *

    By default, reordering codes specified for the start of the order are placed in the + *

    By default, reordering codes specified for the start of the order are placed in the * order given after several special non-script blocks. These special groups of characters * are space, punctuation, symbol, currency, and digit. These special groups are represented with - * UColReorderCode entries. Script groups can be intermingled with + * UColReorderCode entries. Script groups can be intermingled with * these special non-script groups if those special groups are explicitly specified in the reordering. * - *

    The special code OTHERS stands for any script that is not explicitly + *

    The special code OTHERS stands for any script that is not explicitly * mentioned in the list of reordering codes given. Anything that is after OTHERS * will go at the very end of the reordering in the order given. * *

    The special reorder code DEFAULT will reset the reordering for this collator * to the default for this collator. The default reordering may be the DUCET/CLDR order or may be a reordering that - * was specified when this collator was created from resource data or from rules. The + * was specified when this collator was created from resource data or from rules. The * DEFAULT code must be the sole code supplied when it is used. * If not, then U_ILLEGAL_ARGUMENT_ERROR will be set. * *

    The special reorder code NONE will remove any reordering for this collator. - * The result of setting no reordering will be to have the DUCET/CLDR ordering used. The + * The result of setting no reordering will be to have the DUCET/CLDR ordering used. The * NONE code must be the sole code supplied when it is used. * * @param coll The UCollator to set. - * @param reorderCodes An array of script codes in the new order. This can be NULL if the + * @param reorderCodes An array of script codes in the new order. This can be NULL if the * length is also set to 0. An empty array will clear any reordering codes on the collator. * @param reorderCodesLength The length of reorderCodes. * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a @@ -739,8 +750,8 @@ ucol_getReorderCodes(const UCollator* coll, * @see UScriptCode * @see UColReorderCode * @stable ICU 4.8 - */ -U_STABLE void U_EXPORT2 + */ +U_STABLE void U_EXPORT2 ucol_setReorderCodes(UCollator* coll, const int32_t* reorderCodes, int32_t reorderCodesLength, @@ -756,7 +767,7 @@ ucol_setReorderCodes(UCollator* coll, * @param dest The array to fill with the script ordering. * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function * will only return the length of the result without writing any codes (pre-flighting). - * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate + * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate * a failure before the function call. * @return The number of reordering codes written to the dest array. * @see ucol_setReorderCodes @@ -765,7 +776,7 @@ ucol_setReorderCodes(UCollator* coll, * @see UColReorderCode * @stable ICU 4.8 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getEquivalentReorderCodes(int32_t reorderCode, int32_t* dest, int32_t destCapacity, @@ -783,7 +794,7 @@ ucol_getEquivalentReorderCodes(int32_t reorderCode, * the output was truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getDisplayName( const char *objLoc, const char *dispLoc, UChar *result, @@ -799,7 +810,7 @@ ucol_getDisplayName( const char *objLoc, * @see ucol_countAvailable * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 ucol_getAvailable(int32_t localeIndex); /** @@ -810,7 +821,7 @@ ucol_getAvailable(int32_t localeIndex); * @see ucol_getAvailable * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_countAvailable(void); #if !UCONFIG_NO_SERVICE @@ -914,26 +925,26 @@ ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity, * Get the collation tailoring rules from a UCollator. * The rules will follow the rule syntax. * @param coll The UCollator to query. - * @param length + * @param length * @return The collation tailoring rules. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 -ucol_getRules( const UCollator *coll, +U_STABLE const UChar* U_EXPORT2 +ucol_getRules( const UCollator *coll, int32_t *length); #ifndef U_HIDE_DEPRECATED_API /** Get the short definition string for a collator. This API harvests the collator's - * locale and the attribute set and produces a string that can be used for opening + * locale and the attribute set and produces a string that can be used for opening * a collator with the same attributes using the ucol_openFromShortString API. * This string will be normalized. * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: + * section of the users guide: * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme * This API supports preflighting. * @param coll a collator * @param locale a locale that will appear as a collators locale in the resulting - * short string definition. If NULL, the locale will be harvested + * short string definition. If NULL, the locale will be harvested * from the collator. * @param buffer space to hold the resulting string * @param capacity capacity of the buffer @@ -952,21 +963,21 @@ ucol_getShortDefinitionString(const UCollator *coll, /** Verifies and normalizes short definition string. * Normalized short definition string has all the option sorted by the argument name, - * so that equivalent definition strings are the same. + * so that equivalent definition strings are the same. * This API supports preflighting. * @param source definition string * @param destination space to hold the resulting string * @param capacity capacity of the buffer * @param parseError if not NULL, structure that will get filled with error's pre * and post context in case of error. - * @param status Error code. This API will return an error if an invalid attribute - * or attribute/value combination is specified. All the preflighting + * @param status Error code. This API will return an error if an invalid attribute + * or attribute/value combination is specified. All the preflighting * errors are also featured * @return length of the resulting normalized string. * * @see ucol_openFromShortString * @see ucol_getShortDefinitionString - * + * * @deprecated ICU 54 */ @@ -983,7 +994,7 @@ ucol_normalizeShortDefinitionString(const char *source, * Get a sort key for a string from a UCollator. * Sort keys may be compared using strcmp. * - * Note that sort keys are often less efficient than simply doing comparison. + * Note that sort keys are often less efficient than simply doing comparison. * For more details, see the ICU User Guide. * * Like ICU functions that write to an output buffer, the buffer contents @@ -1001,7 +1012,7 @@ ucol_normalizeShortDefinitionString(const char *source, * @see ucol_keyHashCode * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getSortKey(const UCollator *coll, const UChar *source, int32_t sourceLength, @@ -1018,29 +1029,29 @@ ucol_getSortKey(const UCollator *coll, * The generated sort key may or may not be compatible with * sort keys generated using ucol_getSortKey(). * @param coll The UCollator containing the collation rules. - * @param iter UCharIterator containing the string we need + * @param iter UCharIterator containing the string we need * the sort key to be calculated for. * @param state Opaque state of sortkey iteration. * @param dest Buffer to hold the resulting sortkey part * @param count number of sort key bytes required. * @param status error code indicator. * @return the actual number of bytes of a sortkey. It can be - * smaller than count if we have reached the end of + * smaller than count if we have reached the end of * the sort key. * @stable ICU 2.6 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_nextSortKeyPart(const UCollator *coll, UCharIterator *iter, uint32_t state[2], uint8_t *dest, int32_t count, UErrorCode *status); -/** enum that is taken by ucol_getBound API - * See below for explanation - * do not change the values assigned to the - * members of this enum. Underlying code - * depends on them having these numbers +/** enum that is taken by ucol_getBound API + * See below for explanation + * do not change the values assigned to the + * members of this enum. Underlying code + * depends on them having these numbers * @stable ICU 2.0 */ typedef enum { @@ -1050,16 +1061,22 @@ typedef enum { UCOL_BOUND_UPPER = 1, /** upper bound that will match all the strings that have the same initial substring as the given string */ UCOL_BOUND_UPPER_LONG = 2, - UCOL_BOUND_VALUE_COUNT +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColBoundMode value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UCOL_BOUND_VALUE_COUNT +#endif // U_HIDE_DEPRECATED_API } UColBoundMode; /** * Produce a bound for a given sortkey and a number of levels. - * Return value is always the number of bytes needed, regardless of + * Return value is always the number of bytes needed, regardless of * whether the result buffer was big enough or even valid.
    * Resulting bounds can be used to produce a range of strings that are * between upper and lower bounds. For example, if bounds are produced - * for a sortkey of string "smith", strings between upper and lower + * for a sortkey of string "smith", strings between upper and lower * bounds with one level would include "Smith", "SMITH", "sMiTh".
    * There are two upper bounds that can be produced. If UCOL_BOUND_UPPER * is produced, strings matched would be as above. However, if bound @@ -1069,28 +1086,28 @@ typedef enum { * TestBounds. * Sort keys may be compared using strcmp. * @param source The source sortkey. - * @param sourceLength The length of source, or -1 if null-terminated. - * (If an unmodified sortkey is passed, it is always null + * @param sourceLength The length of source, or -1 if null-terminated. + * (If an unmodified sortkey is passed, it is always null * terminated). - * @param boundType Type of bound required. It can be UCOL_BOUND_LOWER, which - * produces a lower inclusive bound, UCOL_BOUND_UPPER, that - * produces upper bound that matches strings of the same length - * or UCOL_BOUND_UPPER_LONG that matches strings that have the + * @param boundType Type of bound required. It can be UCOL_BOUND_LOWER, which + * produces a lower inclusive bound, UCOL_BOUND_UPPER, that + * produces upper bound that matches strings of the same length + * or UCOL_BOUND_UPPER_LONG that matches strings that have the * same starting substring as the source string. - * @param noOfLevels Number of levels required in the resulting bound (for most - * uses, the recommended value is 1). See users guide for + * @param noOfLevels Number of levels required in the resulting bound (for most + * uses, the recommended value is 1). See users guide for * explanation on number of levels a sortkey can have. * @param result A pointer to a buffer to receive the resulting sortkey. * @param resultLength The maximum size of result. - * @param status Used for returning error code if something went wrong. If the + * @param status Used for returning error code if something went wrong. If the * number of levels requested is higher than the number of levels - * in the source key, a warning (U_SORT_KEY_TOO_SHORT_WARNING) is + * in the source key, a warning (U_SORT_KEY_TOO_SHORT_WARNING) is * issued. - * @return The size needed to fully store the bound. + * @return The size needed to fully store the bound. * @see ucol_keyHashCode * @stable ICU 2.1 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getBound(const uint8_t *source, int32_t sourceLength, UColBoundMode boundType, @@ -1098,7 +1115,7 @@ ucol_getBound(const uint8_t *source, uint8_t *result, int32_t resultLength, UErrorCode *status); - + /** * Gets the version information for a Collator. Version is currently * an opaque 32-bit number which depends, among other things, on major @@ -1146,7 +1163,7 @@ ucol_getUCAVersion(const UCollator* coll, UVersionInfo info); * Example (uncompressed): *

    191B1D 01 050505 01 910505 00
      * 1F2123 01 050505 01 910505 00
    - * will be merged as + * will be merged as *
    191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00
    * * If the destination buffer is not big enough, then its contents are undefined. @@ -1167,7 +1184,7 @@ ucol_getUCAVersion(const UCollator* coll, UVersionInfo info); * in which cases the contents of dest is undefined * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length, const uint8_t *src2, int32_t src2Length, uint8_t *dest, int32_t destCapacity); @@ -1175,7 +1192,7 @@ ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length, /** * Universal attribute setter * @param coll collator which attributes are to be changed - * @param attr attribute type + * @param attr attribute type * @param value attribute value * @param status to indicate whether the operation went on smoothly or there were errors * @see UColAttribute @@ -1183,7 +1200,7 @@ ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length, * @see ucol_getAttribute * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status); /** @@ -1197,7 +1214,7 @@ ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, * @see ucol_setAttribute * @stable ICU 2.0 */ -U_STABLE UColAttributeValue U_EXPORT2 +U_STABLE UColAttributeValue U_EXPORT2 ucol_getAttribute(const UCollator *coll, UColAttribute attr, UErrorCode *status); /** @@ -1250,16 +1267,16 @@ ucol_getMaxVariable(const UCollator *coll); * @see ucol_restoreVariableTop * @deprecated ICU 53 Call ucol_setMaxVariable() instead. */ -U_DEPRECATED uint32_t U_EXPORT2 -ucol_setVariableTop(UCollator *coll, - const UChar *varTop, int32_t len, +U_DEPRECATED uint32_t U_EXPORT2 +ucol_setVariableTop(UCollator *coll, + const UChar *varTop, int32_t len, UErrorCode *status); #endif /* U_HIDE_DEPRECATED_API */ -/** - * Gets the variable top value of a Collator. +/** + * Gets the variable top value of a Collator. * @param coll collator which variable top needs to be retrieved - * @param status error code (not changed by function). If error code is set, + * @param status error code (not changed by function). If error code is set, * the return value is undefined. * @return the variable top primary weight * @see ucol_getMaxVariable @@ -1283,7 +1300,7 @@ U_STABLE uint32_t U_EXPORT2 ucol_getVariableTop(const UCollator *coll, UErrorCod * @see ucol_setVariableTop * @deprecated ICU 53 Call ucol_setMaxVariable() instead. */ -U_DEPRECATED void U_EXPORT2 +U_DEPRECATED void U_EXPORT2 ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *status); #endif /* U_HIDE_DEPRECATED_API */ @@ -1291,15 +1308,15 @@ ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *stat * Thread safe cloning operation. The result is a clone of a given collator. * @param coll collator to be cloned * @param stackBuffer Deprecated functionality as of ICU 52, use NULL.
    - * user allocated space for the new clone. - * If NULL new memory will be allocated. + * user allocated space for the new clone. + * If NULL new memory will be allocated. * If buffer is not large enough, new memory will be allocated. * Clients can use the U_COL_SAFECLONE_BUFFERSIZE. * @param pBufferSize Deprecated functionality as of ICU 52, use NULL or 1.
    - * pointer to size of allocated space. - * If *pBufferSize == 0, a sufficient size for use in cloning will + * pointer to size of allocated space. + * If *pBufferSize == 0, a sufficient size for use in cloning will * be returned ('pre-flighting') - * If *pBufferSize is not enough for a stack-based safe clone, + * If *pBufferSize is not enough for a stack-based safe clone, * new memory will be allocated. * @param status to indicate whether the operation went on smoothly or there were errors * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any @@ -1310,7 +1327,7 @@ ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *stat * @see ucol_close * @stable ICU 2.0 */ -U_STABLE UCollator* U_EXPORT2 +U_STABLE UCollator* U_EXPORT2 ucol_safeClone(const UCollator *coll, void *stackBuffer, int32_t *pBufferSize, @@ -1326,21 +1343,21 @@ ucol_safeClone(const UCollator *coll, #endif /* U_HIDE_DEPRECATED_API */ /** - * Returns current rules. Delta defines whether full rules are returned or just the tailoring. - * Returns number of UChars needed to store rules. If buffer is NULL or bufferLen is not enough + * Returns current rules. Delta defines whether full rules are returned or just the tailoring. + * Returns number of UChars needed to store rules. If buffer is NULL or bufferLen is not enough * to store rules, will store up to available space. * * ucol_getRules() should normally be used instead. * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales * @param coll collator to get the rules from - * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES. + * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES. * @param buffer buffer to store the result in. If NULL, you'll get no rules. * @param bufferLen length of buffer to store rules in. If less than needed you'll get only the part that fits in. * @return current rules * @stable ICU 2.0 * @see UCOL_FULL_RULES */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen); #ifndef U_HIDE_DEPRECATED_API @@ -1353,7 +1370,7 @@ ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int3 * locale. For description see the definition of * ULocDataLocaleType in uloc.h * @param status error code of the operation - * @return real locale name from which the collation data comes. + * @return real locale name from which the collation data comes. * If the collator was instantiated from rules, returns * NULL. * @deprecated ICU 2.8 Use ucol_getLocaleByType instead @@ -1371,7 +1388,7 @@ ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *statu * locale. For description see the definition of * ULocDataLocaleType in uloc.h * @param status error code of the operation - * @return real locale name from which the collation data comes. + * @return real locale name from which the collation data comes. * If the collator was instantiated from rules, returns * NULL. * @stable ICU 2.8 @@ -1380,7 +1397,7 @@ U_STABLE const char * U_EXPORT2 ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status); /** - * Get a Unicode set that contains all the characters and sequences tailored in + * Get a Unicode set that contains all the characters and sequences tailored in * this collator. The result must be disposed of by using uset_close. * @param coll The UCollator for which we want to get tailored chars * @param status error code of the operation @@ -1411,18 +1428,18 @@ ucol_getUnsafeSet( const UCollator *coll, /** Touches all resources needed for instantiating a collator from a short string definition, * thus filling up the cache. - * @param definition A short string containing a locale and a set of attributes. + * @param definition A short string containing a locale and a set of attributes. * Attributes not explicitly mentioned are left at the default * state for a locale. * @param parseError if not NULL, structure that will get filled with error's pre * and post context in case of error. - * @param forceDefaults if FALSE, the settings that are the same as the collator + * @param forceDefaults if FALSE, the settings that are the same as the collator * default settings will not be applied (for example, setting - * French secondary on a French collator would not be executed). - * If TRUE, all the settings will be applied regardless of the + * French secondary on a French collator would not be executed). + * If TRUE, all the settings will be applied regardless of the * collator default value. If the definition * strings are to be cached, should be set to FALSE. - * @param status Error code. Apart from regular error conditions connected to + * @param status Error code. Apart from regular error conditions connected to * instantiating collators (like out of memory or similar), this * API will return an error if an invalid attribute or attribute/value * combination is specified. @@ -1436,7 +1453,7 @@ ucol_prepareShortStringOpen( const char *definition, UErrorCode *status); #endif /* U_HIDE_INTERNAL_API */ -/** Creates a binary image of a collator. This binary image can be stored and +/** Creates a binary image of a collator. This binary image can be stored and * later used to instantiate a collator using ucol_openBinary. * This API supports preflighting. * @param coll Collator @@ -1453,8 +1470,8 @@ ucol_cloneBinary(const UCollator *coll, UErrorCode *status); /** Opens a collator from a collator binary image created using - * ucol_cloneBinary. Binary image used in instantiation of the - * collator remains owned by the user and should stay around for + * ucol_cloneBinary. Binary image used in instantiation of the + * collator remains owned by the user and should stay around for * the lifetime of the collator. The API also takes a base collator * which must be the root collator. * @param bin binary image owned by the user and required through the @@ -1470,8 +1487,8 @@ ucol_cloneBinary(const UCollator *coll, * @stable ICU 3.2 */ U_STABLE UCollator* U_EXPORT2 -ucol_openBinary(const uint8_t *bin, int32_t length, - const UCollator *base, +ucol_openBinary(const uint8_t *bin, int32_t length, + const UCollator *base, UErrorCode *status); diff --git a/deps/icu-small/source/i18n/unicode/ucoleitr.h b/deps/icu-small/source/i18n/unicode/ucoleitr.h index 7af783d37c52f3..b84104986af858 100644 --- a/deps/icu-small/source/i18n/unicode/ucoleitr.h +++ b/deps/icu-small/source/i18n/unicode/ucoleitr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines @@ -9,7 +11,7 @@ * Modification History: * * Date Name Description -* 02/15/2001 synwee Modified all methods to process its own function +* 02/15/2001 synwee Modified all methods to process its own function * instead of calling the equivalent c++ api (coleitr.h) *******************************************************************************/ @@ -20,8 +22,8 @@ #if !UCONFIG_NO_COLLATION -/** - * This indicates an error has occured during processing or if no more CEs is +/** + * This indicates an error has occured during processing or if no more CEs is * to be returned. * @stable ICU 2.0 */ @@ -29,7 +31,7 @@ #include "unicode/ucol.h" -/** +/** * The UCollationElements struct. * For usage in C programs. * @stable ICU 2.0 @@ -40,10 +42,10 @@ typedef struct UCollationElements UCollationElements; * \file * \brief C API: UCollationElements * - * The UCollationElements API is used as an iterator to walk through each + * The UCollationElements API is used as an iterator to walk through each * character of an international string. Use the iterator to return the - * ordering priority of the positioned character. The ordering priority of a - * character, which we refer to as a key, defines how a character is collated + * ordering priority of the positioned character. The ordering priority of a + * character, which we refer to as a key, defines how a character is collated * in the given collation object. * For example, consider the following in Slovak and in traditional Spanish collation: *
    @@ -80,19 +82,19 @@ typedef struct UCollationElements UCollationElements;
      * ucol_next() returns the collation order of the next.
      * ucol_prev() returns the collation order of the previous character.
      * The Collation Element Iterator moves only in one direction between calls to
    - * ucol_reset. That is, ucol_next() and ucol_prev can not be inter-used.
    - * Whenever ucol_prev is to be called after ucol_next() or vice versa,
    - * ucol_reset has to be called first to reset the status, shifting pointers to
    - * either the end or the start of the string. Hence at the next call of
    - * ucol_prev or ucol_next, the first or last collation order will be returned.
    - * If a change of direction is done without a ucol_reset, the result is
    + * ucol_reset. That is, ucol_next() and ucol_prev can not be inter-used. 
    + * Whenever ucol_prev is to be called after ucol_next() or vice versa, 
    + * ucol_reset has to be called first to reset the status, shifting pointers to 
    + * either the end or the start of the string. Hence at the next call of 
    + * ucol_prev or ucol_next, the first or last collation order will be returned. 
    + * If a change of direction is done without a ucol_reset, the result is 
      * undefined.
    - * The result of a forward iterate (ucol_next) and reversed result of the
    - * backward iterate (ucol_prev) on the same string are equivalent, if
    + * The result of a forward iterate (ucol_next) and reversed result of the  
    + * backward iterate (ucol_prev) on the same string are equivalent, if 
      * collation orders with the value 0 are ignored.
    - * Character based on the comparison level of the collator.  A collation order
    - * consists of primary order, secondary order and tertiary order.  The data
    - * type of the collation order is int32_t.
    + * Character based on the comparison level of the collator.  A collation order 
    + * consists of primary order, secondary order and tertiary order.  The data 
    + * type of the collation order is int32_t. 
      *
      * @see UCollator
      */
    @@ -107,7 +109,7 @@ typedef struct UCollationElements UCollationElements;
      * @return a struct containing collation element information
      * @stable ICU 2.0
      */
    -U_STABLE UCollationElements* U_EXPORT2
    +U_STABLE UCollationElements* U_EXPORT2 
     ucol_openElements(const UCollator  *coll,
                       const UChar      *text,
                             int32_t    textLength,
    @@ -121,7 +123,7 @@ ucol_openElements(const UCollator  *coll,
      * @return       the hash code.
      * @stable ICU 2.0
      */
    -U_STABLE int32_t U_EXPORT2
    +U_STABLE int32_t U_EXPORT2 
     ucol_keyHashCode(const uint8_t* key, int32_t length);
     
     /**
    @@ -130,7 +132,7 @@ ucol_keyHashCode(const uint8_t* key, int32_t length);
      * @param elems The UCollationElements to close.
      * @stable ICU 2.0
      */
    -U_STABLE void U_EXPORT2
    +U_STABLE void U_EXPORT2 
     ucol_closeElements(UCollationElements *elems);
     
     /**
    @@ -142,7 +144,7 @@ ucol_closeElements(UCollationElements *elems);
      * @see ucol_previous
      * @stable ICU 2.0
      */
    -U_STABLE void U_EXPORT2
    +U_STABLE void U_EXPORT2 
     ucol_reset(UCollationElements *elems);
     
     /**
    @@ -150,41 +152,41 @@ ucol_reset(UCollationElements *elems);
      * A single character may contain more than one collation element.
      * @param elems The UCollationElements containing the text.
      * @param status A pointer to a UErrorCode to receive any errors.
    - * @return The next collation elements ordering, otherwise returns NULLORDER
    + * @return The next collation elements ordering, otherwise returns NULLORDER 
      *         if an error has occured or if the end of string has been reached
      * @stable ICU 2.0
      */
    -U_STABLE int32_t U_EXPORT2
    +U_STABLE int32_t U_EXPORT2 
     ucol_next(UCollationElements *elems, UErrorCode *status);
     
     /**
      * Get the ordering priority of the previous collation element in the text.
      * A single character may contain more than one collation element.
    - * Note that internally a stack is used to store buffered collation elements.
    + * Note that internally a stack is used to store buffered collation elements. 
      * @param elems The UCollationElements containing the text.
    - * @param status A pointer to a UErrorCode to receive any errors. Noteably
    + * @param status A pointer to a UErrorCode to receive any errors. Noteably 
      *               a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
      *               buffer has been exhausted.
    - * @return The previous collation elements ordering, otherwise returns
    - *         NULLORDER if an error has occured or if the start of string has
    + * @return The previous collation elements ordering, otherwise returns 
    + *         NULLORDER if an error has occured or if the start of string has 
      *         been reached.
      * @stable ICU 2.0
      */
    -U_STABLE int32_t U_EXPORT2
    +U_STABLE int32_t U_EXPORT2 
     ucol_previous(UCollationElements *elems, UErrorCode *status);
     
     /**
    - * Get the maximum length of any expansion sequences that end with the
    + * Get the maximum length of any expansion sequences that end with the 
      * specified comparison order.
      * This is useful for .... ?
      * @param elems The UCollationElements containing the text.
      * @param order A collation order returned by previous or next.
    - * @return maximum size of the expansion sequences ending with the collation
    - *         element or 1 if collation element does not occur at the end of any
    + * @return maximum size of the expansion sequences ending with the collation 
    + *         element or 1 if collation element does not occur at the end of any 
      *         expansion sequence
      * @stable ICU 2.0
      */
    -U_STABLE int32_t U_EXPORT2
    +U_STABLE int32_t U_EXPORT2 
     ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
     
     /**
    @@ -199,8 +201,8 @@ ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
      * @see ucol_getText
      * @stable ICU 2.0
      */
    -U_STABLE void U_EXPORT2
    -ucol_setText(      UCollationElements *elems,
    +U_STABLE void U_EXPORT2 
    +ucol_setText(      UCollationElements *elems, 
                  const UChar              *text,
                        int32_t            textLength,
                        UErrorCode         *status);
    @@ -214,7 +216,7 @@ ucol_setText(      UCollationElements *elems,
      * @see ucol_setOffset
      * @stable ICU 2.0
      */
    -U_STABLE int32_t U_EXPORT2
    +U_STABLE int32_t U_EXPORT2 
     ucol_getOffset(const UCollationElements *elems);
     
     /**
    @@ -229,7 +231,7 @@ ucol_getOffset(const UCollationElements *elems);
      * @see ucol_getOffset
      * @stable ICU 2.0
      */
    -U_STABLE void U_EXPORT2
    +U_STABLE void U_EXPORT2 
     ucol_setOffset(UCollationElements *elems,
                    int32_t        offset,
                    UErrorCode         *status);
    @@ -241,7 +243,7 @@ ucol_setOffset(UCollationElements *elems,
     * @stable ICU 2.6
     */
     U_STABLE int32_t U_EXPORT2
    -ucol_primaryOrder (int32_t order);
    +ucol_primaryOrder (int32_t order); 
     
     /**
     * Get the secondary order of a collation order.
    @@ -250,7 +252,7 @@ ucol_primaryOrder (int32_t order);
     * @stable ICU 2.6
     */
     U_STABLE int32_t U_EXPORT2
    -ucol_secondaryOrder (int32_t order);
    +ucol_secondaryOrder (int32_t order); 
     
     /**
     * Get the tertiary order of a collation order.
    @@ -259,7 +261,7 @@ ucol_secondaryOrder (int32_t order);
     * @stable ICU 2.6
     */
     U_STABLE int32_t U_EXPORT2
    -ucol_tertiaryOrder (int32_t order);
    +ucol_tertiaryOrder (int32_t order); 
     
     #endif /* #if !UCONFIG_NO_COLLATION */
     
    diff --git a/deps/icu-small/source/i18n/unicode/ucsdet.h b/deps/icu-small/source/i18n/unicode/ucsdet.h
    index b737b160479268..470cbab61b2426 100644
    --- a/deps/icu-small/source/i18n/unicode/ucsdet.h
    +++ b/deps/icu-small/source/i18n/unicode/ucsdet.h
    @@ -1,3 +1,5 @@
    +// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// License & terms of use: http://www.unicode.org/copyright.html
     /*
      **********************************************************************
      *   Copyright (C) 2005-2013, International Business Machines
    @@ -27,7 +29,7 @@
     #include "unicode/uenum.h"
     
     /**
    - * \file
    + * \file 
      * \brief C API: Charset Detection API
      *
      * This API provides a facility for detecting the
    @@ -44,7 +46,7 @@
      * in the language are needed.  The detection process will attempt to
      * ignore html or xml style markup that could otherwise obscure the content.
      */
    -
    + 
     
     struct UCharsetDetector;
     /**
    @@ -146,8 +148,8 @@ ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t
     
     /**
      * Return the charset that best matches the supplied input data.
    - *
    - * Note though, that because the detection
    + * 
    + * Note though, that because the detection 
      * only looks at the start of the input data,
      * there is a possibility that the returned charset will fail to handle
      * the full set of input data.
    @@ -171,7 +173,7 @@ ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t
      */
     U_STABLE const UCharsetMatch * U_EXPORT2
     ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
    -
    +    
     
     /**
      *  Find all charset matches that appear to be consistent with the input,
    @@ -184,14 +186,14 @@ ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
      *  

    * The returned UCharsetMatch objects are owned by the UCharsetDetector. * They will remain valid until the detector is closed or modified - * + * *

    - * Return an error if + * Return an error if *

      *
    • no charsets appear to match the input data.
    • *
    • no input text has been provided
    • *
    - * + * * @param ucsd the charset detector to be used. * @param matchesFound pointer to a variable that will be set to the * number of charsets identified that are consistent with @@ -291,7 +293,7 @@ ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status); * NUL character will be appended to the buffer if space is available. * * The number of UChars in the output string, not including the terminating - * NUL, is returned. + * NUL, is returned. * * If the supplied buffer is smaller than required to hold the output, * the contents of the buffer are undefined. The full output string length @@ -314,7 +316,7 @@ ucsdet_getUChars(const UCharsetMatch *ucsm, /** - * Get an iterator over the set of all detectable charsets - + * Get an iterator over the set of all detectable charsets - * over the charsets that are known to the charset detection * service. * @@ -409,3 +411,5 @@ ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool #endif #endif /* __UCSDET_H */ + + diff --git a/deps/icu-small/source/i18n/unicode/udat.h b/deps/icu-small/source/i18n/unicode/udat.h index 5baec621379d90..cacfbe85009c23 100644 --- a/deps/icu-small/source/i18n/unicode/udat.h +++ b/deps/icu-small/source/i18n/unicode/udat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2016, International Business Machines @@ -787,16 +789,15 @@ typedef enum UDateFormatField { UDAT_TIME_SEPARATOR_FIELD = 37, #endif /* U_HIDE_INTERNAL_API */ - /** +#ifndef U_HIDE_DEPRECATED_API + /** * Number of FieldPosition and UFieldPosition selectors for * DateFormat and UDateFormat. * Valid selectors range from 0 to UDAT_FIELD_COUNT-1. - * This value is subject to change if new fields are defined - * in the future. - * @stable ICU 3.0 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_FIELD_COUNT = 38 - +#endif // U_HIDE_DEPRECATED_API } UDateFormatField; @@ -888,23 +889,24 @@ typedef enum UDateFormatBooleanAttribute { * @stable ICU 53 */ UDAT_PARSE_ALLOW_NUMERIC = 1, -#ifndef U_HIDE_DRAFT_API /** * indicates tolerance of a partial literal match * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy" - * @draft ICU 56 + * @stable ICU 56 */ UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2, /** * indicates tolerance of pattern mismatch between input data and specified format pattern. * e.g. accepting "September" for a month pattern of MMM ("Sep") - * @draft ICU 56 + * @stable ICU 56 */ UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3, -#endif /* U_HIDE_DRAFT_API */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DateFormat object. /** - * count boolean date format constants - * @stable ICU 53 + * One more than the highest normal UDateFormatBooleanAttribute value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4 } UDateFormatBooleanAttribute; diff --git a/deps/icu-small/source/i18n/unicode/udateintervalformat.h b/deps/icu-small/source/i18n/unicode/udateintervalformat.h index 26d9b5a9ddc0ce..582c4378924c23 100644 --- a/deps/icu-small/source/i18n/unicode/udateintervalformat.h +++ b/deps/icu-small/source/i18n/unicode/udateintervalformat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2012,2015 International Business Machines @@ -40,7 +42,7 @@ * - The skeleton MMMd will produce * for en_US, "Mar 4-8" * for en_GB, "4-8 Mar" - * + * * Note: the "-" characters in the above sample output will actually be * Unicode 2013, EN_DASH, in all but the last example. * diff --git a/deps/icu-small/source/i18n/unicode/udatpg.h b/deps/icu-small/source/i18n/unicode/udatpg.h index f52ed4c34ae88a..47d3afb1d0cbf2 100644 --- a/deps/icu-small/source/i18n/unicode/udatpg.h +++ b/deps/icu-small/source/i18n/unicode/udatpg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -25,15 +27,15 @@ * \file * \brief C API: Wrapper for icu::DateTimePatternGenerator (unicode/dtptngen.h). * - * UDateTimePatternGenerator provides flexible generation of date format patterns, - * like "yy-MM-dd". The user can build up the generator by adding successive - * patterns. Once that is done, a query can be made using a "skeleton", which is - * a pattern which just includes the desired fields and lengths. The generator + * UDateTimePatternGenerator provides flexible generation of date format patterns, + * like "yy-MM-dd". The user can build up the generator by adding successive + * patterns. Once that is done, a query can be made using a "skeleton", which is + * a pattern which just includes the desired fields and lengths. The generator * will return the "best fit" pattern corresponding to that skeleton. *

    The main method people will use is udatpg_getBestPattern, since normally - * UDateTimePatternGenerator is pre-built with data from a particular locale. + * UDateTimePatternGenerator is pre-built with data from a particular locale. * However, generators can be built directly from other data as well. - *

    Issue: may be useful to also have a function that returns the list of + *

    Issue: may be useful to also have a function that returns the list of * fields in a pattern, in order, since we have that internally. * That would be useful for getting the UI order of field elements. */ @@ -83,7 +85,13 @@ typedef enum UDateTimePatternField { UDATPG_FRACTIONAL_SECOND_FIELD, /** @stable ICU 3.8 */ UDATPG_ZONE_FIELD, - /** @stable ICU 3.8 */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DateTimePatternGenerator object. + /** + * One more than the highest normal UDateTimePatternField value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATPG_FIELD_COUNT } UDateTimePatternField; @@ -120,8 +128,13 @@ typedef enum UDateTimePatternConflict { UDATPG_BASE_CONFLICT, /** @stable ICU 3.8 */ UDATPG_CONFLICT, - /** @stable ICU 3.8 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDateTimePatternConflict value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATPG_CONFLICT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateTimePatternConflict; /** @@ -186,13 +199,13 @@ udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); /** * Get the best pattern matching the input skeleton. It is guaranteed to * have all of the fields in the skeleton. - * + * * Note that this function uses a non-const UDateTimePatternGenerator: * It uses a stateful pattern parser which is set up for each generator object, * rather than creating one for each function call. * Consecutive calls to this function do not affect each other, * but this function cannot be used concurrently on a single generator object. - * + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param skeleton * The skeleton is a pattern containing only the variable fields. @@ -215,13 +228,13 @@ udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, /** * Get the best pattern matching the input skeleton. It is guaranteed to * have all of the fields in the skeleton. - * + * * Note that this function uses a non-const UDateTimePatternGenerator: * It uses a stateful pattern parser which is set up for each generator object, * rather than creating one for each function call. * Consecutive calls to this function do not affect each other, * but this function cannot be used concurrently on a single generator object. - * + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param skeleton * The skeleton is a pattern containing only the variable fields. @@ -252,7 +265,7 @@ udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg, /** * Get a unique skeleton from a given pattern. For example, * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". - * + * * Note that this function uses a non-const UDateTimePatternGenerator: * It uses a stateful pattern parser which is set up for each generator object, * rather than creating one for each function call. @@ -310,7 +323,7 @@ udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg, * Adds a pattern to the generator. If the pattern has the same skeleton as * an existing pattern, and the override parameter is set, then the previous * value is overriden. Otherwise, the previous value is retained. In either - * case, the conflicting status is set and previous vale is stored in + * case, the conflicting status is set and previous vale is stored in * conflicting pattern. *

    * Note that single-field patterns (like "MMM") are automatically added, and @@ -319,14 +332,14 @@ udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg, * @param dtpg a pointer to UDateTimePatternGenerator. * @param pattern input pattern, such as "dd/MMM" * @param patternLength the length of pattern. - * @param override When existing values are to be overridden use true, + * @param override When existing values are to be overridden use true, * otherwise use false. * @param conflictingPattern Previous pattern with the same skeleton. * @param capacity the capacity of conflictingPattern. * @param pLength a pointer to the length of conflictingPattern. * @param pErrorCode a pointer to the UErrorCode which must not indicate a * failure before the function call. - * @return conflicting status. The value could be UDATPG_NO_CONFLICT, + * @return conflicting status. The value could be UDATPG_NO_CONFLICT, * UDATPG_BASE_CONFLICT or UDATPG_CONFLICT. * @stable ICU 3.8 */ @@ -467,7 +480,7 @@ udatpg_setDecimal(UDateTimePatternGenerator *dtpg, /** * Getter corresponding to setDecimal. - * + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param pLength A pointer that will receive the length of the decimal string. * @return corresponding to the decimal point. @@ -550,7 +563,7 @@ udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg, /** * Return a UEnumeration list of all the skeletons in canonical form. * Call udatpg_getPatternForSkeleton() to get the corresponding pattern. - * + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param pErrorCode a pointer to the UErrorCode which must not indicate a * failure before the function call @@ -576,9 +589,9 @@ udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErr /** * Get the pattern corresponding to a given skeleton. - * + * * @param dtpg a pointer to UDateTimePatternGenerator. - * @param skeleton + * @param skeleton * @param skeletonLength pointer to the length of skeleton. * @param pLength pointer to the length of return pattern. * @return pattern corresponding to a given skeleton. diff --git a/deps/icu-small/source/i18n/unicode/ufieldpositer.h b/deps/icu-small/source/i18n/unicode/ufieldpositer.h index 836bfdf279d4b2..8dfa3df5a409d0 100644 --- a/deps/icu-small/source/i18n/unicode/ufieldpositer.h +++ b/deps/icu-small/source/i18n/unicode/ufieldpositer.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015-2016, International Business Machines @@ -84,8 +86,8 @@ U_NAMESPACE_END /** * Get information for the next field in the formatted string to which this - * UFieldPositionIterator currently applies, or return FALSE if there are - * no more fields. + * UFieldPositionIterator currently applies, or return a negative value if there + * are no more fields. * @param fpositer * A pointer to the UFieldPositionIterator object containing iteration * state for the format fields. diff --git a/deps/icu-small/source/i18n/unicode/uformattable.h b/deps/icu-small/source/i18n/unicode/uformattable.h index a64ae14653a19d..e4683d56c35898 100644 --- a/deps/icu-small/source/i18n/unicode/uformattable.h +++ b/deps/icu-small/source/i18n/unicode/uformattable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2013-2014, International Business Machines Corporation and others. @@ -49,7 +51,13 @@ typedef enum UFormattableType { UFMT_ARRAY, /**< ufmt_countArray() and ufmt_getArray() will return the value. @see ufmt_getArrayItemByIndex */ UFMT_INT64, /**< ufmt_getInt64() will return without conversion. @see ufmt_getInt64 */ UFMT_OBJECT, /**< ufmt_getObject() will return without conversion. @see ufmt_getObject*/ - UFMT_COUNT /**< Count of defined UFormattableType values */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UFormattableType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UFMT_COUNT +#endif // U_HIDE_DEPRECATED_API } UFormattableType; diff --git a/deps/icu-small/source/i18n/unicode/ugender.h b/deps/icu-small/source/i18n/unicode/ugender.h index 86e229df61b298..c1e591ed28fb0e 100644 --- a/deps/icu-small/source/i18n/unicode/ugender.h +++ b/deps/icu-small/source/i18n/unicode/ugender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/ulocdata.h b/deps/icu-small/source/i18n/unicode/ulocdata.h index 63495f681cee4a..ecf6fdcb3f532e 100644 --- a/deps/icu-small/source/i18n/unicode/ulocdata.h +++ b/deps/icu-small/source/i18n/unicode/ulocdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -47,8 +49,13 @@ typedef enum ULocaleDataExemplarSetType { ULOCDATA_ES_INDEX=2, /** Punctuation set @stable ICU 51 */ ULOCDATA_ES_PUNCTUATION=3, - /** One higher than the last valid type @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULocaleDataExemplarSetType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ ULOCDATA_ES_COUNT=4 +#endif // U_HIDE_DEPRECATED_API } ULocaleDataExemplarSetType; /** The possible types of delimiters. @@ -63,8 +70,13 @@ typedef enum ULocaleDataDelimiterType { ULOCDATA_ALT_QUOTATION_START = 2, /** Alternate quotation end @stable ICU 3.4 */ ULOCDATA_ALT_QUOTATION_END = 3, - /** One higher than the last valid type @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULocaleDataDelimiterType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ ULOCDATA_DELIMITER_COUNT = 4 +#endif // U_HIDE_DEPRECATED_API } ULocaleDataDelimiterType; /** @@ -189,7 +201,13 @@ typedef enum UMeasurementSystem { UMS_SI, /**< Measurement system specified by SI otherwise known as Metric system. @stable ICU 2.8 */ UMS_US, /**< Measurement system followed in the United States of America. @stable ICU 2.8 */ UMS_UK, /**< Mix of metric and imperial units used in Great Britain. @stable ICU 55 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UMeasurementSystem value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UMS_LIMIT +#endif // U_HIDE_DEPRECATED_API } UMeasurementSystem; /** diff --git a/deps/icu-small/source/i18n/unicode/umsg.h b/deps/icu-small/source/i18n/unicode/umsg.h index e79026f72e00b6..b5f2ae9dcf2f44 100644 --- a/deps/icu-small/source/i18n/unicode/umsg.h +++ b/deps/icu-small/source/i18n/unicode/umsg.h @@ -1,8 +1,10 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** - * COPYRIGHT: + * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and * others. All Rights Reserved. - * Copyright (C) 2010 , Yahoo! Inc. + * Copyright (C) 2010 , Yahoo! Inc. ******************************************************************** * * file name: umsg.h @@ -98,8 +100,8 @@ * u_uastrcpy(str, "MyDisk"); * u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}"); * for(i=0; i<3; i++){ - * resultlength=0; - * resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str); + * resultlength=0; + * resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str); * if(status==U_BUFFER_OVERFLOW_ERROR){ * status=U_ZERO_ERROR; * resultlength=resultLengthOut+1; @@ -173,7 +175,7 @@ * @see u_parseMessage * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_formatMessage(const char *locale, const UChar *pattern, int32_t patternLength, @@ -200,7 +202,7 @@ u_formatMessage(const char *locale, * @see u_parseMessage * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vformatMessage( const char *locale, const UChar *pattern, int32_t patternLength, @@ -225,7 +227,7 @@ u_vformatMessage( const char *locale, * @see u_formatMessage * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 u_parseMessage( const char *locale, const UChar *pattern, int32_t patternLength, @@ -250,7 +252,7 @@ u_parseMessage( const char *locale, * @see u_formatMessage * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 u_vparseMessage(const char *locale, const UChar *pattern, int32_t patternLength, @@ -279,7 +281,7 @@ u_vparseMessage(const char *locale, * @see u_parseMessage * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_formatMessageWithError( const char *locale, const UChar *pattern, int32_t patternLength, @@ -308,7 +310,7 @@ u_formatMessageWithError( const char *locale, * output was truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vformatMessageWithError( const char *locale, const UChar *pattern, int32_t patternLength, @@ -336,7 +338,7 @@ u_vformatMessageWithError( const char *locale, * @see u_formatMessage * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 u_parseMessageWithError(const char *locale, const UChar *pattern, int32_t patternLength, @@ -364,7 +366,7 @@ u_parseMessageWithError(const char *locale, * @see u_formatMessage * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 u_vparseMessageWithError(const char *locale, const UChar *pattern, int32_t patternLength, @@ -375,7 +377,7 @@ u_vparseMessageWithError(const char *locale, UErrorCode* status); /*----------------------- New experimental API --------------------------- */ -/** +/** * The message format object * @stable ICU 2.0 */ @@ -387,14 +389,14 @@ typedef void* UMessageFormat; * @param pattern A pattern specifying the format to use. * @param patternLength Length of the pattern to use * @param locale The locale for which the messages are formatted. - * @param parseError A pointer to UParseError struct to receive any errors + * @param parseError A pointer to UParseError struct to receive any errors * occured during parsing. Can be NULL. * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UMessageFormat to use for formatting - * messages, or 0 if an error occurred. + * @return A pointer to a UMessageFormat to use for formatting + * messages, or 0 if an error occurred. * @stable ICU 2.0 */ -U_STABLE UMessageFormat* U_EXPORT2 +U_STABLE UMessageFormat* U_EXPORT2 umsg_open( const UChar *pattern, int32_t patternLength, const char *locale, @@ -407,7 +409,7 @@ umsg_open( const UChar *pattern, * @param format The formatter to close. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 umsg_close(UMessageFormat* format); #if U_SHOW_CPLUSPLUS_API @@ -437,7 +439,7 @@ U_NAMESPACE_END * @return A pointer to a UDateFormat identical to fmt. * @stable ICU 2.0 */ -U_STABLE UMessageFormat U_EXPORT2 +U_STABLE UMessageFormat U_EXPORT2 umsg_clone(const UMessageFormat *fmt, UErrorCode *status); @@ -448,7 +450,7 @@ umsg_clone(const UMessageFormat *fmt, * @param locale The locale the formatter should use. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 umsg_setLocale(UMessageFormat *fmt, const char* locale); @@ -459,7 +461,7 @@ umsg_setLocale(UMessageFormat *fmt, * @return the locale. * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 umsg_getLocale(const UMessageFormat *fmt); /** @@ -467,14 +469,14 @@ umsg_getLocale(const UMessageFormat *fmt); * @param fmt The formatter to use * @param pattern The pattern to be applied. * @param patternLength Length of the pattern to use - * @param parseError Struct to receive information on position + * @param parseError Struct to receive information on position * of error if an error is encountered.Can be NULL. * @param status Output param set to success/failure code on * exit. If the pattern is invalid, this will be * set to a failure result. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 umsg_applyPattern( UMessageFormat *fmt, const UChar* pattern, int32_t patternLength, @@ -488,13 +490,13 @@ umsg_applyPattern( UMessageFormat *fmt, * @param resultLength The maximum size of result. * @param status Output param set to success/failure code on * exit. If the pattern is invalid, this will be - * set to a failure result. + * set to a failure result. * @return the pattern of the format * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 umsg_toPattern(const UMessageFormat *fmt, - UChar* result, + UChar* result, int32_t resultLength, UErrorCode* status); @@ -507,13 +509,13 @@ umsg_toPattern(const UMessageFormat *fmt, * @param result A pointer to a buffer to receive the formatted message. * @param resultLength The maximum size of result. * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments + * @param ... A variable-length argument list containing the arguments * specified in pattern. - * @return The total buffer size needed; if greater than resultLength, + * @return The total buffer size needed; if greater than resultLength, * the output was truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 umsg_format( const UMessageFormat *fmt, UChar *result, int32_t resultLength, @@ -525,17 +527,17 @@ umsg_format( const UMessageFormat *fmt, * This function may perform re-ordering of the arguments depending on the * locale. For all numeric arguments, double is assumed unless the type is * explicitly integer. All choice format arguments must be of type double. - * @param fmt The formatter to use + * @param fmt The formatter to use * @param result A pointer to a buffer to receive the formatted message. * @param resultLength The maximum size of result. - * @param ap A variable-length argument list containing the arguments + * @param ap A variable-length argument list containing the arguments * @param status A pointer to an UErrorCode to receive any errors * specified in pattern. - * @return The total buffer size needed; if greater than resultLength, + * @return The total buffer size needed; if greater than resultLength, * the output was truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 umsg_vformat( const UMessageFormat *fmt, UChar *result, int32_t resultLength, @@ -547,7 +549,7 @@ umsg_vformat( const UMessageFormat *fmt, * For numeric arguments, this function will always use doubles. Integer types * should not be passed. * This function is not able to parse all output from {@link #umsg_format }. - * @param fmt The formatter to use + * @param fmt The formatter to use * @param source The text to parse. * @param sourceLength The length of source, or -1 if null-terminated. * @param count Output param to receive number of elements returned. @@ -556,7 +558,7 @@ umsg_vformat( const UMessageFormat *fmt, * specified in pattern. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 umsg_parse( const UMessageFormat *fmt, const UChar *source, int32_t sourceLength, @@ -569,7 +571,7 @@ umsg_parse( const UMessageFormat *fmt, * For numeric arguments, this function will always use doubles. Integer types * should not be passed. * This function is not able to parse all output from {@link #umsg_format }. - * @param fmt The formatter to use + * @param fmt The formatter to use * @param source The text to parse. * @param sourceLength The length of source, or -1 if null-terminated. * @param count Output param to receive number of elements returned. @@ -579,7 +581,7 @@ umsg_parse( const UMessageFormat *fmt, * @see u_formatMessage * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 umsg_vparse(const UMessageFormat *fmt, const UChar *source, int32_t sourceLength, @@ -591,7 +593,7 @@ umsg_vparse(const UMessageFormat *fmt, /** * Convert an 'apostrophe-friendly' pattern into a standard * pattern. Standard patterns treat all apostrophes as - * quotes, which is problematic in some languages, e.g. + * quotes, which is problematic in some languages, e.g. * French, where apostrophe is commonly used. This utility * assumes that only an unpaired apostrophe immediately before * a brace is a true quote. Other unpaired apostrophes are paired, @@ -611,8 +613,8 @@ umsg_vparse(const UMessageFormat *fmt, * not * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 -umsg_autoQuoteApostrophe(const UChar* pattern, +U_STABLE int32_t U_EXPORT2 +umsg_autoQuoteApostrophe(const UChar* pattern, int32_t patternLength, UChar* dest, int32_t destCapacity, diff --git a/deps/icu-small/source/i18n/unicode/unirepl.h b/deps/icu-small/source/i18n/unicode/unirepl.h index 974a3f54014081..1e98ff64827cfd 100644 --- a/deps/icu-small/source/i18n/unicode/unirepl.h +++ b/deps/icu-small/source/i18n/unicode/unirepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2005, International Business Machines Corporation @@ -13,7 +15,7 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: UnicodeReplacer */ diff --git a/deps/icu-small/source/i18n/unicode/unum.h b/deps/icu-small/source/i18n/unicode/unum.h index 8747cc595fec1a..34d54427f05ffd 100644 --- a/deps/icu-small/source/i18n/unicode/unum.h +++ b/deps/icu-small/source/i18n/unicode/unum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and others. @@ -133,7 +135,7 @@ */ typedef void* UNumberFormat; -/** The possible number format styles. +/** The possible number format styles. * @stable ICU 2.0 */ typedef enum UNumberFormatStyle { @@ -173,24 +175,24 @@ typedef enum UNumberFormatStyle { * @stable ICU 2.0 */ UNUM_SPELLOUT=5, - /** + /** * Ordinal rule-based format . The default ruleset can be specified/changed using * unum_setTextAttribute with UNUM_DEFAULT_RULESET; the available public rulesets * can be listed using unum_getTextAttribute with UNUM_PUBLIC_RULESETS. * @stable ICU 3.0 */ UNUM_ORDINAL=6, - /** - * Duration rule-based format + /** + * Duration rule-based format * @stable ICU 3.0 */ UNUM_DURATION=7, - /** + /** * Numbering system rule-based format * @stable ICU 4.2 */ UNUM_NUMBERING_SYSTEM=8, - /** + /** * Rule-based format defined by a pattern string. * @stable ICU 3.0 */ @@ -214,40 +216,40 @@ typedef enum UNumberFormatStyle { */ UNUM_CURRENCY_ACCOUNTING=12, /** - * Currency format with a currency symbol given CASH usage, e.g., + * Currency format with a currency symbol given CASH usage, e.g., * "NT$3" instead of "NT$3.23". * @stable ICU 54 */ UNUM_CASH_CURRENCY=13, -#ifndef U_HIDE_DRAFT_API /** * Decimal format expressed using compact notation * (short form, corresponds to UNumberCompactStyle=UNUM_SHORT) * e.g. "23K", "45B" - * @draft ICU 56 + * @stable ICU 56 */ UNUM_DECIMAL_COMPACT_SHORT=14, /** * Decimal format expressed using compact notation * (long form, corresponds to UNumberCompactStyle=UNUM_LONG) * e.g. "23 thousand", "45 billion" - * @draft ICU 56 + * @stable ICU 56 */ UNUM_DECIMAL_COMPACT_LONG=15, /** * Currency format with a currency symbol, e.g., "$1.00", * using non-accounting style for negative values (e.g. minus sign). * Overrides any style specified using -cf- key in locale. - * @draft ICU 56 + * @stable ICU 56 */ UNUM_CURRENCY_STANDARD=16, -#endif /* U_HIDE_DRAFT_API */ +#ifndef U_HIDE_DEPRECATED_API /** - * One more than the highest number format style constant. - * @stable ICU 4.8 + * One more than the highest normal UNumberFormatStyle value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UNUM_FORMAT_STYLE_COUNT=17, +#endif // U_HIDE_DEPRECATED_API /** * Default format @@ -261,7 +263,7 @@ typedef enum UNumberFormatStyle { UNUM_IGNORE = UNUM_PATTERN_DECIMAL } UNumberFormatStyle; -/** The possible number format rounding modes. +/** The possible number format rounding modes. * @stable ICU 2.0 */ typedef enum UNumberFormatRoundingMode { @@ -283,14 +285,14 @@ typedef enum UNumberFormatRoundingMode { #endif /* U_HIDE_DEPRECATED_API */ UNUM_ROUND_HALFDOWN = UNUM_ROUND_HALFEVEN + 1, UNUM_ROUND_HALFUP, - /** + /** * ROUND_UNNECESSARY reports an error if formatted result is not exact. * @stable ICU 4.8 */ UNUM_ROUND_UNNECESSARY } UNumberFormatRoundingMode; -/** The possible number format pad positions. +/** The possible number format pad positions. * @stable ICU 2.0 */ typedef enum UNumberFormatPadPosition { @@ -323,7 +325,13 @@ enum UCurrencySpacing { UNUM_CURRENCY_SURROUNDING_MATCH, /** @stable ICU 4.8 */ UNUM_CURRENCY_INSERT, - /** @stable ICU 4.8 */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DecimalFormatSymbols object. + /** + * One more than the highest normal UCurrencySpacing value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_CURRENCY_SPACING_COUNT }; typedef enum UCurrencySpacing UCurrencySpacing; /**< @stable ICU 4.8 */ @@ -357,8 +365,13 @@ typedef enum UNumberFormatFields { UNUM_PERMILL_FIELD, /** @stable ICU 49 */ UNUM_SIGN_FIELD, - /** @stable ICU 49 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumberFormatFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_FIELD_COUNT +#endif // U_HIDE_DEPRECATED_API } UNumberFormatFields; @@ -377,7 +390,7 @@ typedef enum UNumberFormatFields { * number format is opened using the given pattern, which must conform * to the syntax described in DecimalFormat or RuleBasedNumberFormat, * respectively. - * @param pattern A pattern specifying the format to use. + * @param pattern A pattern specifying the format to use. * This parameter is ignored unless the style is * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED. * @param patternLength The number of characters in the pattern, or -1 @@ -395,7 +408,7 @@ typedef enum UNumberFormatFields { * @see DecimalFormat * @stable ICU 2.0 */ -U_STABLE UNumberFormat* U_EXPORT2 +U_STABLE UNumberFormat* U_EXPORT2 unum_open( UNumberFormatStyle style, const UChar* pattern, int32_t patternLength, @@ -410,7 +423,7 @@ unum_open( UNumberFormatStyle style, * @param fmt The formatter to close. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_close(UNumberFormat* fmt); #if U_SHOW_CPLUSPLUS_API @@ -440,7 +453,7 @@ U_NAMESPACE_END * @return A pointer to a UNumberFormat identical to fmt. * @stable ICU 2.0 */ -U_STABLE UNumberFormat* U_EXPORT2 +U_STABLE UNumberFormat* U_EXPORT2 unum_clone(const UNumberFormat *fmt, UErrorCode *status); @@ -468,7 +481,7 @@ unum_clone(const UNumberFormat *fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_format( const UNumberFormat* fmt, int32_t number, UChar* result, @@ -500,7 +513,7 @@ unum_format( const UNumberFormat* fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatInt64(const UNumberFormat *fmt, int64_t number, UChar* result, @@ -532,7 +545,7 @@ unum_formatInt64(const UNumberFormat *fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatDouble( const UNumberFormat* fmt, double number, UChar* result, @@ -566,9 +579,9 @@ unum_formatDouble( const UNumberFormat* fmt, * @see unum_parseInt64 * @see unum_parseDouble * @see UFieldPosition -* @stable ICU 4.4 +* @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatDecimal( const UNumberFormat* fmt, const char * number, int32_t length, @@ -657,7 +670,7 @@ unum_formatUFormattable(const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_parse( const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -683,7 +696,7 @@ unum_parse( const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 2.8 */ -U_STABLE int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 unum_parseInt64(const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -709,7 +722,7 @@ unum_parseInt64(const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 2.0 */ -U_STABLE double U_EXPORT2 +U_STABLE double U_EXPORT2 unum_parseDouble( const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -744,7 +757,7 @@ unum_parseDouble( const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_parseDecimal(const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -824,7 +837,7 @@ unum_parseToUFormattable(const UNumberFormat* fmt, * @see DecimalFormat * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_applyPattern( UNumberFormat *format, UBool localized, const UChar *pattern, @@ -843,7 +856,7 @@ unum_applyPattern( UNumberFormat *format, * @see unum_countAvailable * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 unum_getAvailable(int32_t localeIndex); /** @@ -855,7 +868,7 @@ unum_getAvailable(int32_t localeIndex); * @see unum_getAvailable * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_countAvailable(void); #if UCONFIG_HAVE_PARSEALLINPUT @@ -932,7 +945,7 @@ typedef enum UNumberFormatAttribute { */ UNUM_PARSE_ALL_INPUT = 20, #endif - /** + /** * Scale, which adjusts the position of the * decimal point when formatting. Amounts will be multiplied by 10 ^ (scale) * before they are formatted. The default value for the scale is 0 ( no adjustment ). @@ -953,7 +966,7 @@ typedef enum UNumberFormatAttribute { /* TODO: test C API when it becomes @draft */ #endif /* U_HIDE_INTERNAL_API */ - /** + /** * if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose, * otherwise it is UNUM_CURRENCY_CASH purpose * Default: 0 (UNUM_CURRENCY_STANDARD purpose) @@ -973,7 +986,7 @@ typedef enum UNumberFormatAttribute { * @stable ICU 50 */ UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS = 0x1000, - /** + /** * if this attribute is set to 1, specifies that, if the pattern doesn't contain an exponent, the exponent will not be parsed. If the pattern does contain an exponent, this attribute has no effect. * Has no effect on formatting. * Default: 0 (unset) @@ -981,8 +994,8 @@ typedef enum UNumberFormatAttribute { */ UNUM_PARSE_NO_EXPONENT, - /** - * if this attribute is set to 1, specifies that, if the pattern contains a + /** + * if this attribute is set to 1, specifies that, if the pattern contains a * decimal mark the input is required to have one. If this attribute is set to 0, * specifies that input does not have to contain a decimal mark. * Has no effect on formatting. @@ -1014,7 +1027,7 @@ typedef enum UNumberFormatAttribute { * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_getAttribute(const UNumberFormat* fmt, UNumberFormatAttribute attr); @@ -1037,7 +1050,7 @@ unum_getAttribute(const UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setAttribute( UNumberFormat* fmt, UNumberFormatAttribute attr, int32_t newValue); @@ -1057,7 +1070,7 @@ unum_setAttribute( UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_STABLE double U_EXPORT2 +U_STABLE double U_EXPORT2 unum_getDoubleAttribute(const UNumberFormat* fmt, UNumberFormatAttribute attr); @@ -1075,7 +1088,7 @@ unum_getDoubleAttribute(const UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setDoubleAttribute( UNumberFormat* fmt, UNumberFormatAttribute attr, double newValue); @@ -1132,7 +1145,7 @@ typedef enum UNumberFormatTextAttribute { * @see unum_setAttribute * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_getTextAttribute( const UNumberFormat* fmt, UNumberFormatTextAttribute tag, UChar* result, @@ -1155,7 +1168,7 @@ unum_getTextAttribute( const UNumberFormat* fmt, * @see unum_setAttribute * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setTextAttribute( UNumberFormat* fmt, UNumberFormatTextAttribute tag, const UChar* newValue, @@ -1178,7 +1191,7 @@ unum_setTextAttribute( UNumberFormat* fmt, * @see DecimalFormat * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_toPattern( const UNumberFormat* fmt, UBool isPatternLocalized, UChar* result, @@ -1226,7 +1239,7 @@ typedef enum UNumberFormatSymbol { /** Significant digit symbol * @stable ICU 3.0 */ UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16, - /** The monetary grouping separator + /** The monetary grouping separator * @stable ICU 3.6 */ UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17, @@ -1272,8 +1285,13 @@ typedef enum UNumberFormatSymbol { */ UNUM_EXPONENT_MULTIPLICATION_SYMBOL = 27, - /** count symbol constants */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumberFormatSymbol value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_FORMAT_SYMBOL_COUNT = 28 +#endif // U_HIDE_DEPRECATED_API } UNumberFormatSymbol; /** @@ -1324,7 +1342,7 @@ unum_setSymbol(UNumberFormat *fmt, * Get the locale for this number format object. * You can choose between valid and actual locale. * @param fmt The formatter to get the locale from - * @param type type of the locale we're looking for (valid or actual) + * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale name * @stable ICU 2.8 @@ -1332,7 +1350,7 @@ unum_setSymbol(UNumberFormat *fmt, U_STABLE const char* U_EXPORT2 unum_getLocaleByType(const UNumberFormat *fmt, ULocDataLocaleType type, - UErrorCode* status); + UErrorCode* status); /** * Set a particular UDisplayContext value in the formatter, such as diff --git a/deps/icu-small/source/i18n/unicode/unumsys.h b/deps/icu-small/source/i18n/unicode/unumsys.h index 8f9d386dd5d458..46289c0f9aba0d 100644 --- a/deps/icu-small/source/i18n/unicode/unumsys.h +++ b/deps/icu-small/source/i18n/unicode/unumsys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013-2014, International Business Machines @@ -19,7 +21,7 @@ * \file * \brief C API: UNumberingSystem, information about numbering systems * - * Defines numbering systems. A numbering system describes the scheme by which + * Defines numbering systems. A numbering system describes the scheme by which * numbers are to be presented to the end user. In its simplest form, a numbering * system describes the set of digit characters that are to be used to display * numbers, such as Western digits, Thai digits, Arabic-Indic digits, etc., in a diff --git a/deps/icu-small/source/i18n/unicode/upluralrules.h b/deps/icu-small/source/i18n/unicode/upluralrules.h index 5bcadd4bda60f4..52e34d8d25dd66 100644 --- a/deps/icu-small/source/i18n/unicode/upluralrules.h +++ b/deps/icu-small/source/i18n/unicode/upluralrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2013, International Business Machines @@ -52,11 +54,13 @@ enum UPluralType { * @stable ICU 50 */ UPLURAL_TYPE_ORDINAL, +#ifndef U_HIDE_DEPRECATED_API /** - * Number of Plural rules types. - * @stable ICU 50 + * One more than the highest normal UPluralType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UPLURAL_TYPE_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** * @stable ICU 50 diff --git a/deps/icu-small/source/i18n/unicode/uregex.h b/deps/icu-small/source/i18n/unicode/uregex.h index c51acd5f4043fe..ab85719db7ff48 100644 --- a/deps/icu-small/source/i18n/unicode/uregex.h +++ b/deps/icu-small/source/i18n/unicode/uregex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2004-2016, International Business Machines @@ -46,9 +48,9 @@ typedef struct URegularExpression URegularExpression; */ typedef enum URegexpFlag{ -#ifndef U_HIDE_DRAFT_API - /** Forces normalization of pattern and strings. - Not implemented yet, just a placeholder, hence draft. +#ifndef U_HIDE_DRAFT_API + /** Forces normalization of pattern and strings. + Not implemented yet, just a placeholder, hence draft. @draft ICU 2.4 */ UREGEX_CANON_EQ = 128, #endif /* U_HIDE_DRAFT_API */ @@ -61,10 +63,10 @@ typedef enum URegexpFlag{ /** If set, '.' matches line terminators, otherwise '.' matching stops at line end. * @stable ICU 2.4 */ UREGEX_DOTALL = 32, - - /** If set, treat the entire pattern as a literal string. - * Metacharacters or escape sequences in the input sequence will be given - * no special meaning. + + /** If set, treat the entire pattern as a literal string. + * Metacharacters or escape sequences in the input sequence will be given + * no special meaning. * * The flag UREGEX_CASE_INSENSITIVE retains its impact * on matching when used in conjunction with this flag. @@ -79,7 +81,7 @@ typedef enum URegexpFlag{ * otherwise, match only at start and end of input string. * @stable ICU 2.4 */ UREGEX_MULTILINE = 8, - + /** Unix-only line endings. * When this mode is enabled, only \\u000a is recognized as a line ending * in the behavior of ., ^, and $. @@ -112,9 +114,9 @@ typedef enum URegexpFlag{ * string form into an internal representation using the specified match mode flags. * The resulting regular expression handle can then be used to perform various * matching operations. + * * - * - * @param pattern The Regular Expression pattern to be compiled. + * @param pattern The Regular Expression pattern to be compiled. * @param patternLength The length of the pattern, or -1 if the pattern is * NUL terminated. * @param flags Flags that alter the default matching behavior for @@ -146,7 +148,7 @@ uregex_open( const UChar *pattern, * UText struct itself remains with the caller. This is to match the behavior of * uregex_open(). * - * @param pattern The Regular Expression pattern to be compiled. + * @param pattern The Regular Expression pattern to be compiled. * @param flags Flags that alter the default matching behavior for * the regular expression, UREGEX_CASE_INSENSITIVE, for * example. For default behavior, set this parameter to zero. @@ -172,8 +174,8 @@ uregex_openUText(UText *pattern, * This function is the same as uregex_open, except that the pattern * is supplied as an 8 bit char * string in the default code page. * - * @param pattern The Regular Expression pattern to be compiled, - * NUL terminated. + * @param pattern The Regular Expression pattern to be compiled, + * NUL terminated. * @param flags Flags that alter the default matching behavior for * the regular expression, UREGEX_CASE_INSENSITIVE, for * example. For default behavior, set this parameter to zero. @@ -205,7 +207,7 @@ uregex_openC( const char *pattern, * @param regexp The regular expression to be closed. * @stable ICU 3.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_close(URegularExpression *regexp); #if U_SHOW_CPLUSPLUS_API @@ -245,7 +247,7 @@ U_NAMESPACE_END * @return the cloned copy of the compiled regular expression. * @stable ICU 3.0 */ -U_STABLE URegularExpression * U_EXPORT2 +U_STABLE URegularExpression * U_EXPORT2 uregex_clone(const URegularExpression *regexp, UErrorCode *status); /** @@ -265,7 +267,7 @@ uregex_clone(const URegularExpression *regexp, UErrorCode *status); * will remain valid until the regular expression is closed. * @stable ICU 3.0 */ -U_STABLE const UChar * U_EXPORT2 +U_STABLE const UChar * U_EXPORT2 uregex_pattern(const URegularExpression *regexp, int32_t *patLength, UErrorCode *status); @@ -281,7 +283,7 @@ uregex_pattern(const URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_patternUText(const URegularExpression *regexp, UErrorCode *status); @@ -293,7 +295,7 @@ uregex_patternUText(const URegularExpression *regexp, * @see URegexpFlag * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_flags(const URegularExpression *regexp, UErrorCode *status); @@ -306,7 +308,7 @@ uregex_flags(const URegularExpression *regexp, * Regular expression matching operations work directly on the application's * string data. No copy is made. The subject string data must not be * altered after calling this function until after all regular expression - * operations involving this string data are completed. + * operations involving this string data are completed. *

    * Zero length strings are permitted. In this case, no subsequent match * operation will dereference the text string pointer. @@ -318,7 +320,7 @@ uregex_flags(const URegularExpression *regexp, * @param status Receives errors detected by this function. * @stable ICU 3.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_setText(URegularExpression *regexp, const UChar *text, int32_t textLength, @@ -333,7 +335,7 @@ uregex_setText(URegularExpression *regexp, * Regular expression matching operations work directly on the application's * string data; only a shallow clone is made. The subject string data must not be * altered after calling this function until after all regular expression - * operations involving this string data are completed. + * operations involving this string data are completed. * * @param regexp The compiled regular expression. * @param text The subject text string. @@ -341,13 +343,13 @@ uregex_setText(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_setUText(URegularExpression *regexp, UText *text, UErrorCode *status); /** - * Get the subject text that is currently associated with this + * Get the subject text that is currently associated with this * regular expression object. If the input was supplied using uregex_setText(), * that pointer will be returned. Otherwise, the characters in the input will * be extracted to a buffer and returned. In either case, ownership remains @@ -356,7 +358,7 @@ uregex_setUText(URegularExpression *regexp, * This function will work even if the input was originally specified as a UText. * * @param regexp The compiled regular expression. - * @param textLength The length of the string is returned in this output parameter. + * @param textLength The length of the string is returned in this output parameter. * A NULL pointer may be used here if the * text length is not needed, as would be the case if * the text is known in advance to be a NUL terminated @@ -366,13 +368,13 @@ uregex_setUText(URegularExpression *regexp, * this regular expression. * @stable ICU 3.0 */ -U_STABLE const UChar * U_EXPORT2 +U_STABLE const UChar * U_EXPORT2 uregex_getText(URegularExpression *regexp, int32_t *textLength, UErrorCode *status); /** - * Get the subject text that is currently associated with this + * Get the subject text that is currently associated with this * regular expression object. * * This function will work even if the input was originally specified as a UChar string. @@ -387,7 +389,7 @@ uregex_getText(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_getUText(URegularExpression *regexp, UText *dest, UErrorCode *status); @@ -397,19 +399,19 @@ uregex_getUText(URegularExpression *regexp, * without changing any other aspect of the matching state. * The new and previous text strings must have the same content. * - * This function is intended for use in environments where ICU is operating on + * This function is intended for use in environments where ICU is operating on * strings that may move around in memory. It provides a mechanism for notifying * ICU that the string has been relocated, and providing a new UText to access the * string in its new position. * * Note that the regular expression implementation never copies the underlying text - * of a string being matched, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text + * of a string being matched, but always operates directly on the original text + * provided by the user. Refreshing simply drops the references to the old text * and replaces them with references to the new. * * Caution: this function is normally used only by very specialized - * system-level code. One example use case is with garbage collection - * that moves the text in memory. + * system-level code. One example use case is with garbage collection + * that moves the text in memory. * * @param regexp The compiled regular expression. * @param text The new (moved) text string. @@ -417,7 +419,7 @@ uregex_getUText(URegularExpression *regexp, * * @stable ICU 4.8 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_refreshUText(URegularExpression *regexp, UText *text, UErrorCode *status); @@ -442,7 +444,7 @@ uregex_refreshUText(URegularExpression *regexp, * @return TRUE if there is a match * @stable ICU 3.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_matches(URegularExpression *regexp, int32_t startIndex, UErrorCode *status); @@ -468,7 +470,7 @@ uregex_matches(URegularExpression *regexp, * @return TRUE if there is a match * @stable ICU 4.6 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_matches64(URegularExpression *regexp, int64_t startIndex, UErrorCode *status); @@ -481,7 +483,7 @@ uregex_matches64(URegularExpression *regexp, *

    If startIndex is >= 0 any input region that was set for this * URegularExpression is reset before the operation begins. * - *

    If the specified starting index == -1 the match begins at the start of the input + *

    If the specified starting index == -1 the match begins at the start of the input * region, or at the start of the full string if no region has been specified. * This corresponds directly with Matcher.lookingAt() in Java. * @@ -496,7 +498,7 @@ uregex_matches64(URegularExpression *regexp, * @return TRUE if there is a match. * @stable ICU 3.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_lookingAt(URegularExpression *regexp, int32_t startIndex, UErrorCode *status); @@ -510,7 +512,7 @@ uregex_lookingAt(URegularExpression *regexp, *

    If startIndex is >= 0 any input region that was set for this * URegularExpression is reset before the operation begins. * - *

    If the specified starting index == -1 the match begins at the start of the input + *

    If the specified starting index == -1 the match begins at the start of the input * region, or at the start of the full string if no region has been specified. * This corresponds directly with Matcher.lookingAt() in Java. * @@ -525,7 +527,7 @@ uregex_lookingAt(URegularExpression *regexp, * @return TRUE if there is a match. * @stable ICU 4.6 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_lookingAt64(URegularExpression *regexp, int64_t startIndex, UErrorCode *status); @@ -549,9 +551,9 @@ uregex_lookingAt64(URegularExpression *regexp, * @return TRUE if a match is found. * @stable ICU 3.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_find(URegularExpression *regexp, - int32_t startIndex, + int32_t startIndex, UErrorCode *status); /** @@ -574,15 +576,15 @@ uregex_find(URegularExpression *regexp, * @return TRUE if a match is found. * @stable ICU 4.6 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_find64(URegularExpression *regexp, - int64_t startIndex, + int64_t startIndex, UErrorCode *status); /** - * Find the next pattern match in the input string. Begin searching - * the input at the location following the end of he previous match, - * or at the start of the string (or region) if there is no + * Find the next pattern match in the input string. Begin searching + * the input at the location following the end of he previous match, + * or at the start of the string (or region) if there is no * previous match. If a match is found, uregex_start(), uregex_end(), and * uregex_group() will provide more information regarding the match. * @@ -592,7 +594,7 @@ uregex_find64(URegularExpression *regexp, * @see uregex_reset * @stable ICU 3.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_findNext(URegularExpression *regexp, UErrorCode *status); @@ -603,7 +605,7 @@ uregex_findNext(URegularExpression *regexp, * @return the number of capture groups * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_groupCount(URegularExpression *regexp, UErrorCode *status); @@ -669,7 +671,7 @@ uregex_groupNumberFromCName(URegularExpression *regexp, * or -1 if no applicable match. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_group(URegularExpression *regexp, int32_t groupNum, UChar *dest, @@ -698,7 +700,7 @@ uregex_group(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_groupUText(URegularExpression *regexp, int32_t groupNum, UText *dest, @@ -715,11 +717,11 @@ uregex_groupUText(URegularExpression *regexp, * @param regexp The compiled regular expression. * @param groupNum The capture group number * @param status A reference to a UErrorCode to receive any errors. - * @return the starting (native) position in the input of the text matched + * @return the starting (native) position in the input of the text matched * by the specified group. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_start(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -735,11 +737,11 @@ uregex_start(URegularExpression *regexp, * @param regexp The compiled regular expression. * @param groupNum The capture group number * @param status A reference to a UErrorCode to receive any errors. - * @return the starting (native) position in the input of the text matched + * @return the starting (native) position in the input of the text matched * by the specified group. * @stable ICU 4.6 */ -U_STABLE int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 uregex_start64(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -757,7 +759,7 @@ uregex_start64(URegularExpression *regexp, * @return the (native) index of the position following the last matched character. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_end(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -776,7 +778,7 @@ uregex_end(URegularExpression *regexp, * @return the (native) index of the position following the last matched character. * @stable ICU 4.6 */ -U_STABLE int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 uregex_end64(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -784,7 +786,7 @@ uregex_end64(URegularExpression *regexp, /** * Reset any saved state from the previous match. Has the effect of * causing uregex_findNext to begin at the specified index, and causing - * uregex_start(), uregex_end() and uregex_group() to return an error + * uregex_start(), uregex_end() and uregex_group() to return an error * indicating that there is no match information available. Clears any * match region that may have been set. * @@ -794,7 +796,7 @@ uregex_end64(URegularExpression *regexp, * @param status A reference to a UErrorCode to receive any errors. * @stable ICU 3.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_reset(URegularExpression *regexp, int32_t index, UErrorCode *status); @@ -803,7 +805,7 @@ uregex_reset(URegularExpression *regexp, * 64bit version of uregex_reset. * Reset any saved state from the previous match. Has the effect of * causing uregex_findNext to begin at the specified index, and causing - * uregex_start(), uregex_end() and uregex_group() to return an error + * uregex_start(), uregex_end() and uregex_group() to return an error * indicating that there is no match information available. Clears any * match region that may have been set. * @@ -813,7 +815,7 @@ uregex_reset(URegularExpression *regexp, * @param status A reference to a UErrorCode to receive any errors. * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_reset64(URegularExpression *regexp, int64_t index, UErrorCode *status); @@ -821,7 +823,7 @@ uregex_reset64(URegularExpression *regexp, /** * Sets the limits of the matching region for this URegularExpression. * The region is the part of the input string that will be considered when matching. - * Invoking this method resets any saved state from the previous match, + * Invoking this method resets any saved state from the previous match, * then sets the region to start at the index specified by the start parameter * and end at the index specified by the end parameter. * @@ -848,7 +850,7 @@ uregex_setRegion(URegularExpression *regexp, * 64bit version of uregex_setRegion. * Sets the limits of the matching region for this URegularExpression. * The region is the part of the input string that will be considered when matching. - * Invoking this method resets any saved state from the previous match, + * Invoking this method resets any saved state from the previous match, * then sets the region to start at the index specified by the start parameter * and end at the index specified by the end parameter. * @@ -865,7 +867,7 @@ uregex_setRegion(URegularExpression *regexp, * @param status A pointer to a UErrorCode to receive any errors. * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_setRegion64(URegularExpression *regexp, int64_t regionStart, int64_t regionLimit, @@ -880,12 +882,12 @@ uregex_setRegion64(URegularExpression *regexp, * @param regexp The compiled regular expression. * @param regionStart The (native) index to begin searches at. * @param regionLimit The (native) index to end searches at (exclusive). - * @param startIndex The index in the input text at which the next + * @param startIndex The index in the input text at which the next * match operation should begin. * @param status A pointer to a UErrorCode to receive any errors. * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_setRegionAndStart(URegularExpression *regexp, int64_t regionStart, int64_t regionLimit, @@ -915,7 +917,7 @@ uregex_regionStart(const URegularExpression *regexp, * @return The starting (native) index of this matcher's region. * @stable ICU 4.6 */ -U_STABLE int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 uregex_regionStart64(const URegularExpression *regexp, UErrorCode *status); @@ -944,7 +946,7 @@ uregex_regionEnd(const URegularExpression *regexp, * @return The ending point (native) of this matcher's region. * @stable ICU 4.6 */ -U_STABLE int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 uregex_regionEnd64(const URegularExpression *regexp, UErrorCode *status); @@ -982,8 +984,8 @@ uregex_hasTransparentBounds(const URegularExpression *regexp, * @param status A pointer to a UErrorCode to receive any errors. * @stable ICU 4.0 **/ -U_STABLE void U_EXPORT2 -uregex_useTransparentBounds(URegularExpression *regexp, +U_STABLE void U_EXPORT2 +uregex_useTransparentBounds(URegularExpression *regexp, UBool b, UErrorCode *status); @@ -1045,7 +1047,7 @@ uregex_hitEnd(const URegularExpression *regexp, * @return TRUE if more input could cause the most recent match to no longer match. * @stable ICU 4.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_requireEnd(const URegularExpression *regexp, UErrorCode *status); @@ -1058,7 +1060,7 @@ uregex_requireEnd(const URegularExpression *regexp, * with the given replacement string. This is a convenience function that * provides a complete find-and-replace-all operation. * - * This method scans the input string looking for matches of the pattern. + * This method scans the input string looking for matches of the pattern. * Input that is not part of any match is copied unchanged to the * destination buffer. Matched regions are replaced in the output * buffer by the replacement string. The replacement string may contain @@ -1077,7 +1079,7 @@ uregex_requireEnd(const URegularExpression *regexp, * is still the full length of the untruncated string. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_replaceAll(URegularExpression *regexp, const UChar *replacementText, int32_t replacementLength, @@ -1090,7 +1092,7 @@ uregex_replaceAll(URegularExpression *regexp, * with the given replacement string. This is a convenience function that * provides a complete find-and-replace-all operation. * - * This method scans the input string looking for matches of the pattern. + * This method scans the input string looking for matches of the pattern. * Input that is not part of any match is copied unchanged to the * destination buffer. Matched regions are replaced in the output * buffer by the replacement string. The replacement string may contain @@ -1106,7 +1108,7 @@ uregex_replaceAll(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_replaceAllUText(URegularExpression *regexp, UText *replacement, UText *dest, @@ -1117,7 +1119,7 @@ uregex_replaceAllUText(URegularExpression *regexp, * with the given replacement string. This is a convenience function that * provides a complete find-and-replace operation. * - * This method scans the input string looking for a match of the pattern. + * This method scans the input string looking for a match of the pattern. * All input that is not part of the match is copied unchanged to the * destination buffer. The matched region is replaced in the output * buffer by the replacement string. The replacement string may contain @@ -1136,7 +1138,7 @@ uregex_replaceAllUText(URegularExpression *regexp, * is still the full length of the untruncated string. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_replaceFirst(URegularExpression *regexp, const UChar *replacementText, int32_t replacementLength, @@ -1149,7 +1151,7 @@ uregex_replaceFirst(URegularExpression *regexp, * with the given replacement string. This is a convenience function that * provides a complete find-and-replace operation. * - * This method scans the input string looking for a match of the pattern. + * This method scans the input string looking for a match of the pattern. * All input that is not part of the match is copied unchanged to the * destination buffer. The matched region is replaced in the output * buffer by the replacement string. The replacement string may contain @@ -1165,7 +1167,7 @@ uregex_replaceFirst(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_replaceFirstUText(URegularExpression *regexp, UText *replacement, UText *dest, @@ -1194,7 +1196,7 @@ uregex_replaceFirstUText(URegularExpression *regexp, *

    For simple, prepackaged, non-incremental find-and-replace * operations, see replaceFirst() or replaceAll().

    * - * @param regexp The regular expression object. + * @param regexp The regular expression object. * @param replacementText The string that will replace the matched portion of the * input string as it is copied to the destination buffer. * The replacement text may contain references ($1, for @@ -1209,7 +1211,7 @@ uregex_replaceFirstUText(URegularExpression *regexp, * @param destCapacity The size of the output buffer, On return, this * parameter will be updated to reflect the space remaining * unused in the output buffer. - * @param status A reference to a UErrorCode to receive any errors. + * @param status A reference to a UErrorCode to receive any errors. * @return The length of the result string. In the event that * destCapacity is inadequate, the full length of the * untruncated output string is returned. @@ -1217,7 +1219,7 @@ uregex_replaceFirstUText(URegularExpression *regexp, * @stable ICU 3.0 * */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_appendReplacement(URegularExpression *regexp, const UChar *replacementText, int32_t replacementLength, @@ -1237,17 +1239,17 @@ uregex_appendReplacement(URegularExpression *regexp, *

    For simple, prepackaged, non-incremental find-and-replace * operations, see replaceFirst() or replaceAll().

    * - * @param regexp The regular expression object. + * @param regexp The regular expression object. * @param replacementText The string that will replace the matched portion of the * input string as it is copied to the destination buffer. * The replacement text may contain references ($1, for * example) to capture groups from the match. * @param dest A mutable UText that will receive the result. Must not be NULL. - * @param status A reference to a UErrorCode to receive any errors. + * @param status A reference to a UErrorCode to receive any errors. * * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_appendReplacementUText(URegularExpression *regexp, UText *replacementText, UText *dest, @@ -1256,11 +1258,11 @@ uregex_appendReplacementUText(URegularExpression *regexp, /** * As the final step in a find-and-replace operation, append the remainder * of the input string, starting at the position following the last match, - * to the destination string. uregex_appendTail() is intended + * to the destination string. uregex_appendTail() is intended * to be invoked after one or more invocations of the * uregex_appendReplacement() function. * - * @param regexp The regular expression object. This is needed to + * @param regexp The regular expression object. This is needed to * obtain the input string and with the position * of the last match within it. * @param destBuf The buffer in which the results of the @@ -1270,14 +1272,14 @@ uregex_appendReplacementUText(URegularExpression *regexp, * @param destCapacity The size of the output buffer, On return, this * value will be updated to reflect the space remaining * unused in the output buffer. - * @param status A reference to a UErrorCode to receive any errors. + * @param status A reference to a UErrorCode to receive any errors. * @return The length of the result string. In the event that * destCapacity is inadequate, the full length of the * untruncated output string is returned. * * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_appendTail(URegularExpression *regexp, UChar **destBuf, int32_t *destCapacity, @@ -1286,11 +1288,11 @@ uregex_appendTail(URegularExpression *regexp, /** * As the final step in a find-and-replace operation, append the remainder * of the input string, starting at the position following the last match, - * to the destination string. uregex_appendTailUText() is intended + * to the destination string. uregex_appendTailUText() is intended * to be invoked after one or more invocations of the * uregex_appendReplacementUText() function. * - * @param regexp The regular expression object. This is needed to + * @param regexp The regular expression object. This is needed to * obtain the input string and with the position * of the last match within it. * @param dest A mutable UText that will receive the result. Must not be NULL. @@ -1301,7 +1303,7 @@ uregex_appendTail(URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE UText * U_EXPORT2 +U_STABLE UText * U_EXPORT2 uregex_appendTailUText(URegularExpression *regexp, UText *dest, UErrorCode *status); @@ -1318,9 +1320,9 @@ uregex_appendTailUText(URegularExpression *regexp, * * If the delimiter pattern includes capture groups, the captured text will * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, + * with the fields. This is similar to Perl, but differs from Java, * which ignores the presence of capture groups in the pattern. - * + * * Trailing empty fields will always be returned, assuming sufficient * destination capacity. This differs from the default behavior for Java * and Perl where trailing empty fields are not returned. @@ -1328,7 +1330,7 @@ uregex_appendTailUText(URegularExpression *regexp, * The number of strings produced by the split operation is returned. * This count includes the strings from capture groups in the delimiter pattern. * This behavior differs from Java, which ignores capture groups. - * + * * @param regexp The compiled regular expression. * @param destBuf A (UChar *) buffer to receive the fields that * are extracted from the input string. These @@ -1338,7 +1340,7 @@ uregex_appendTailUText(URegularExpression *regexp, * set to NULL. * @param destCapacity The capacity of the destBuf. * @param requiredCapacity The actual capacity required of the destBuf. - * If destCapacity is too small, requiredCapacity will return + * If destCapacity is too small, requiredCapacity will return * the total capacity required to hold all of the output, and * a U_BUFFER_OVERFLOW_ERROR will be returned. * @param destFields An array to be filled with the position of each @@ -1357,7 +1359,7 @@ uregex_appendTailUText(URegularExpression *regexp, * @return The number of fields into which the input string was split. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_split( URegularExpression *regexp, UChar *destBuf, int32_t destCapacity, @@ -1392,7 +1394,7 @@ uregex_split( URegularExpression *regexp, * * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_splitUText(URegularExpression *regexp, UText *destFields[], int32_t destFieldsCapacity, @@ -1487,7 +1489,7 @@ uregex_getStackLimit(const URegularExpression *regexp, * @param context context pointer. The callback function will be invoked * with the context specified at the time that * uregex_setMatchCallback() is called. - * @param steps the accumulated processing time, in match steps, + * @param steps the accumulated processing time, in match steps, * for this matching operation. * @return TRUE to continue the matching operation. * FALSE to terminate the matching operation. @@ -1524,7 +1526,7 @@ uregex_setMatchCallback(URegularExpression *regexp, * Get the callback function for this URegularExpression. * * @param regexp The compiled regular expression. - * @param callback Out parameter, receives a pointer to the user-supplied + * @param callback Out parameter, receives a pointer to the user-supplied * callback function. * @param context Out parameter, receives the user context pointer that * was set when uregex_setMatchCallback() was called. @@ -1539,7 +1541,7 @@ uregex_getMatchCallback(const URegularExpression *regexp, /** * Function pointer for a regular expression find callback function. - * + * * When set, a callback function will be called during a find operation * and for operations that depend on find, such as findNext, split and some replace * operations like replaceFirst. @@ -1551,7 +1553,7 @@ uregex_getMatchCallback(const URegularExpression *regexp, * When invoked, this callback will specify the index at which a match operation is about * to be attempted, giving the application the opportunity to terminate a long-running * find operation. - * + * * If the call back function returns FALSE, the find operation will be terminated early. * * Note: the callback function must not call other functions on this @@ -1595,7 +1597,7 @@ uregex_setFindProgressCallback(URegularExpression *regexp, * Get the find progress callback function for this URegularExpression. * * @param regexp The compiled regular expression. - * @param callback Out parameter, receives a pointer to the user-supplied + * @param callback Out parameter, receives a pointer to the user-supplied * callback function. * @param context Out parameter, receives the user context pointer that * was set when uregex_setFindProgressCallback() was called. diff --git a/deps/icu-small/source/i18n/unicode/uregion.h b/deps/icu-small/source/i18n/unicode/uregion.h index 29347528e0d284..1b0f146e8e80cf 100644 --- a/deps/icu-small/source/i18n/unicode/uregion.h +++ b/deps/icu-small/source/i18n/unicode/uregion.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2014, International Business Machines @@ -15,7 +17,7 @@ * \file * \brief C API: URegion (territory containment and mapping) * - * URegion objects represent data associated with a particular Unicode Region Code, also known as a + * URegion objects represent data associated with a particular Unicode Region Code, also known as a * Unicode Region Subtag, which is defined based upon the BCP 47 standard. These include: * * Two-letter codes defined by ISO 3166-1, with special LDML treatment of certain private-use or * reserved codes; @@ -23,7 +25,7 @@ * URegion objects can also provide mappings to and from additional codes. There are different types * of regions that are important to distinguish: *

    - * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or + * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or * selected economic and other grouping" as defined in UN M.49. These are typically 3-digit codes, * but contain some 2-letter codes for LDML extensions, such as "QO" for Outlying Oceania. * Macroregions are represented in ICU by one of three region types: WORLD (code 001), @@ -31,8 +33,8 @@ * by a continent ). *

    * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also - * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code - * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate + * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code + * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate * codes. The codes are typically 2-letter codes aligned with ISO 3166, but BCP47 allows for the use * of 3-digit codes in the future. *

    @@ -43,7 +45,7 @@ * usually due to a country splitting into multiple territories or changing its name. *

    * GROUPING - A widely understood grouping of territories that has a well defined membership such - * that a region code has been assigned for it. Some of these are UN M.49 codes that don't fall into + * that a region code has been assigned for it. Some of these are UN M.49 codes that don't fall into * the world/continent/sub-continent hierarchy, while others are just well-known groupings that have * their own region code. Region "EU" (European Union) is one such region code that is a grouping. * Groupings will never be returned by the uregion_getContainingRegion, since a different type of region @@ -57,59 +59,61 @@ * URegionType is an enumeration defining the different types of regions. Current possible * values are URGN_WORLD, URGN_CONTINENT, URGN_SUBCONTINENT, URGN_TERRITORY, URGN_GROUPING, * URGN_DEPRECATED, and URGN_UNKNOWN. - * - * @stable ICU 51 + * + * @stable ICU 51 */ typedef enum URegionType { /** * Type representing the unknown region. - * @stable ICU 51 + * @stable ICU 51 */ URGN_UNKNOWN, /** * Type representing a territory. - * @stable ICU 51 + * @stable ICU 51 */ URGN_TERRITORY, /** * Type representing the whole world. - * @stable ICU 51 + * @stable ICU 51 */ URGN_WORLD, /** * Type representing a continent. - * @stable ICU 51 + * @stable ICU 51 */ URGN_CONTINENT, /** * Type representing a sub-continent. - * @stable ICU 51 + * @stable ICU 51 */ URGN_SUBCONTINENT, /** * Type representing a grouping of territories that is not to be used in * the normal WORLD/CONTINENT/SUBCONTINENT/TERRITORY containment tree. - * @stable ICU 51 + * @stable ICU 51 */ URGN_GROUPING, /** * Type representing a region whose code has been deprecated, usually * due to a country splitting into multiple territories or changing its name. - * @stable ICU 51 + * @stable ICU 51 */ URGN_DEPRECATED, +#ifndef U_HIDE_DEPRECATED_API /** - * Maximum value for this unumeration. - * @stable ICU 51 + * One more than the highest normal URegionType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ URGN_LIMIT +#endif // U_HIDE_DEPRECATED_API } URegionType; #if !UCONFIG_NO_FORMATTING diff --git a/deps/icu-small/source/i18n/unicode/ureldatefmt.h b/deps/icu-small/source/i18n/unicode/ureldatefmt.h index fce016f564ff64..40b3d593110c98 100644 --- a/deps/icu-small/source/i18n/unicode/ureldatefmt.h +++ b/deps/icu-small/source/i18n/unicode/ureldatefmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2016, International Business Machines @@ -58,11 +60,13 @@ typedef enum UDateRelativeDateTimeFormatterStyle { */ UDAT_STYLE_NARROW, - /** - * The number of styles. - * @stable ICU 54 - */ - UDAT_STYLE_COUNT +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDateRelativeDateTimeFormatterStyle value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UDAT_STYLE_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateRelativeDateTimeFormatterStyle; #ifndef U_HIDE_DRAFT_API @@ -74,7 +78,7 @@ typedef enum UDateRelativeDateTimeFormatterStyle { typedef enum URelativeDateTimeUnit { /** * Specifies that relative unit is year, e.g. "last year", - * "in 5 years". + * "in 5 years". * @draft ICU 57 */ UDAT_REL_UNIT_YEAR, @@ -146,7 +150,7 @@ typedef enum URelativeDateTimeUnit { UDAT_REL_UNIT_WEDNESDAY, /** * Specifies that relative unit is Thursday, e.g. "last Thursday", - * "this Thursday", "next Thursday", "in 5 Thursdays". + * "this Thursday", "next Thursday", "in 5 Thursdays". * @draft ICU 57 */ UDAT_REL_UNIT_THURSDAY, @@ -162,11 +166,13 @@ typedef enum URelativeDateTimeUnit { * @draft ICU 57 */ UDAT_REL_UNIT_SATURDAY, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of URelativeDateTimeUnit values - * @draft ICU 57 + * One more than the highest normal URelativeDateTimeUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_REL_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } URelativeDateTimeUnit; #endif /* U_HIDE_DRAFT_API */ diff --git a/deps/icu-small/source/i18n/unicode/usearch.h b/deps/icu-small/source/i18n/unicode/usearch.h index 10721bc726dc2c..b1d53f512d86ab 100644 --- a/deps/icu-small/source/i18n/unicode/usearch.h +++ b/deps/icu-small/source/i18n/unicode/usearch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011,2014 IBM and others. All rights reserved. @@ -22,62 +24,62 @@ * \file * \brief C API: StringSearch * - * C Apis for an engine that provides language-sensitive text searching based + * C Apis for an engine that provides language-sensitive text searching based * on the comparison rules defined in a UCollator data struct, - * see ucol.h. This ensures that language eccentricity can be - * handled, e.g. for the German collator, characters ß and SS will be matched - * if case is chosen to be ignored. + * see ucol.h. This ensures that language eccentricity can be + * handled, e.g. for the German collator, characters ß and SS will be matched + * if case is chosen to be ignored. * See the * "ICU Collation Design Document" for more information. - *

    + *

    * The implementation may use a linear search or a modified form of the Boyer-Moore - * search; for more information on the latter see + * search; for more information on the latter see * - * "Efficient Text Searching in Java", published in Java Report + * "Efficient Text Searching in Java", published in Java Report * in February, 1999. *

    * There are 2 match options for selection:
    - * Let S' be the sub-string of a text string S between the offsets start and + * Let S' be the sub-string of a text string S between the offsets start and * end . *
    - * A pattern string P matches a text string S at the offsets + * A pattern string P matches a text string S at the offsets * if - *

    - * option 1. Some canonical equivalent of P matches some canonical equivalent
    + * 
     
    + * option 1. Some canonical equivalent of P matches some canonical equivalent 
      *           of S'
    - * option 2. P matches S' and if P starts or ends with a combining mark,
    - *           there exists no non-ignorable combining mark before or after S'
    - *           in S respectively.
    + * option 2. P matches S' and if P starts or ends with a combining mark, 
    + *           there exists no non-ignorable combining mark before or after S' 
    + *           in S respectively. 
      * 
    * Option 2. will be the default. *

    - * This search has APIs similar to that of other text iteration mechanisms - * such as the break iterators in ubrk.h. Using these - * APIs, it is easy to scan through text looking for all occurances of - * a given pattern. This search iterator allows changing of direction by - * calling a reset followed by a next or previous. - * Though a direction change can occur without calling reset first, + * This search has APIs similar to that of other text iteration mechanisms + * such as the break iterators in ubrk.h. Using these + * APIs, it is easy to scan through text looking for all occurances of + * a given pattern. This search iterator allows changing of direction by + * calling a reset followed by a next or previous. + * Though a direction change can occur without calling reset first, * this operation comes with some speed penalty. - * Generally, match results in the forward direction will match the result + * Generally, match results in the forward direction will match the result * matches in the backwards direction in the reverse order *

    - * usearch.h provides APIs to specify the starting position + * usearch.h provides APIs to specify the starting position * within the text string to be searched, e.g. usearch_setOffset, - * usearch_preceding and usearch_following. Since the - * starting position will be set as it is specified, please take note that - * there are some dangerous positions which the search may render incorrect + * usearch_preceding and usearch_following. Since the + * starting position will be set as it is specified, please take note that + * there are some dangerous positions which the search may render incorrect * results: *

      *
    • The midst of a substring that requires normalization. *
    • If the following match is to be found, the position should not be the - * second character which requires to be swapped with the preceding - * character. Vice versa, if the preceding match is to be found, - * position to search from should not be the first character which + * second character which requires to be swapped with the preceding + * character. Vice versa, if the preceding match is to be found, + * position to search from should not be the first character which * requires to be swapped with the next character. E.g certain Thai and * Lao characters require swapping. - *
    • If a following pattern match is to be found, any position within a - * contracting sequence except the first will fail. Vice versa if a - * preceding pattern match is to be found, a invalid starting point + *
    • If a following pattern match is to be found, any position within a + * contracting sequence except the first will fail. Vice versa if a + * preceding pattern match is to be found, a invalid starting point * would be any character within a contracting sequence except the last. *
    *

    @@ -86,9 +88,9 @@ * boundaries given by the breakiterator. For instance the pattern "e" will * not be found in the string "\u00e9" if a character break iterator is used. *

    - * Options are provided to handle overlapping matches. - * E.g. In English, overlapping matches produces the result 0 and 2 - * for the pattern "abab" in the text "ababab", where else mutually + * Options are provided to handle overlapping matches. + * E.g. In English, overlapping matches produces the result 0 and 2 + * for the pattern "abab" in the text "ababab", where else mutually * exclusive matches only produce the result of 0. *

    * Options are also provided to implement "asymmetric search" as described in @@ -96,19 +98,19 @@ * UTS #10 Unicode Collation Algorithm, specifically the USearchAttribute * USEARCH_ELEMENT_COMPARISON and its values. *

    - * Though collator attributes will be taken into consideration while - * performing matches, there are no APIs here for setting and getting the + * Though collator attributes will be taken into consideration while + * performing matches, there are no APIs here for setting and getting the * attributes. These attributes can be set by getting the collator * from usearch_getCollator and using the APIs in ucol.h. - * Lastly to update String Search to the new collator attributes, + * Lastly to update String Search to the new collator attributes, * usearch_reset() has to be called. - *

    + *

    * Restriction:
    * Currently there are no composite characters that consists of a - * character with combining class > 0 before a character with combining - * class == 0. However, if such a character exists in the future, the + * character with combining class > 0 before a character with combining + * class == 0. However, if such a character exists in the future, the * search mechanism does not guarantee the results for option 1. - * + * *

    * Example of use:
    *

    
    @@ -120,14 +122,14 @@
      * u_uastrcpy(target, tgtstr);
      * u_uastrcpy(pattern, patstr);
      *
    - * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US",
    + * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US", 
      *                                  NULL, &status);
      * if (U_SUCCESS(status)) {
    - *     for (int pos = usearch_first(search, &status);
    - *          pos != USEARCH_DONE;
    + *     for (int pos = usearch_first(search, &status); 
    + *          pos != USEARCH_DONE; 
      *          pos = usearch_next(search, &status))
      *     {
    - *         printf("Found match at %d pos, length is %d\n", pos,
    + *         printf("Found match at %d pos, length is %d\n", pos, 
      *                                        usearch_getMatchLength(search));
      *     }
      * }
    @@ -138,7 +140,7 @@
      */
     
     /**
    -* DONE is returned by previous() and next() after all valid matches have
    +* DONE is returned by previous() and next() after all valid matches have 
     * been returned, and by first() and last() if there are no matches at all.
     * @stable ICU 2.4
     */
    @@ -165,7 +167,7 @@ typedef enum {
          */
         USEARCH_OVERLAP = 0,
     #ifndef U_HIDE_DEPRECATED_API
    -    /**
    +    /** 
          * Option for canonical matches; option 1 in header documentation.
          * The default value will be USEARCH_OFF.
          * Note: Setting this option to USEARCH_ON currently has no effect on
    @@ -173,7 +175,7 @@ typedef enum {
          * canonical match behavior, you must set UCOL_NORMALIZATION_MODE
          * appropriately (to UCOL_OFF or UCOL_ON) in the UCollator used by
          * the UStringSearch object.
    -     * @see usearch_openFromCollator
    +     * @see usearch_openFromCollator 
          * @see usearch_getCollator
          * @see usearch_setCollator
          * @see ucol_getAttribute
    @@ -181,25 +183,27 @@ typedef enum {
          */
         USEARCH_CANONICAL_MATCH = 1,
     #endif  /* U_HIDE_DEPRECATED_API */
    -    /**
    +    /** 
          * Option to control how collation elements are compared.
          * The default value will be USEARCH_STANDARD_ELEMENT_COMPARISON.
          * @stable ICU 4.4
          */
         USEARCH_ELEMENT_COMPARISON = 2,
     
    +#ifndef U_HIDE_DEPRECATED_API
         /**
    -     * Count of attribute types
    -     * @stable ICU 2.4
    +     * One more than the highest normal USearchAttribute value.
    +     * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
          */
         USEARCH_ATTRIBUTE_COUNT = 3
    +#endif  // U_HIDE_DEPRECATED_API
     } USearchAttribute;
     
     /**
     * @stable ICU 2.4
     */
     typedef enum {
    -    /**
    +    /** 
          * Default value for any USearchAttribute
          * @stable ICU 2.4
          */
    @@ -208,20 +212,20 @@ typedef enum {
          * Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH
          * @stable ICU 2.4
          */
    -    USEARCH_OFF,
    +    USEARCH_OFF, 
         /**
          * Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH
          * @stable ICU 2.4
          */
         USEARCH_ON,
    -    /**
    +    /** 
          * Value (default) for USEARCH_ELEMENT_COMPARISON;
          * standard collation element comparison at the specified collator
          * strength.
          * @stable ICU 4.4
          */
         USEARCH_STANDARD_ELEMENT_COMPARISON,
    -    /**
    +    /** 
          * Value for USEARCH_ELEMENT_COMPARISON;
          * collation element comparison is modified to effectively provide
          * behavior between the specified strength and strength - 1. Collation
    @@ -240,7 +244,7 @@ typedef enum {
          * @stable ICU 4.4
          */
         USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD,
    -    /**
    +    /** 
          * Value for USEARCH_ELEMENT_COMPARISON.
          * collation element comparison is modified to effectively provide
          * behavior between the specified strength and strength - 1. Collation
    @@ -262,11 +266,13 @@ typedef enum {
          */
         USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD,
     
    +#ifndef U_HIDE_DEPRECATED_API
         /**
    -     * Count of attribute values
    -     * @stable ICU 2.4
    +     * One more than the highest normal USearchAttributeValue value.
    +     * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
          */
         USEARCH_ATTRIBUTE_VALUE_COUNT
    +#endif  // U_HIDE_DEPRECATED_API
     } USearchAttributeValue;
     
     /* open and close ------------------------------------------------------ */
    @@ -281,21 +287,21 @@ typedef enum {
     * @param textlength length of the text string, -1 for null-termination
     * @param locale name of locale for the rules to be used
     * @param breakiter A BreakIterator that will be used to restrict the points
    -*                  at which matches are detected. If a match is found, but
    -*                  the match's start or end index is not a boundary as
    -*                  determined by the BreakIterator, the match will
    -*                  be rejected and another will be searched for.
    -*                  If this parameter is NULL, no break detection is
    +*                  at which matches are detected. If a match is found, but 
    +*                  the match's start or end index is not a boundary as 
    +*                  determined by the BreakIterator, the match will 
    +*                  be rejected and another will be searched for. 
    +*                  If this parameter is NULL, no break detection is 
     *                  attempted.
     * @param status for errors if it occurs. If pattern or text is NULL, or if
    -*               patternlength or textlength is 0 then an
    +*               patternlength or textlength is 0 then an 
     *               U_ILLEGAL_ARGUMENT_ERROR is returned.
     * @return search iterator data structure, or NULL if there is an error.
     * @stable ICU 2.4
     */
    -U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern,
    -                                              int32_t         patternlength,
    -                                        const UChar          *text,
    +U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern, 
    +                                              int32_t         patternlength, 
    +                                        const UChar          *text, 
                                                   int32_t         textlength,
                                             const char           *locale,
                                                   UBreakIterator *breakiter,
    @@ -303,9 +309,9 @@ U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern,
     
     /**
     * Creating a search iterator data struct using the argument collator language
    -* rule set. Note, user retains the ownership of this collator, thus the
    +* rule set. Note, user retains the ownership of this collator, thus the 
     * responsibility of deletion lies with the user.
    -* NOTE: string search cannot be instantiated from a collator that has
    +* NOTE: string search cannot be instantiated from a collator that has 
     * collate digits as numbers (CODAN) turned on.
     * @param pattern for matching
     * @param patternlength length of the pattern, -1 for null-termination
    @@ -313,22 +319,22 @@ U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern,
     * @param textlength length of the text string, -1 for null-termination
     * @param collator used for the language rules
     * @param breakiter A BreakIterator that will be used to restrict the points
    -*                  at which matches are detected. If a match is found, but
    -*                  the match's start or end index is not a boundary as
    -*                  determined by the BreakIterator, the match will
    -*                  be rejected and another will be searched for.
    -*                  If this parameter is NULL, no break detection is
    +*                  at which matches are detected. If a match is found, but 
    +*                  the match's start or end index is not a boundary as 
    +*                  determined by the BreakIterator, the match will 
    +*                  be rejected and another will be searched for. 
    +*                  If this parameter is NULL, no break detection is 
     *                  attempted.
    -* @param status for errors if it occurs. If collator, pattern or text is NULL,
    -*               or if patternlength or textlength is 0 then an
    +* @param status for errors if it occurs. If collator, pattern or text is NULL, 
    +*               or if patternlength or textlength is 0 then an 
     *               U_ILLEGAL_ARGUMENT_ERROR is returned.
     * @return search iterator data structure, or NULL if there is an error.
     * @stable ICU 2.4
     */
     U_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator(
    -                                         const UChar *pattern,
    +                                         const UChar *pattern, 
                                                    int32_t         patternlength,
    -                                         const UChar          *text,
    +                                         const UChar          *text, 
                                                    int32_t         textlength,
                                              const UCollator      *collator,
                                                    UBreakIterator *breakiter,
    @@ -364,34 +370,34 @@ U_NAMESPACE_END
     /* get and set methods -------------------------------------------------- */
     
     /**
    -* Sets the current position in the text string which the next search will
    -* start from. Clears previous states.
    -* This method takes the argument index and sets the position in the text
    -* string accordingly without checking if the index is pointing to a
    -* valid starting point to begin searching.
    +* Sets the current position in the text string which the next search will 
    +* start from. Clears previous states. 
    +* This method takes the argument index and sets the position in the text 
    +* string accordingly without checking if the index is pointing to a 
    +* valid starting point to begin searching. 
     * Search positions that may render incorrect results are highlighted in the
     * header comments
     * @param strsrch search iterator data struct
     * @param position position to start next search from. If position is less
    -*          than or greater than the text range for searching,
    +*          than or greater than the text range for searching, 
     *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
     * @param status error status if any.
     * @stable ICU 2.4
     */
    -U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
    +U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch, 
                                             int32_t    position,
                                             UErrorCode    *status);
     
     /**
     * Return the current index in the string text being searched.
    -* If the iteration has gone past the end of the text (or past the beginning
    +* If the iteration has gone past the end of the text (or past the beginning 
     * for a backwards search), USEARCH_DONE is returned.
     * @param strsrch search iterator data struct
     * @see #USEARCH_DONE
     * @stable ICU 2.4
     */
     U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
    -
    +    
     /**
     * Sets the text searching attributes located in the enum USearchAttribute
     * with values from the enum USearchAttributeValue.
    @@ -403,12 +409,12 @@ U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
     * @see #usearch_getAttribute
     * @stable ICU 2.4
     */
    -U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch         *strsrch,
    +U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch         *strsrch, 
                                                USearchAttribute       attribute,
                                                USearchAttributeValue  value,
                                                UErrorCode            *status);
     
    -/**
    +/**    
     * Gets the text searching attributes.
     * @param strsrch search iterator data struct
     * @param attribute text attribute to be retrieve
    @@ -422,15 +428,15 @@ U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(
     
     /**
     * Returns the index to the match in the text string that was searched.
    -* This call returns a valid result only after a successful call to
    -* usearch_first, usearch_next, usearch_previous,
    +* This call returns a valid result only after a successful call to 
    +* usearch_first, usearch_next, usearch_previous, 
     * or usearch_last.
    -* Just after construction, or after a searching method returns
    +* Just after construction, or after a searching method returns 
     * USEARCH_DONE, this method will return USEARCH_DONE.
     * 

    * Use usearch_getMatchedLength to get the matched string length. * @param strsrch search iterator data struct -* @return index to a substring within the text string that is being +* @return index to a substring within the text string that is being * searched. * @see #usearch_first * @see #usearch_next @@ -441,16 +447,16 @@ U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute( */ U_STABLE int32_t U_EXPORT2 usearch_getMatchedStart( const UStringSearch *strsrch); - + /** -* Returns the length of text in the string which matches the search pattern. -* This call returns a valid result only after a successful call to -* usearch_first, usearch_next, usearch_previous, +* Returns the length of text in the string which matches the search pattern. +* This call returns a valid result only after a successful call to +* usearch_first, usearch_next, usearch_previous, * or usearch_last. -* Just after construction, or after a searching method returns +* Just after construction, or after a searching method returns * USEARCH_DONE, this method will return 0. * @param strsrch search iterator data struct -* @return The length of the match in the string text, or 0 if there is no +* @return The length of the match in the string text, or 0 if there is no * match currently. * @see #usearch_first * @see #usearch_next @@ -463,17 +469,17 @@ U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength( const UStringSearch *strsrch); /** -* Returns the text that was matched by the most recent call to -* usearch_first, usearch_next, usearch_previous, +* Returns the text that was matched by the most recent call to +* usearch_first, usearch_next, usearch_previous, * or usearch_last. -* If the iterator is not pointing at a valid match (e.g. just after +* If the iterator is not pointing at a valid match (e.g. just after * construction or after USEARCH_DONE has been returned, returns * an empty string. If result is not large enough to store the matched text, -* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR -* will be returned in status. result will be null-terminated whenever -* possible. If the buffer fits the matched text exactly, a null-termination +* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR +* will be returned in status. result will be null-terminated whenever +* possible. If the buffer fits the matched text exactly, a null-termination * is not possible, then a U_STRING_NOT_TERMINATED_ERROR set in status. -* Pre-flighting can be either done with length = 0 or the API +* Pre-flighting can be either done with length = 0 or the API * usearch_getMatchLength. * @param strsrch search iterator data struct * @param result UChar buffer to store the matched string @@ -487,37 +493,37 @@ U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength( * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch, - UChar *result, - int32_t resultCapacity, +U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch, + UChar *result, + int32_t resultCapacity, UErrorCode *status); #if !UCONFIG_NO_BREAK_ITERATION /** -* Set the BreakIterator that will be used to restrict the points at which +* Set the BreakIterator that will be used to restrict the points at which * matches are detected. * @param strsrch search iterator data struct * @param breakiter A BreakIterator that will be used to restrict the points -* at which matches are detected. If a match is found, but -* the match's start or end index is not a boundary as -* determined by the BreakIterator, the match will -* be rejected and another will be searched for. -* If this parameter is NULL, no break detection is +* at which matches are detected. If a match is found, but +* the match's start or end index is not a boundary as +* determined by the BreakIterator, the match will +* be rejected and another will be searched for. +* If this parameter is NULL, no break detection is * attempted. * @param status for errors if it occurs * @see #usearch_getBreakIterator * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch, +U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch, UBreakIterator *breakiter, UErrorCode *status); /** -* Returns the BreakIterator that is used to restrict the points at which -* matches are detected. This will be the same object that was passed to the -* constructor or to usearch_setBreakIterator. Note that -* NULL +* Returns the BreakIterator that is used to restrict the points at which +* matches are detected. This will be the same object that was passed to the +* constructor or to usearch_setBreakIterator. Note that +* NULL * is a legal value; it means that break detection should not be attempted. * @param strsrch search iterator data struct * @return break iterator used @@ -526,23 +532,23 @@ U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch, */ U_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator( const UStringSearch *strsrch); - + #endif - + /** -* Set the string text to be searched. Text iteration will hence begin at the -* start of the text string. This method is useful if you want to re-use an +* Set the string text to be searched. Text iteration will hence begin at the +* start of the text string. This method is useful if you want to re-use an * iterator to search for the same pattern within a different body of text. * @param strsrch search iterator data struct * @param text new string to look for match * @param textlength length of the new string, -1 for null-termination -* @param status for errors if it occurs. If text is NULL, or textlength is 0 +* @param status for errors if it occurs. If text is NULL, or textlength is 0 * then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change * done to strsrch. * @see #usearch_getText * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch, +U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch, const UChar *text, int32_t textlength, UErrorCode *status); @@ -551,17 +557,17 @@ U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch, * Return the string text to be searched. * @param strsrch search iterator data struct * @param length returned string text length -* @return string text +* @return string text * @see #usearch_setText * @stable ICU 2.4 */ -U_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch, +U_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch, int32_t *length); /** -* Gets the collator used for the language rules. +* Gets the collator used for the language rules. *

    -* Deleting the returned UCollator before calling +* Deleting the returned UCollator before calling * usearch_close would cause the string search to fail. * usearch_close will delete the collator if this search owns it. * @param strsrch search iterator data struct @@ -572,32 +578,32 @@ U_STABLE UCollator * U_EXPORT2 usearch_getCollator( const UStringSearch *strsrch); /** -* Sets the collator used for the language rules. User retains the ownership +* Sets the collator used for the language rules. User retains the ownership * of this collator, thus the responsibility of deletion lies with the user. -* This method causes internal data such as Boyer-Moore shift tables to +* This method causes internal data such as Boyer-Moore shift tables to * be recalculated, but the iterator's position is unchanged. * @param strsrch search iterator data struct * @param collator to be used * @param status for errors if it occurs * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch, +U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch, const UCollator *collator, UErrorCode *status); /** * Sets the pattern used for matching. -* Internal data like the Boyer Moore table will be recalculated, but the +* Internal data like the Boyer Moore table will be recalculated, but the * iterator's position is unchanged. * @param strsrch search iterator data struct * @param pattern string * @param patternlength pattern length, -1 for null-terminated string -* @param status for errors if it occurs. If text is NULL, or textlength is 0 +* @param status for errors if it occurs. If text is NULL, or textlength is 0 * then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change * done to strsrch. * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch, +U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch, const UChar *pattern, int32_t patternlength, UErrorCode *status); @@ -605,46 +611,46 @@ U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch, /** * Gets the search pattern * @param strsrch search iterator data struct -* @param length return length of the pattern, -1 indicates that the pattern +* @param length return length of the pattern, -1 indicates that the pattern * is null-terminated * @return pattern string * @stable ICU 2.4 */ U_STABLE const UChar * U_EXPORT2 usearch_getPattern( - const UStringSearch *strsrch, + const UStringSearch *strsrch, int32_t *length); /* methods ------------------------------------------------------------- */ /** -* Returns the first index at which the string text matches the search -* pattern. -* The iterator is adjusted so that its current index (as returned by +* Returns the first index at which the string text matches the search +* pattern. +* The iterator is adjusted so that its current index (as returned by * usearch_getOffset) is the match position if one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE. * @param strsrch search iterator data struct * @param status for errors if it occurs -* @return The character index of the first match, or +* @return The character index of the first match, or * USEARCH_DONE if there are no matches. * @see #usearch_getOffset * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch, +U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch, UErrorCode *status); /** * Returns the first index equal or greater than position at which * the string text -* matches the search pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if +* matches the search pattern. The iterator is adjusted so that its current +* index (as returned by usearch_getOffset) is the match position if * one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE *

    * Search positions that may render incorrect results are highlighted in the -* header comments. If position is less than or greater than the text range +* header comments. If position is less than or greater than the text range * for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned * @param strsrch search iterator data struct * @param position to start the search at @@ -655,38 +661,38 @@ U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch, * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch, - int32_t position, +U_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch, + int32_t position, UErrorCode *status); - + /** -* Returns the last index in the target text at which it matches the search -* pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if +* Returns the last index in the target text at which it matches the search +* pattern. The iterator is adjusted so that its current +* index (as returned by usearch_getOffset) is the match position if * one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE. * @param strsrch search iterator data struct * @param status for errors if it occurs -* @return The index of the first match, or USEARCH_DONE if there +* @return The index of the first match, or USEARCH_DONE if there * are no matches. * @see #usearch_getOffset * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch, +U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch, UErrorCode *status); /** -* Returns the first index less than position at which the string text -* matches the search pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if +* Returns the first index less than position at which the string text +* matches the search pattern. The iterator is adjusted so that its current +* index (as returned by usearch_getOffset) is the match position if * one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE *

    * Search positions that may render incorrect results are highlighted in the -* header comments. If position is less than or greater than the text range +* header comments. If position is less than or greater than the text range * for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned. *

    * When USEARCH_OVERLAP option is off, the last index of the @@ -702,35 +708,35 @@ U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch, * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch, - int32_t position, +U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch, + int32_t position, UErrorCode *status); - + /** * Returns the index of the next point at which the string text matches the * search pattern, starting from the current position. -* The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if +* The iterator is adjusted so that its current +* index (as returned by usearch_getOffset) is the match position if * one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE * @param strsrch search iterator data struct * @param status for errors if it occurs -* @return The index of the next match after the current position, or +* @return The index of the next match after the current position, or * USEARCH_DONE if there are no more matches. * @see #usearch_first * @see #usearch_getOffset * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch, +U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch, UErrorCode *status); /** * Returns the index of the previous point at which the string text matches * the search pattern, starting at the current position. -* The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if +* The iterator is adjusted so that its current +* index (as returned by usearch_getOffset) is the match position if * one was found. * If a match is not found, USEARCH_DONE will be returned and * the iterator will be adjusted to the index USEARCH_DONE @@ -743,13 +749,13 @@ U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch, * @see #USEARCH_DONE * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch, +U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch, UErrorCode *status); - -/** + +/** * Reset the iteration. -* Search will begin at the start of the text string if a forward iteration -* is initiated before a backwards iteration. Otherwise if a backwards +* Search will begin at the start of the text string if a forward iteration +* is initiated before a backwards iteration. Otherwise if a backwards * iteration is initiated before a forwards iteration, the search will begin * at the end of the text string. * @param strsrch search iterator data struct @@ -780,7 +786,7 @@ U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch); * A match will not include a partial combining sequence. Combining * character sequences are considered to be inseperable units, * and either match the pattern completely, or are considered to not match - * at all. Thus, for example, an A followed a combining accent mark will + * at all. Thus, for example, an A followed a combining accent mark will * not be found when searching for a plain (unaccented) A. (unless * the collation strength has been set to ignore all accents). * @@ -792,7 +798,7 @@ U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch); * Characters that expand to multiple collation elements * (German sharp-S becoming 'ss', or the composed forms of accented * characters, for example) also must match completely. - * Searching for a single 's' in a string containing only a sharp-s will + * Searching for a single 's' in a string containing only a sharp-s will * find no match. * * @@ -807,7 +813,7 @@ U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch); * in the input text. * This parameter may be NULL. * A value of -1 will be returned if no match was found. - * + * * @param status Report any errors. Note that no match found is not an error. * @return TRUE if a match was found, FALSE otherwise. * @@ -840,7 +846,7 @@ U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch, * A match will not include a partial combining sequence. Combining * character sequences are considered to be inseperable units, * and either match the pattern completely, or are considered to not match - * at all. Thus, for example, an A followed a combining accent mark will + * at all. Thus, for example, an A followed a combining accent mark will * not be found when searching for a plain (unaccented) A. (unless * the collation strength has been set to ignore all accents). * @@ -852,7 +858,7 @@ U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch, * Characters that expand to multiple collation elements * (German sharp-S becoming 'ss', or the composed forms of accented * characters, for example) also must match completely. - * Searching for a single 's' in a string containing only a sharp-s will + * Searching for a single 's' in a string containing only a sharp-s will * find no match. * * @@ -867,7 +873,7 @@ U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch, * in the input text. * This parameter may be NULL. * A value of -1 will be returned if no match was found. - * + * * @param status Report any errors. Note that no match found is not an error. * @return TRUE if a match was found, FALSE otherwise. * diff --git a/deps/icu-small/source/i18n/unicode/uspoof.h b/deps/icu-small/source/i18n/unicode/uspoof.h index c2285a700ed6bc..40b73380c57d52 100644 --- a/deps/icu-small/source/i18n/unicode/uspoof.h +++ b/deps/icu-small/source/i18n/unicode/uspoof.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** -* Copyright (C) 2008-2015, International Business Machines Corporation +* Copyright (C) 2008-2016, International Business Machines Corporation * and others. All Rights Reserved. *************************************************************************** * file name: uspoof.h @@ -35,123 +37,350 @@ * \file * \brief Unicode Security and Spoofing Detection, C API. * - * These functions are intended to check strings, typically - * identifiers of some type, such as URLs, for the presence of - * characters that are likely to be visually confusing - - * for cases where the displayed form of an identifier may - * not be what it appears to be. - * - * Unicode Technical Report #36, http://unicode.org/reports/tr36, and - * Unicode Technical Standard #39, http://unicode.org/reports/tr39 - * "Unicode security considerations", give more background on - * security an spoofing issues with Unicode identifiers. - * The tests and checks provided by this module implement the recommendations - * from those Unicode documents. - * - * The tests available on identifiers fall into two general categories: - * -# Single identifier tests. Check whether an identifier is - * potentially confusable with any other string, or is suspicious - * for other reasons. - * -# Two identifier tests. Check whether two specific identifiers are confusable. - * This does not consider whether either of strings is potentially - * confusable with any string other than the exact one specified. - * - * The steps to perform confusability testing are - * -# Open a USpoofChecker. - * -# Configure the USPoofChecker for the desired set of tests. The tests that will - * be performed are specified by a set of USpoofChecks flags. - * -# Perform the checks using the pre-configured USpoofChecker. The results indicate - * which (if any) of the selected tests have identified possible problems with the identifier. - * Results are reported as a set of USpoofChecks flags; this mirrors the form in which - * the set of tests to perform was originally specified to the USpoofChecker. - * - * A USpoofChecker may be used repeatedly to perform checks on any number of identifiers. - * - * Thread Safety: The test functions for checking a single identifier, or for testing - * whether two identifiers are possible confusable, are thread safe. - * They may called concurrently, from multiple threads, using the same USpoofChecker instance. - * - * More generally, the standard ICU thread safety rules apply: functions that take a - * const USpoofChecker parameter are thread safe. Those that take a non-const - * USpoofChecier are not thread safe. - * - * - * Descriptions of the available checks. - * - * When testing whether pairs of identifiers are confusable, with the uspoof_areConfusable() - * family of functions, the relevant tests are - * - * -# USPOOF_SINGLE_SCRIPT_CONFUSABLE: All of the characters from the two identifiers are - * from a single script, and the two identifiers are visually confusable. - * -# USPOOF_MIXED_SCRIPT_CONFUSABLE: At least one of the identifiers contains characters - * from more than one script, and the two identifiers are visually confusable. - * -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: Each of the two identifiers is of a single script, but - * the two identifiers are from different scripts, and they are visually confusable. - * - * The safest approach is to enable all three of these checks as a group. - * - * USPOOF_ANY_CASE is a modifier for the above tests. If the identifiers being checked can - * be of mixed case and are used in a case-sensitive manner, this option should be specified. - * - * If the identifiers being checked are used in a case-insensitive manner, and if they are - * displayed to users in lower-case form only, the USPOOF_ANY_CASE option should not be - * specified. Confusabality issues involving upper case letters will not be reported. - * - * When performing tests on a single identifier, with the uspoof_check() family of functions, - * the relevant tests are: - * - * -# USPOOF_MIXED_SCRIPT_CONFUSABLE: the identifier contains characters from multiple - * scripts, and there exists an identifier of a single script that is visually confusable. - * -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: the identifier consists of characters from a single - * script, and there exists a visually confusable identifier. - * The visually confusable identifier also consists of characters from a single script. - * but not the same script as the identifier being checked. - * -# USPOOF_ANY_CASE: modifies the mixed script and whole script confusables tests. If - * specified, the checks will consider confusable characters of any case. If this flag is not - * set, the test is performed assuming case folded identifiers. - * -# USPOOF_SINGLE_SCRIPT: check that the identifier contains only characters from a - * single script. (Characters from the 'common' and 'inherited' scripts are ignored.) - * This is not a test for confusable identifiers - * -# USPOOF_INVISIBLE: check an identifier for the presence of invisible characters, - * such as zero-width spaces, or character sequences that are - * likely not to display, such as multiple occurrences of the same - * non-spacing mark. This check does not test the input string as a whole - * for conformance to any particular syntax for identifiers. - * -# USPOOF_CHAR_LIMIT: check that an identifier contains only characters from a specified set - * of acceptable characters. See uspoof_setAllowedChars() and - * uspoof_setAllowedLocales(). - * - * Note on Scripts: - * Characters from the Unicode Scripts "Common" and "Inherited" are ignored when considering - * the script of an identifier. Common characters include digits and symbols that - * are normally used with text from more than one script. - * - * Identifier Skeletons: A skeleton is a transformation of an identifier, such that - * all identifiers that are confusable with each other have the same skeleton. - * Using skeletons, it is possible to build a dictionary data structure for - * a set of identifiers, and then quickly test whether a new identifier is - * confusable with an identifier already in the set. The uspoof_getSkeleton() - * family of functions will produce the skeleton from an identifier. - * - * Note that skeletons are not guaranteed to be stable between versions - * of Unicode or ICU, so an applications should not rely on creating a permanent, - * or difficult to update, database of skeletons. Instabilities result from - * identifying new pairs or sequences of characters that are visually - * confusable, and thus must be mapped to the same skeleton character(s). - * - * Skeletons are computed using the algorithm and data describe in Unicode UAX 39. - * The latest proposed update, UAX 39 Version 8 draft 1, says "the tables SL, SA, and ML - * were still problematic, and discouraged from use in [Uniocde] 7.0. - * They were thus removed from version 8.0" - * - * In light of this, the default mapping data included with ICU 55 uses the - * Unicode 7 MA (Multi script Any case) table data for the other type options - * (Single Script, Any Case), (Single Script, Lower Case) and (Multi Script, Lower Case). + *

    + * This class, based on Unicode Technical Report #36 and + * Unicode Technical Standard #39, has two main functions: + * + *

      + *
    1. Checking whether two strings are visually confusable with each other, such as "Harvest" and + * "Ηarvest", where the second string starts with the Greek capital letter Eta.
    2. + *
    3. Checking whether an individual string is likely to be an attempt at confusing the reader (spoof + * detection), such as "paypal" with some Latin characters substituted with Cyrillic look-alikes.
    4. + *
    + * + *

    + * Although originally designed as a method for flagging suspicious identifier strings such as URLs, + * USpoofChecker has a number of other practical use cases, such as preventing attempts to evade bad-word + * content filters. + * + *

    + * The functions of this class are exposed as C API, with a handful of syntactical conveniences for C++. + * + *

    Confusables

    + * + *

    + * The following example shows how to use USpoofChecker to check for confusability between two strings: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str1 = (UChar*) u"Harvest"; + * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * + * int32_t bitmask = uspoof_areConfusable(sc, str1, -1, str2, -1, &status); + * UBool result = bitmask != 0; + * // areConfusable: 1 (status: U_ZERO_ERROR) + * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * \endcode + * + *

    + * The call to {@link uspoof_open} creates a USpoofChecker object; the call to {@link uspoof_setChecks} + * enables confusable checking and disables all other checks; the call to {@link uspoof_areConfusable} performs the + * confusability test; and the following line extracts the result out of the return value. For best performance, + * the instance should be created once (e.g., upon application startup), and the efficient + * {@link uspoof_areConfusable} method can be used at runtime. + * + *

    + * The type {@link LocalUSpoofCheckerPointer} is exposed for C++ programmers. It will automatically call + * {@link uspoof_close} when the object goes out of scope: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setChecks(sc.getAlias(), USPOOF_CONFUSABLE, &status); + * // ... + * \endcode + * + *

    + * UTS 39 defines two strings to be confusable if they map to the same skeleton string. A skeleton can + * be thought of as a "hash code". {@link uspoof_getSkeleton} computes the skeleton for a particular string, so + * the following snippet is equivalent to the example above: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str1 = (UChar*) u"Harvest"; + * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * + * // Get skeleton 1 + * int32_t skel1Len = uspoof_getSkeleton(sc, 0, str1, -1, NULL, 0, &status); + * UChar* skel1 = (UChar*) malloc(++skel1Len * sizeof(UChar)); + * status = U_ZERO_ERROR; + * uspoof_getSkeleton(sc, 0, str1, -1, skel1, skel1Len, &status); + * + * // Get skeleton 2 + * int32_t skel2Len = uspoof_getSkeleton(sc, 0, str2, -1, NULL, 0, &status); + * UChar* skel2 = (UChar*) malloc(++skel2Len * sizeof(UChar)); + * status = U_ZERO_ERROR; + * uspoof_getSkeleton(sc, 0, str2, -1, skel2, skel2Len, &status); + * + * // Are the skeletons the same? + * UBool result = u_strcmp(skel1, skel2) == 0; + * // areConfusable: 1 (status: U_ZERO_ERROR) + * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * free(skel1); + * free(skel2); + * \endcode + * + *

    + * If you need to check if a string is confusable with any string in a dictionary of many strings, rather than calling + * {@link uspoof_areConfusable} many times in a loop, {@link uspoof_getSkeleton} can be used instead, as shown below: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * #define DICTIONARY_LENGTH 2 + * UChar* dictionary[DICTIONARY_LENGTH] = { (UChar*) u"lorem", (UChar*) u"ipsum" }; + * UChar* skeletons[DICTIONARY_LENGTH]; + * UChar* str = (UChar*) u"1orern"; + * + * // Setup: + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * for (size_t i=0; i + * Note: Since the Unicode confusables mapping table is frequently updated, confusable skeletons are not + * guaranteed to be the same between ICU releases. We therefore recommend that you always compute confusable skeletons + * at runtime and do not rely on creating a permanent, or difficult to update, database of skeletons. + * + *

    Spoof Detection

    + * + *

    + * The following snippet shows a minimal example of using USpoofChecker to perform spoof detection on a + * string: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * USet* allowed = uset_openEmpty(); + * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); + * uset_addAll(allowed, uspoof_getInclusionSet(&status)); + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setAllowedChars(sc, allowed, &status); + * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); + * + * int32_t bitmask = uspoof_check(sc, str, -1, NULL, &status); + * UBool result = bitmask != 0; + * // fails checks: 1 (status: U_ZERO_ERROR) + * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * uset_close(allowed); + * \endcode + * + *

    + * As in the case for confusability checking, it is good practice to create one USpoofChecker instance at + * startup, and call the cheaper {@link uspoof_check} online. We specify the set of + * allowed characters to be those with type RECOMMENDED or INCLUSION, according to the recommendation in UTS 39. + * + *

    + * In addition to {@link uspoof_check}, the function {@link uspoof_checkUTF8} is exposed for UTF8-encoded char* strings, + * and {@link uspoof_checkUnicodeString} is exposed for C++ programmers. + * + *

    + * If the {@link USPOOF_AUX_INFO} check is enabled, a limited amount of information on why a string failed the checks + * is available in the returned bitmask. For complete information, use the {@link uspoof_check2} class of functions + * with a {@link USpoofCheckResult} parameter: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * USet* allowed = uset_openEmpty(); + * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); + * uset_addAll(allowed, uspoof_getInclusionSet(&status)); + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setAllowedChars(sc, allowed, &status); + * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); + * + * USpoofCheckResult* checkResult = uspoof_openCheckResult(&status); + * int32_t bitmask = uspoof_check2(sc, str, -1, checkResult, &status); + * + * int32_t failures1 = bitmask; + * int32_t failures2 = uspoof_getCheckResultChecks(checkResult, &status); + * assert(failures1 == failures2); + * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) + * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); + * + * // Cleanup: + * uspoof_close(sc); + * uset_close(allowed); + * uspoof_closeCheckResult(checkResult); + * \endcode + * + * C++ users can take advantage of a few syntactical conveniences. The following snippet is functionally + * equivalent to the one above: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * UnicodeSet allowed; + * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); + * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); + * + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); + * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); + * + * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); + * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); + * + * int32_t failures1 = bitmask; + * int32_t failures2 = uspoof_getCheckResultChecks(checkResult.getAlias(), &status); + * assert(failures1 == failures2); + * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) + * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); + * + * // Explicit cleanup not necessary. + * \endcode + * + *

    + * The return value is a bitmask of the checks that failed. In this case, there was one check that failed: + * {@link USPOOF_RESTRICTION_LEVEL}, corresponding to the fifth bit (16). The possible checks are: + * + *

      + *
    • RESTRICTION_LEVEL: flags strings that violate the + * Restriction Level test as specified in UTS + * 39; in most cases, this means flagging strings that contain characters from multiple different scripts.
    • + *
    • INVISIBLE: flags strings that contain invisible characters, such as zero-width spaces, or character + * sequences that are likely not to display, such as multiple occurrences of the same non-spacing mark.
    • + *
    • CHAR_LIMIT: flags strings that contain characters outside of a specified set of acceptable + * characters. See {@link uspoof_setAllowedChars} and {@link uspoof_setAllowedLocales}.
    • + *
    • MIXED_NUMBERS: flags strings that contain digits from multiple different numbering systems.
    • + *
    + * + *

    + * These checks can be enabled independently of each other. For example, if you were interested in checking for only the + * INVISIBLE and MIXED_NUMBERS conditions, you could do: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"8\u09EA"; // 8 mixed with U+09EA BENGALI DIGIT FOUR + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_INVISIBLE | USPOOF_MIXED_NUMBERS, &status); + * + * int32_t bitmask = uspoof_check2(sc, str, -1, NULL, &status); + * UBool result = bitmask != 0; + * // fails checks: 1 (status: U_ZERO_ERROR) + * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * \endcode + * + *

    + * Here is an example in C++ showing how to compute the restriction level of a string: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * UnicodeSet allowed; + * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); + * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); + * + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); + * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); + * uspoof_setChecks(sc.getAlias(), USPOOF_RESTRICTION_LEVEL | USPOOF_AUX_INFO, &status); + * + * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); + * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); + * + * URestrictionLevel restrictionLevel = uspoof_getCheckResultRestrictionLevel(checkResult.getAlias(), &status); + * // Since USPOOF_AUX_INFO was enabled, the restriction level is also available in the upper bits of the bitmask: + * assert((restrictionLevel & bitmask) == restrictionLevel); + * // Restriction level: 0x50000000 (status: U_ZERO_ERROR) + * printf("Restriction level: %#010x (status: %s)\n", restrictionLevel, u_errorName(status)); + * \endcode + * + *

    + * The code '0x50000000' corresponds to the restriction level USPOOF_MINIMALLY_RESTRICTIVE. Since + * USPOOF_MINIMALLY_RESTRICTIVE is weaker than USPOOF_MODERATELY_RESTRICTIVE, the string fails the check. + * + *

    + * Note: The Restriction Level is the most powerful of the checks. The full logic is documented in + * UTS 39, but the basic idea is that strings + * are restricted to contain characters from only a single script, except that most scripts are allowed to have + * Latin characters interspersed. Although the default restriction level is HIGHLY_RESTRICTIVE, it is + * recommended that users set their restriction level to MODERATELY_RESTRICTIVE, which allows Latin mixed + * with all other scripts except Cyrillic, Greek, and Cherokee, with which it is often confusable. For more details on + * the levels, see UTS 39 or {@link URestrictionLevel}. The Restriction Level test is aware of the set of + * allowed characters set in {@link uspoof_setAllowedChars}. Note that characters which have script code + * COMMON or INHERITED, such as numbers and punctuation, are ignored when computing whether a string has multiple + * scripts. + * + *

    Additional Information

    + * + *

    + * A USpoofChecker instance may be used repeatedly to perform checks on any number of identifiers. + * + *

    + * Thread Safety: The test functions for checking a single identifier, or for testing whether + * two identifiers are possible confusable, are thread safe. They may called concurrently, from multiple threads, + * using the same USpoofChecker instance. + * + *

    + * More generally, the standard ICU thread safety rules apply: functions that take a const USpoofChecker parameter are + * thread safe. Those that take a non-const USpoofChecker are not thread safe.. + * + * @stable ICU 4.6 */ struct USpoofChecker; typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker */ +#ifndef U_HIDE_DRAFT_API +/** + * @see uspoof_openCheckResult + */ +struct USpoofCheckResult; +/** + * @see uspoof_openCheckResult + */ +typedef struct USpoofCheckResult USpoofCheckResult; +#endif /* U_HIDE_DRAFT_API */ + /** * Enum for the kinds of checks that USpoofChecker can perform. * These enum values are used both to select the set of checks that @@ -160,45 +389,61 @@ typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker * @stable ICU 4.2 */ typedef enum USpoofChecks { - /** Single script confusable test. - * When testing whether two identifiers are confusable, report that they are if - * both are from the same script and they are visually confusable. - * Note: this test is not applicable to a check of a single identifier. - */ + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are from the same script, according to UTS 39 section + * 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 + */ USPOOF_SINGLE_SCRIPT_CONFUSABLE = 1, - /** Mixed script confusable test. - * When checking a single identifier, report a problem if - * the identifier contains multiple scripts, and - * is confusable with some other identifier in a single script - * When testing whether two identifiers are confusable, report that they are if - * the two IDs are visually confusable, - * and at least one contains characters from more than one script. + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are not from the same script, according to UTS + * 39 section 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 */ USPOOF_MIXED_SCRIPT_CONFUSABLE = 2, - /** Whole script confusable test. - * When checking a single identifier, report a problem if - * The identifier is of a single script, and - * there exists a confusable identifier in another script. - * When testing whether two identifiers are confusable, report that they are if - * each is of a single script, - * the scripts of the two identifiers are different, and - * the identifiers are visually confusable. + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are not from the same script but both of them are + * single-script strings, according to UTS 39 section 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 */ USPOOF_WHOLE_SCRIPT_CONFUSABLE = 4, - /** Any Case Modifier for confusable identifier tests. - If specified, consider all characters, of any case, when looking for confusables. - If USPOOF_ANY_CASE is not specified, identifiers being checked are assumed to have been - case folded. Upper case confusable characters will not be checked. - Selects between Lower Case Confusable and - Any Case Confusable. */ +#ifndef U_HIDE_DRAFT_API + /** + * Enable this flag in {@link uspoof_setChecks} to turn on all types of confusables. You may set + * the checks to some subset of SINGLE_SCRIPT_CONFUSABLE, MIXED_SCRIPT_CONFUSABLE, or WHOLE_SCRIPT_CONFUSABLE to + * make {@link uspoof_areConfusable} return only those types of confusables. + * + * @see uspoof_areConfusable + * @see uspoof_getSkeleton + * @draft ICU 58 + */ + USPOOF_CONFUSABLE = USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_WHOLE_SCRIPT_CONFUSABLE, +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DEPRECATED_API + /** + * This flag is deprecated and no longer affects the behavior of SpoofChecker. + * + * @deprecated ICU 58 Any case confusable mappings were removed from UTS 39; the corresponding ICU API was deprecated. + */ USPOOF_ANY_CASE = 8, +#endif /* U_HIDE_DEPRECATED_API */ /** * Check that an identifier is no looser than the specified RestrictionLevel. - * The default if uspoof_setRestrctionLevel() is not called is HIGHLY_RESTRICTIVE. + * The default if {@link uspoof_setRestrictionLevel} is not called is HIGHLY_RESTRICTIVE. * * If USPOOF_AUX_INFO is enabled the actual restriction level of the * identifier being tested will also be returned by uspoof_check(). @@ -229,14 +474,15 @@ typedef enum USpoofChecks { USPOOF_INVISIBLE = 32, /** Check that an identifier contains only characters from a specified set - * of acceptable characters. See uspoof_setAllowedChars() and - * uspoof_setAllowedLocales(). + * of acceptable characters. See {@link uspoof_setAllowedChars} and + * {@link uspoof_setAllowedLocales}. Note that a string that fails this check + * will also fail the {@link USPOOF_RESTRICTION_LEVEL} check. */ USPOOF_CHAR_LIMIT = 64, /** - * Check that an identifier does not include decimal digits from - * more than one numbering system. + * Check that an identifier does not mix numbers from different numbering systems. + * For more information, see UTS 39 section 5.3. * * @stable ICU 51 */ @@ -253,11 +499,11 @@ typedef enum USpoofChecks { * Enable the return of auxillary (non-error) information in the * upper bits of the check results value. * - * If this "check" is not enabled, the results of uspoof_check() will be zero when an - * identifier passes all of the enabled checks. + * If this "check" is not enabled, the results of {@link uspoof_check} will be + * zero when an identifier passes all of the enabled checks. * - * If this "check" is enabled, (uspoof_check() & USPOOF_ALL_CHECKS) will be zero - * when an identifier passes all checks. + * If this "check" is enabled, (uspoof_check() & {@link USPOOF_ALL_CHECKS}) will + * be zero when an identifier passes all checks. * * @stable ICU 51 */ @@ -267,39 +513,53 @@ typedef enum USpoofChecks { /** - * Constants from UAX #39 for use in setRestrictionLevel(), and + * Constants from UAX #39 for use in {@link uspoof_setRestrictionLevel}, and * for returned identifier restriction levels in check results. + * * @stable ICU 51 + * + * @see uspoof_setRestrictionLevel + * @see uspoof_check */ typedef enum URestrictionLevel { /** - * Only ASCII characters: U+0000..U+007F + * All characters in the string are in the identifier profile and all characters in the string are in the + * ASCII range. * * @stable ICU 51 */ USPOOF_ASCII = 0x10000000, /** - * All characters in each identifier must be from a single script. - * - * @stable ICU 53 - */ + * The string classifies as ASCII-Only, or all characters in the string are in the identifier profile and + * the string is single-script, according to the definition in UTS 39 section 5.1. + * + * @stable ICU 53 + */ USPOOF_SINGLE_SCRIPT_RESTRICTIVE = 0x20000000, /** - * All characters in each identifier must be from a single script, or from the combinations: Latin + Han + - * Hiragana + Katakana; Latin + Han + Bopomofo; or Latin + Han + Hangul. Note that this level will satisfy the - * vast majority of Latin-script users; also that TR36 has ASCII instead of Latin. + * The string classifies as Single Script, or all characters in the string are in the identifier profile and + * the string is covered by any of the following sets of scripts, according to the definition in UTS 39 + * section 5.1: + *

      + *
    • Latin + Han + Bopomofo (or equivalently: Latn + Hanb)
    • + *
    • Latin + Han + Hiragana + Katakana (or equivalently: Latn + Jpan)
    • + *
    • Latin + Han + Hangul (or equivalently: Latn +Kore)
    • + *
    + * This is the default restriction in ICU. * * @stable ICU 51 */ USPOOF_HIGHLY_RESTRICTIVE = 0x30000000, /** - * Allow Latin with other scripts except Cyrillic, Greek, Cherokee Otherwise, the same as Highly Restrictive + * The string classifies as Highly Restrictive, or all characters in the string are in the identifier profile + * and the string is covered by Latin and any one other Recommended or Aspirational script, except Cyrillic, + * Greek, and Cherokee. * * @stable ICU 51 */ USPOOF_MODERATELY_RESTRICTIVE = 0x40000000, /** - * Allow arbitrary mixtures of scripts. Otherwise, the same as Moderately Restrictive. + * All characters in the string are in the identifier profile. Allow arbitrary mixtures of scripts. * * @stable ICU 51 */ @@ -311,11 +571,18 @@ typedef enum USpoofChecks { */ USPOOF_UNRESTRICTIVE = 0x60000000, /** - * Mask for selecting the Restriction Level bits from the return value of uspoof_check(). - * - * @stable ICU 53 - */ - USPOOF_RESTRICTION_LEVEL_MASK = 0x7F000000 + * Mask for selecting the Restriction Level bits from the return value of {@link uspoof_check}. + * + * @stable ICU 53 + */ + USPOOF_RESTRICTION_LEVEL_MASK = 0x7F000000, +#ifndef U_HIDE_INTERNAL_API + /** + * An undefined restriction level. + * @internal + */ + USPOOF_UNDEFINED_RESTRICTIVE = -1 +#endif /* U_HIDE_INTERNAL_API */ } URestrictionLevel; /** @@ -359,10 +626,10 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng /** * Open a Spoof Checker from the source form of the spoof data. - * The two inputs correspond to the Unicode data files confusables.txt - * and confusablesWholeScript.txt as described in Unicode UAX #39. - * The syntax of the source data is as described in UAX #39 for - * these files, and the content of these files is acceptable input. + * The input corresponds to the Unicode data file confusables.txt + * as described in Unicode UAX #39. The syntax of the source data + * is as described in UAX #39 for this file, and the content of + * this file is acceptable input. * * The character encoding of the (char *) input text is UTF-8. * @@ -371,10 +638,9 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng * @param confusablesLen The length of the confusables text, or -1 if the * input string is zero terminated. * @param confusablesWholeScript - * a pointer to the whole script confusables definitions, - * as found in the file confusablesWholeScript.txt from unicode.org. - * @param confusablesWholeScriptLen The length of the whole script confusables text, or - * -1 if the input string is zero terminated. + * Deprecated in ICU 58. No longer used. + * @param confusablesWholeScriptLen + * Deprecated in ICU 58. No longer used. * @param errType In the event of an error in the input, indicates * which of the input files contains the error. * The value is one of USPOOF_SINGLE_SCRIPT_CONFUSABLE or @@ -435,8 +701,33 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status); /** - * Specify the set of checks that will be performed by the check - * functions of this Spoof Checker. + * Specify the bitmask of checks that will be performed by {@link uspoof_check}. Calling this method + * overwrites any checks that may have already been enabled. By default, all checks are enabled. + * + * To enable specific checks and disable all others, the "whitelisted" checks should be ORed together. For + * example, to fail strings containing characters outside of the set specified by {@link uspoof_setAllowedChars} and + * also strings that contain digits from mixed numbering systems: + * + *
    + * {@code
    + * uspoof_setChecks(USPOOF_CHAR_LIMIT | USPOOF_MIXED_NUMBERS);
    + * }
    + * 
    + * + * To disable specific checks and enable all others, the "blacklisted" checks should be ANDed away from + * ALL_CHECKS. For example, if you are not planning to use the {@link uspoof_areConfusable} functionality, + * it is good practice to disable the CONFUSABLE check: + * + *
    + * {@code
    + * uspoof_setChecks(USPOOF_ALL_CHECKS & ~USPOOF_CONFUSABLE);
    + * }
    + * 
    + * + * Note that methods such as {@link uspoof_setAllowedChars}, {@link uspoof_setAllowedLocales}, and + * {@link uspoof_setRestrictionLevel} will enable certain checks when called. Those methods will OR the check they + * enable onto the existing bitmask specified by this method. For more details, see the documentation of those + * methods. * * @param sc The USpoofChecker * @param checks The set of checks that this spoof checker will perform. @@ -464,19 +755,22 @@ U_STABLE int32_t U_EXPORT2 uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status); /** - * Set the loosest restriction level allowed. The default if this function - * is not called is HIGHLY_RESTRICTIVE. - * Calling this function also enables the RESTRICTION_LEVEL check. - * @param restrictionLevel The loosest restriction level allowed. - * @see URestrictionLevel - * @stable ICU 51 - */ + * Set the loosest restriction level allowed for strings. The default if this is not called is + * {@link USPOOF_HIGHLY_RESTRICTIVE}. Calling this method enables the {@link USPOOF_RESTRICTION_LEVEL} and + * {@link USPOOF_MIXED_NUMBERS} checks, corresponding to Sections 5.1 and 5.2 of UTS 39. To customize which checks are + * to be performed by {@link uspoof_check}, see {@link uspoof_setChecks}. + * + * @param sc The USpoofChecker + * @param restrictionLevel The loosest restriction level allowed. + * @see URestrictionLevel + * @stable ICU 51 + */ U_STABLE void U_EXPORT2 uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel); /** - * Get the Restriction Level that will be tested if the checks include RESTRICTION_LEVEL. + * Get the Restriction Level that will be tested if the checks include {@link USPOOF_RESTRICTION_LEVEL}. * * @return The restriction level * @see URestrictionLevel @@ -499,7 +793,7 @@ uspoof_getRestrictionLevel(const USpoofChecker *sc); * Supplying an empty string removes all restrictions; * characters from any script will be allowed. * - * The USPOOF_CHAR_LIMIT test is automatically enabled for this + * The {@link USPOOF_CHAR_LIMIT} test is automatically enabled for this * USpoofChecker when calling this function with a non-empty list * of locales. * @@ -511,7 +805,7 @@ uspoof_getRestrictionLevel(const USpoofChecker *sc); * can be made to the result of uspoof_setAllowedLocales() by * fetching the resulting set with uspoof_getAllowedChars(), * manipulating it with the Unicode Set API, then resetting the - * spoof detectors limits with uspoof_setAllowedChars() + * spoof detectors limits with uspoof_setAllowedChars(). * * @param sc The USpoofChecker * @param localesList A list list of locales, from which the language @@ -654,16 +948,21 @@ uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status); * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id The identifier to be checked for possible security issues, * in UTF-16 format. * @param length the length of the string to be checked, expressed in * 16 bit UTF-16 code units, or -1 if the string is * zero terminated. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -673,6 +972,7 @@ uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status); * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2 * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -687,15 +987,19 @@ uspoof_check(const USpoofChecker *sc, * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2UTF8}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id A identifier to be checked for possible security issues, in UTF8 format. * @param length the length of the string to be checked, or -1 if the string is * zero terminated. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. - * @deprecated ICU 51 + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -707,6 +1011,7 @@ uspoof_check(const USpoofChecker *sc, * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2UTF8 * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -722,13 +1027,17 @@ uspoof_checkUTF8(const USpoofChecker *sc, * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2UnicodeString}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id A identifier to be checked for possible security issues. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. - * @deprecated ICU 51 + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -738,6 +1047,7 @@ uspoof_checkUTF8(const USpoofChecker *sc, * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2UnicodeString * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -745,26 +1055,229 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, const icu::UnicodeString &id, int32_t *position, UErrorCode *status); +#endif + + +#ifndef U_HIDE_DRAFT_API +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * @param sc The USpoofChecker + * @param id The identifier to be checked for possible security issues, + * in UTF-16 format. + * @param length the length of the string to be checked, or -1 if the string is + * zero terminated. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2UTF8 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2(const USpoofChecker *sc, + const UChar* id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status); + +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * This version of {@link uspoof_check} accepts a USpoofCheckResult, which + * returns additional information about the identifier. For more + * information, see {@link uspoof_openCheckResult}. + * + * @param sc The USpoofChecker + * @param id A identifier to be checked for possible security issues, in UTF8 format. + * @param length the length of the string to be checked, or -1 if the string is + * zero terminated. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2UTF8(const USpoofChecker *sc, + const char *id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status); + +#if U_SHOW_CPLUSPLUS_API +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * @param sc The USpoofChecker + * @param id A identifier to be checked for possible security issues. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2 + * @see uspoof_check2UTF8 + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2UnicodeString(const USpoofChecker *sc, + const icu::UnicodeString &id, + USpoofCheckResult* checkResult, + UErrorCode *status); +#endif + +/** + * Create a USpoofCheckResult, used by the {@link uspoof_check2} class of functions to return + * information about the identifier. Information includes: + *
      + *
    • A bitmask of the checks that failed
    • + *
    • The identifier's restriction level (UTS 39 section 5.2)
    • + *
    • The set of numerics in the string (UTS 39 section 5.3)
    • + *
    + * The data held in a USpoofCheckResult is cleared whenever it is passed into a new call + * of {@link uspoof_check2}. + * + * @param status The error code, set if this function encounters a problem. + * @return the newly created USpoofCheckResult + * @see uspoof_check2 + * @see uspoof_check2UTF8 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT USpoofCheckResult* U_EXPORT2 +uspoof_openCheckResult(UErrorCode *status); + +/** + * Close a USpoofCheckResult, freeing any memory that was being held by + * its implementation. + * + * @param checkResult The instance of USpoofCheckResult to close + * @draft ICU 58 + */ +U_DRAFT void U_EXPORT2 +uspoof_closeCheckResult(USpoofCheckResult *checkResult); + +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUSpoofCheckResultPointer + * "Smart pointer" class, closes a USpoofCheckResult via {@link uspoof_closeCheckResult}. + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 58 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer, USpoofCheckResult, uspoof_closeCheckResult); + +U_NAMESPACE_END #endif +/** + * Indicates which of the spoof check(s) have failed. The value is a bitwise OR of the constants for the tests + * in question: USPOOF_RESTRICTION_LEVEL, USPOOF_CHAR_LIMIT, and so on. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @param status The error code, set if an error occurred. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. + * @see uspoof_setChecks + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status); + +/** + * Gets the restriction level that the text meets, if the USPOOF_RESTRICTION_LEVEL check + * was enabled; otherwise, undefined. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @param status The error code, set if an error occurred. + * @return The restriction level contained in the USpoofCheckResult + * @see uspoof_setRestrictionLevel + * @draft ICU 58 + */ +U_DRAFT URestrictionLevel U_EXPORT2 +uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status); + +/** + * Gets the set of numerics found in the string, if the USPOOF_MIXED_NUMBERS check was enabled; + * otherwise, undefined. The set will contain the zero digit from each decimal number system found + * in the input string. Ownership of the returned USet remains with the USpoofCheckResult. + * The USet will be free'd when {@link uspoof_closeCheckResult} is called. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @return The set of numerics contained in the USpoofCheckResult + * @param status The error code, set if an error occurred. + * @draft ICU 58 + */ +U_DRAFT const USet* U_EXPORT2 +uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status); +#endif /* U_HIDE_DRAFT_API */ + /** * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. * - * The tests to be performed are controlled by the flags - * USPOOF_SINGLE_SCRIPT_CONFUSABLE - * USPOOF_MIXED_SCRIPT_CONFUSABLE - * USPOOF_WHOLE_SCRIPT_CONFUSABLE - * At least one of these tests must be selected. + * If the strings are confusable, the return value will be nonzero, as long as + * {@link USPOOF_CONFUSABLE} was enabled in uspoof_setChecks(). + * + * The bits in the return value correspond to flags for each of the classes of + * confusables applicable to the two input strings. According to UTS 39 + * section 4, the possible flags are: + * + *
      + *
    • {@link USPOOF_SINGLE_SCRIPT_CONFUSABLE}
    • + *
    • {@link USPOOF_MIXED_SCRIPT_CONFUSABLE}
    • + *
    • {@link USPOOF_WHOLE_SCRIPT_CONFUSABLE}
    • + *
    * - * USPOOF_ANY_CASE is a modifier for the tests. Select it if the identifiers - * may be of mixed case. - * If identifiers are case folded for comparison and - * display to the user, do not select the USPOOF_ANY_CASE option. + * If one or more of the above flags were not listed in uspoof_setChecks(), this + * function will never report that class of confusable. The check + * {@link USPOOF_CONFUSABLE} enables all three flags. * * * @param sc The USpoofChecker @@ -786,6 +1299,7 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the identifiers * are not confusable. + * * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -797,10 +1311,7 @@ uspoof_areConfusable(const USpoofChecker *sc, /** - * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. + * A version of {@link uspoof_areConfusable} accepting strings in UTF-8 format. * * @param sc The USpoofChecker * @param id1 The first of the two identifiers to be compared for @@ -819,7 +1330,10 @@ uspoof_areConfusable(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the strings * are not confusable. + * * @stable ICU 4.2 + * + * @see uspoof_areConfusable */ U_STABLE int32_t U_EXPORT2 uspoof_areConfusableUTF8(const USpoofChecker *sc, @@ -832,10 +1346,7 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc, #if U_SHOW_CPLUSPLUS_API /** - * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. + * A version of {@link uspoof_areConfusable} accepting UnicodeStrings. * * @param sc The USpoofChecker * @param s1 The first of the two identifiers to be compared for @@ -850,7 +1361,10 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the identifiers * are not confusable. + * * @stable ICU 4.2 + * + * @see uspoof_areConfusable */ U_STABLE int32_t U_EXPORT2 uspoof_areConfusableUnicodeString(const USpoofChecker *sc, @@ -861,37 +1375,36 @@ uspoof_areConfusableUnicodeString(const USpoofChecker *sc, /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The input identifier whose skeleton will be computed. - * @param length The length of the input identifier, expressed in 16 bit - * UTF-16 code units, or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in 16 bit units. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return The length of the skeleton string. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The input identifier whose skeleton will be computed. + * @param length The length of the input identifier, expressed in 16 bit + * UTF-16 code units, or -1 if the string is zero terminated. + * @param dest The output buffer, to receive the skeleton string. + * @param destCapacity The length of the output buffer, in 16 bit units. + * The destCapacity may be zero, in which case the function will + * return the actual length of the skeleton. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * @return The length of the skeleton string. The returned length + * is always that of the complete skeleton, even when the + * supplied buffer is too small (or of zero length) + * + * @stable ICU 4.2 + * @see uspoof_areConfusable + */ U_STABLE int32_t U_EXPORT2 uspoof_getSkeleton(const USpoofChecker *sc, uint32_t type, @@ -900,40 +1413,38 @@ uspoof_getSkeleton(const USpoofChecker *sc, UErrorCode *status); /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The UTF-8 format identifier whose skeleton will be computed. - * @param length The length of the input string, in bytes, - * or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in bytes. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. Possible Errors include U_INVALID_CHAR_FOUND - * for invalid UTF-8 sequences, and - * U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small - * to hold the complete skeleton. - * @return The length of the skeleton string, in bytes. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The UTF-8 format identifier whose skeleton will be computed. + * @param length The length of the input string, in bytes, + * or -1 if the string is zero terminated. + * @param dest The output buffer, to receive the skeleton string. + * @param destCapacity The length of the output buffer, in bytes. + * The destCapacity may be zero, in which case the function will + * return the actual length of the skeleton. + * @param status The error code, set if an error occurred while attempting to + * perform the check. Possible Errors include U_INVALID_CHAR_FOUND + * for invalid UTF-8 sequences, and + * U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small + * to hold the complete skeleton. + * @return The length of the skeleton string, in bytes. The returned length + * is always that of the complete skeleton, even when the + * supplied buffer is too small (or of zero length) + * + * @stable ICU 4.2 + */ U_STABLE int32_t U_EXPORT2 uspoof_getSkeletonUTF8(const USpoofChecker *sc, uint32_t type, @@ -943,30 +1454,28 @@ uspoof_getSkeletonUTF8(const USpoofChecker *sc, #if U_SHOW_CPLUSPLUS_API /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker. - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The input identifier whose skeleton will be computed. - * @param dest The output identifier, to receive the skeleton string. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return A reference to the destination (skeleton) string. - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker. + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The input identifier whose skeleton will be computed. + * @param dest The output identifier, to receive the skeleton string. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * @return A reference to the destination (skeleton) string. + * + * @stable ICU 4.2 + */ U_I18N_API icu::UnicodeString & U_EXPORT2 uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, uint32_t type, @@ -977,7 +1486,8 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, /** * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -991,7 +1501,8 @@ uspoof_getInclusionSet(UErrorCode *status); /** * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Recommended_Scripts + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -1007,7 +1518,8 @@ uspoof_getRecommendedSet(UErrorCode *status); /** * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -1021,7 +1533,8 @@ uspoof_getInclusionUnicodeSet(UErrorCode *status); /** * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Recommended_Scripts + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. diff --git a/deps/icu-small/source/i18n/unicode/utmscale.h b/deps/icu-small/source/i18n/unicode/utmscale.h index e22b1bc5e6ce99..8f3c42a9e62512 100644 --- a/deps/icu-small/source/i18n/unicode/utmscale.h +++ b/deps/icu-small/source/i18n/unicode/utmscale.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004 - 2008, International Business Machines Corporation and @@ -12,7 +14,7 @@ #if !UCONFIG_NO_FORMATTING -/** +/** * \file * \brief C API: Universal Time Scale * @@ -215,7 +217,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_UNIX_TIME, - + /** * Used in IUC4C. Data is a double. Value * is milliseconds since January 1, 1970. @@ -223,7 +225,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_ICU4C_TIME, - + /** * Used in Windows for file times. Data is an int64_t. Value * is ticks (1 tick == 100 nanoseconds) since January 1, 1601. @@ -231,7 +233,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_WINDOWS_FILE_TIME, - + /** * Used in the .NET framework's System.DateTime structure. Data is an int64_t. Value * is ticks (1 tick == 100 nanoseconds) since January 1, 0001. @@ -239,7 +241,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_DOTNET_DATE_TIME, - + /** * Used in older Macintosh systems. Data is int32_t or int64_t. Value * is seconds since January 1, 1904. @@ -247,7 +249,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_MAC_OLD_TIME, - + /** * Used in newer Macintosh systems. Data is a double. Value * is seconds since January 1, 2001. @@ -255,7 +257,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_MAC_TIME, - + /** * Used in Excel. Data is an ?unknown?. Value * is days since December 31, 1899. @@ -263,7 +265,7 @@ typedef enum UDateTimeScale { * @stable ICU 3.2 */ UDTS_EXCEL_TIME, - + /** * Used in DB2. Data is an ?unknown?. Value * is days since December 31, 1899. @@ -299,7 +301,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the units vale * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -309,7 +311,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the epoch offset value * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -319,7 +321,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the minimum from value * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -329,7 +331,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the maximum from value * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -339,7 +341,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the minimum to value * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -349,7 +351,7 @@ typedef enum UTimeScaleValue { /** * The constant used to select the maximum to value * for a time scale. - * + * * @see utmscale_getTimeScaleValue * * @stable ICU 3.2 @@ -360,10 +362,10 @@ typedef enum UTimeScaleValue { /** * The constant used to select the epoch plus one value * for a time scale. - * + * * NOTE: This is an internal value. DO NOT USE IT. May not * actually be equal to the epoch offset value plus one. - * + * * @see utmscale_getTimeScaleValue * * @internal ICU 3.2 @@ -373,10 +375,10 @@ typedef enum UTimeScaleValue { /** * The constant used to select the epoch plus one value * for a time scale. - * + * * NOTE: This is an internal value. DO NOT USE IT. May not * actually be equal to the epoch offset value plus one. - * + * * @see utmscale_getTimeScaleValue * * @internal ICU 3.2 @@ -386,9 +388,9 @@ typedef enum UTimeScaleValue { /** * The constant used to select the units round value * for a time scale. - * + * * NOTE: This is an internal value. DO NOT USE IT. - * + * * @see utmscale_getTimeScaleValue * * @internal ICU 3.2 @@ -398,9 +400,9 @@ typedef enum UTimeScaleValue { /** * The constant used to select the minimum safe rounding value * for a time scale. - * + * * NOTE: This is an internal value. DO NOT USE IT. - * + * * @see utmscale_getTimeScaleValue * * @internal ICU 3.2 @@ -410,9 +412,9 @@ typedef enum UTimeScaleValue { /** * The constant used to select the maximum safe rounding value * for a time scale. - * + * * NOTE: This is an internal value. DO NOT USE IT. - * + * * @see utmscale_getTimeScaleValue * * @internal ICU 3.2 @@ -423,7 +425,7 @@ typedef enum UTimeScaleValue { /** * The number of time scale values, in other words limit of this enum. - * + * * @see utmscale_getTimeScaleValue */ UTSV_MAX_SCALE_VALUE=11 @@ -432,12 +434,12 @@ typedef enum UTimeScaleValue { /** * Get a value associated with a particular time scale. - * + * * @param timeScale The time scale * @param value A constant representing the value to get * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if arguments are invalid. * @return - the value. - * + * * @stable ICU 3.2 */ U_STABLE int64_t U_EXPORT2 @@ -451,7 +453,7 @@ U_STABLE int64_t U_EXPORT2 * @param otherTime The int64_t datetime * @param timeScale The time scale to convert from * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if the conversion is out of range. - * + * * @return The datetime converted to the universal time scale * * @stable ICU 3.2 @@ -467,7 +469,7 @@ U_STABLE int64_t U_EXPORT2 * @param universalTime The datetime in the universal time scale * @param timeScale The time scale to convert to * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if the conversion is out of range. - * + * * @return The datetime converted to the given time scale * * @stable ICU 3.2 @@ -478,3 +480,4 @@ U_STABLE int64_t U_EXPORT2 #endif /* #if !UCONFIG_NO_FORMATTING */ #endif + diff --git a/deps/icu-small/source/i18n/unicode/utrans.h b/deps/icu-small/source/i18n/unicode/utrans.h index 4ada5ef93c2082..9d70eeb83c1ed5 100644 --- a/deps/icu-small/source/i18n/unicode/utrans.h +++ b/deps/icu-small/source/i18n/unicode/utrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2011,2014-2015 International Business Machines @@ -76,7 +78,7 @@ typedef void* UTransliterator; * @stable ICU 2.0 */ typedef enum UTransDirection { - + /** * UTRANS_FORWARD means from <source> to <target> for a * transliterator with ID <source>-<target>. For a transliterator @@ -128,7 +130,7 @@ typedef struct UTransPosition { * @stable ICU 2.4 */ int32_t contextStart; - + /** * Ending index, exclusive, of the context to be considered for a * transliteration operation. The transliterator will ignore @@ -138,7 +140,7 @@ typedef struct UTransPosition { * @stable ICU 2.4 */ int32_t contextLimit; - + /** * Beginning index, inclusive, of the text to be transliteratd. * INPUT/OUTPUT parameter: This parameter is advanced past @@ -147,7 +149,7 @@ typedef struct UTransPosition { * @stable ICU 2.4 */ int32_t start; - + /** * Ending index, exclusive, of the text to be transliteratd. * INPUT/OUTPUT parameter: This parameter is updated to reflect @@ -164,9 +166,9 @@ typedef struct UTransPosition { ********************************************************************/ /** - * Open a custom transliterator, given a custom rules string - * OR - * a system transliterator, given its ID. + * Open a custom transliterator, given a custom rules string + * OR + * a system transliterator, given its ID. * Any non-NULL result from this function should later be closed with * utrans_close(). * @@ -210,7 +212,7 @@ utrans_openU(const UChar *id, * inverse of trans, or NULL if the open call fails. * @stable ICU 2.0 */ -U_STABLE UTransliterator* U_EXPORT2 +U_STABLE UTransliterator* U_EXPORT2 utrans_openInverse(const UTransliterator* trans, UErrorCode* status); @@ -224,7 +226,7 @@ utrans_openInverse(const UTransliterator* trans, * utrans_xxx() functions, or NULL if the clone call fails. * @stable ICU 2.0 */ -U_STABLE UTransliterator* U_EXPORT2 +U_STABLE UTransliterator* U_EXPORT2 utrans_clone(const UTransliterator* trans, UErrorCode* status); @@ -234,7 +236,7 @@ utrans_clone(const UTransliterator* trans, * @param trans the transliterator to be closed. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_close(UTransliterator* trans); #if U_SHOW_CPLUSPLUS_API @@ -288,7 +290,7 @@ utrans_getUnicodeID(const UTransliterator *trans, * @param status a pointer to the UErrorCode * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_register(UTransliterator* adoptedTrans, UErrorCode* status); @@ -322,7 +324,7 @@ utrans_unregisterID(const UChar* id, int32_t idLength); * @see UnicodeSet * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_setFilter(UTransliterator* trans, const UChar* filterPattern, int32_t filterPatternLen, @@ -335,7 +337,7 @@ utrans_setFilter(UTransliterator* trans, * @return the number of system transliterators. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 utrans_countAvailableIDs(void); /** @@ -377,7 +379,7 @@ utrans_openIDs(UErrorCode *pErrorCode); * @param status a pointer to the UErrorCode * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_trans(const UTransliterator* trans, UReplaceable* rep, UReplaceableCallbacks* repFunc, @@ -428,7 +430,7 @@ utrans_trans(const UTransliterator* trans, * @param status a pointer to the UErrorCode * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_transIncremental(const UTransliterator* trans, UReplaceable* rep, UReplaceableCallbacks* repFunc, @@ -453,7 +455,7 @@ utrans_transIncremental(const UTransliterator* trans, * *textLength. If textLength is NULL then the string is assumed to * be zero-terminated. * @param textCapacity a pointer to the length of the text buffer. - * Upon return, + * Upon return, * @param start the beginning index, inclusive; 0 <= start <= * limit. * @param limit pointer to the ending index, exclusive; start <= @@ -466,7 +468,7 @@ utrans_transIncremental(const UTransliterator* trans, * @param status a pointer to the UErrorCode * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_transUChars(const UTransliterator* trans, UChar* text, int32_t* textLength, @@ -501,7 +503,7 @@ utrans_transUChars(const UTransliterator* trans, * @see utrans_transIncremental * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_transIncrementalUChars(const UTransliterator* trans, UChar* text, int32_t* textLength, @@ -565,16 +567,16 @@ utrans_getSourceSet(const UTransliterator* trans, /** * Deprecated, use utrans_openU() instead. - * Open a custom transliterator, given a custom rules string - * OR - * a system transliterator, given its ID. + * Open a custom transliterator, given a custom rules string + * OR + * a system transliterator, given its ID. * Any non-NULL result from this function should later be closed with * utrans_close(). * * @param id a valid ID, as returned by utrans_getAvailableID() * @param dir the desired direction * @param rules the transliterator rules. See the C++ header rbt.h - * for rules syntax. If NULL then a system transliterator matching + * for rules syntax. If NULL then a system transliterator matching * the ID is returned. * @param rulesLength the length of the rules, or -1 if the rules * are zero-terminated. @@ -586,11 +588,11 @@ utrans_getSourceSet(const UTransliterator* trans, * utrans_xxx() functions, or NULL if the open call fails. * @deprecated ICU 2.8 Use utrans_openU() instead, see utrans.h */ -U_DEPRECATED UTransliterator* U_EXPORT2 +U_DEPRECATED UTransliterator* U_EXPORT2 utrans_open(const char* id, UTransDirection dir, const UChar* rules, /* may be Null */ - int32_t rulesLength, /* -1 if null-terminated */ + int32_t rulesLength, /* -1 if null-terminated */ UParseError* parseError, /* may be Null */ UErrorCode* status); @@ -609,7 +611,7 @@ utrans_open(const char* id, * zero-termination. This may be greater than bufCapacity. * @deprecated ICU 2.8 Use utrans_getUnicodeID() instead, see utrans.h */ -U_DEPRECATED int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 utrans_getID(const UTransliterator* trans, char* buf, int32_t bufCapacity); @@ -623,7 +625,7 @@ utrans_getID(const UTransliterator* trans, * @param id a zero-terminated ID * @deprecated ICU 2.8 Use utrans_unregisterID() instead, see utrans.h */ -U_DEPRECATED void U_EXPORT2 +U_DEPRECATED void U_EXPORT2 utrans_unregister(const char* id); /** @@ -644,7 +646,7 @@ utrans_unregister(const char* id); * zero-termination. This may be greater than bufCapacity. * @deprecated ICU 2.8 Use utrans_openIDs() instead, see utrans.h */ -U_DEPRECATED int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 utrans_getAvailableID(int32_t index, char* buf, int32_t bufCapacity); diff --git a/deps/icu-small/source/i18n/unicode/vtzone.h b/deps/icu-small/source/i18n/unicode/vtzone.h index 22992b197f4c01..75a5fca9caac4f 100644 --- a/deps/icu-small/source/i18n/unicode/vtzone.h +++ b/deps/icu-small/source/i18n/unicode/vtzone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and @@ -10,7 +12,7 @@ #include "unicode/utypes.h" /** - * \file + * \file * \brief C++ API: RFC2445 VTIMEZONE support */ @@ -101,7 +103,7 @@ class U_I18N_API VTimeZone : public BasicTimeZone { /** * Create a VTimeZone instance by RFC2445 VTIMEZONE data - * + * * @param vtzdata The string including VTIMEZONE data block * @param status Output param to filled in with a success or an error. * @return A VTimeZone initialized by the VTIMEZONE data or diff --git a/deps/icu-small/source/i18n/unum.cpp b/deps/icu-small/source/i18n/unum.cpp index 4b617df36fb759..01170b4c1d0d70 100644 --- a/deps/icu-small/source/i18n/unum.cpp +++ b/deps/icu-small/source/i18n/unum.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines @@ -36,7 +38,7 @@ U_NAMESPACE_USE U_CAPI UNumberFormat* U_EXPORT2 -unum_open( UNumberFormatStyle style, +unum_open( UNumberFormatStyle style, const UChar* pattern, int32_t patternLength, const char* locale, @@ -91,11 +93,11 @@ unum_open( UNumberFormatStyle style, UParseError tErr; /* UnicodeString can handle the case when patternLength = -1. */ const UnicodeString pat(pattern, patternLength); - + if(parseErr==NULL){ parseErr = &tErr; } - + retVal = new RuleBasedNumberFormat(pat, Locale(locale), *parseErr, *status); } break; @@ -148,7 +150,7 @@ unum_clone(const UNumberFormat *fmt, { if(U_FAILURE(*status)) return 0; - + Format *res = 0; const NumberFormat* nf = reinterpret_cast(fmt); const DecimalFormat* df = dynamic_cast(nf); @@ -164,7 +166,7 @@ unum_clone(const UNumberFormat *fmt, *status = U_MEMORY_ALLOCATION_ERROR; return 0; } - + return (UNumberFormat*) res; } @@ -189,26 +191,26 @@ unum_formatInt64(const UNumberFormat* fmt, { if(U_FAILURE(*status)) return -1; - + UnicodeString res; if(!(result==NULL && resultLength==0)) { // NULL destination for pure preflighting: empty dummy string // otherwise, alias the destination buffer res.setTo(result, 0, resultLength); } - + FieldPosition fp; - + if(pos != 0) fp.setField(pos->field); - + ((const NumberFormat*)fmt)->format(number, res, fp, *status); if(pos != 0) { pos->beginIndex = fp.getBeginIndex(); pos->endIndex = fp.getEndIndex(); } - + return res.extract(result, resultLength, *status); } @@ -220,7 +222,7 @@ unum_formatDouble( const UNumberFormat* fmt, UFieldPosition *pos, /* 0 if ignore */ UErrorCode* status) { - + if(U_FAILURE(*status)) return -1; UnicodeString res; @@ -231,22 +233,22 @@ unum_formatDouble( const UNumberFormat* fmt, } FieldPosition fp; - + if(pos != 0) fp.setField(pos->field); - + ((const NumberFormat*)fmt)->format(number, res, fp, *status); - + if(pos != 0) { pos->beginIndex = fp.getBeginIndex(); pos->endIndex = fp.getEndIndex(); } - + return res.extract(result, resultLength, *status); } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unum_formatDecimal(const UNumberFormat* fmt, const char * number, int32_t length, @@ -290,7 +292,7 @@ unum_formatDecimal(const UNumberFormat* fmt, -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unum_formatDoubleCurrency(const UNumberFormat* fmt, double number, UChar* currency, @@ -306,7 +308,7 @@ unum_formatDoubleCurrency(const UNumberFormat* fmt, // otherwise, alias the destination buffer res.setTo(result, 0, resultLength); } - + FieldPosition fp; if (pos != 0) { fp.setField(pos->field); @@ -319,12 +321,12 @@ unum_formatDoubleCurrency(const UNumberFormat* fmt, } Formattable n(tempCurrAmnt); ((const NumberFormat*)fmt)->format(n, res, fp, *status); - + if (pos != 0) { pos->beginIndex = fp.getBeginIndex(); pos->endIndex = fp.getEndIndex(); } - + return res.extract(result, resultLength, *status); } @@ -338,15 +340,15 @@ parseRes(Formattable& res, { if(U_FAILURE(*status)) return; - + const UnicodeString src((UBool)(textLength == -1), text, textLength); ParsePosition pp; - + if(parsePos != 0) pp.setIndex(*parsePos); - + ((const NumberFormat*)fmt)->parse(src, res, pp); - + if(pp.getErrorIndex() != -1) { *status = U_PARSE_ERROR; if(parsePos != 0) { @@ -533,7 +535,7 @@ unum_setDoubleAttribute( UNumberFormat* fmt, { NumberFormat* nf = reinterpret_cast(fmt); DecimalFormat* df = dynamic_cast(nf); - if (df != NULL && attr == UNUM_ROUNDING_INCREMENT) { + if (df != NULL && attr == UNUM_ROUNDING_INCREMENT) { df->setRoundingIncrement(newValue); } } @@ -625,27 +627,27 @@ unum_setTextAttribute( UNumberFormat* fmt, case UNUM_POSITIVE_PREFIX: df->setPositivePrefix(val); break; - + case UNUM_POSITIVE_SUFFIX: df->setPositiveSuffix(val); break; - + case UNUM_NEGATIVE_PREFIX: df->setNegativePrefix(val); break; - + case UNUM_NEGATIVE_SUFFIX: df->setNegativeSuffix(val); break; - + case UNUM_PADDING_CHARACTER: df->setPadCharacter(val); break; - + case UNUM_CURRENCY_CODE: df->setCurrency(val.getTerminatedBuffer(), *status); break; - + default: *status = U_UNSUPPORTED_ERROR; break; @@ -670,7 +672,7 @@ unum_toPattern( const UNumberFormat* fmt, { if(U_FAILURE(*status)) return -1; - + UnicodeString pat; if(!(result==NULL && resultLength==0)) { // NULL destination for pure preflighting: empty dummy string @@ -757,15 +759,15 @@ unum_applyPattern( UNumberFormat *fmt, { UErrorCode tStatus = U_ZERO_ERROR; UParseError tParseError; - + if(parseError == NULL){ parseError = &tParseError; } - + if(status==NULL){ status = &tStatus; } - + int32_t len = (patternLength == -1 ? u_strlen(pattern) : patternLength); const UnicodeString pat((UChar*)pattern, len, len); diff --git a/deps/icu-small/source/i18n/unumsys.cpp b/deps/icu-small/source/i18n/unumsys.cpp index aab769dd030f74..f643e342ebc762 100644 --- a/deps/icu-small/source/i18n/unumsys.cpp +++ b/deps/icu-small/source/i18n/unumsys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/upluralrules.cpp b/deps/icu-small/source/i18n/upluralrules.cpp index 1e92c8840f30a9..5e1eebf53d5dc2 100644 --- a/deps/icu-small/source/i18n/upluralrules.cpp +++ b/deps/icu-small/source/i18n/upluralrules.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/uregex.cpp b/deps/icu-small/source/i18n/uregex.cpp index a6e6be26a7d5f8..b3e137ab5adf22 100644 --- a/deps/icu-small/source/i18n/uregex.cpp +++ b/deps/icu-small/source/i18n/uregex.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2015, International Business Machines @@ -1493,7 +1495,7 @@ int32_t RegexCImpl::appendReplacement(RegularExpression *regexp, // Scan for Named Capture Group, ${name}. UnicodeString groupName; U16_FWD_1(replacementText, replIdx, replacementLength); - while (U_SUCCESS(*status) && c32 != RIGHTBRACKET) { + while (U_SUCCESS(*status) && c32 != RIGHTBRACKET) { if (replIdx >= replacementLength) { *status = U_REGEX_INVALID_CAPTURE_GROUP_NAME; break; @@ -1972,3 +1974,4 @@ uregex_splitUText(URegularExpression *regexp2, #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS + diff --git a/deps/icu-small/source/i18n/uregexc.cpp b/deps/icu-small/source/i18n/uregexc.cpp index f430cdbf68bd2d..5c3f6ebdc02c4e 100644 --- a/deps/icu-small/source/i18n/uregexc.cpp +++ b/deps/icu-small/source/i18n/uregexc.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2006, International Business Machines @@ -6,7 +8,7 @@ * file name: regexc.cpp * description: The purpose of this function is to separate the codepage * conversion from the rest of the uregex_ API. This can removes any -* dependency on codepage conversion, which reduces the overhead of +* dependency on codepage conversion, which reduces the overhead of */ #include "unicode/uregex.h" diff --git a/deps/icu-small/source/i18n/uregion.cpp b/deps/icu-small/source/i18n/uregion.cpp index 58bd9d0a0cca44..8e079ec593318c 100644 --- a/deps/icu-small/source/i18n/uregion.cpp +++ b/deps/icu-small/source/i18n/uregion.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013-2015, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/usearch.cpp b/deps/icu-small/source/i18n/usearch.cpp index a2aad7c67495eb..4bb3fc403151ca 100644 --- a/deps/icu-small/source/i18n/usearch.cpp +++ b/deps/icu-small/source/i18n/usearch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2015 IBM and others. All rights reserved. @@ -222,7 +224,7 @@ inline int32_t * addTouint32_tArray(int32_t *destination, if (U_FAILURE(*status)) { return NULL; } - uprv_memcpy(temp, destination, sizeof(int32_t) * offset); + uprv_memcpy(temp, destination, sizeof(int32_t) * (size_t)offset); *destinationlength = newlength; destination = temp; } @@ -264,7 +266,7 @@ inline int64_t * addTouint64_tArray(int64_t *destination, return NULL; } - uprv_memcpy(temp, destination, sizeof(int64_t) * offset); + uprv_memcpy(temp, destination, sizeof(int64_t) * (size_t)offset); *destinationlength = newlength; destination = temp; } @@ -1379,7 +1381,7 @@ inline UChar * addToUCharArray( UChar *destination, } } if (source1length != 0) { - uprv_memcpy(destination, source1, sizeof(UChar) * source1length); + u_memcpy(destination, source1, source1length); } if (source2length != 0) { uprv_memcpy(destination + source1length, source2, @@ -3762,7 +3764,7 @@ static UCompareCEsResult compareCE64s(int64_t targCE, int64_t patCE, int16_t com if (compareType == 0) { return U_CE_NO_MATCH; } - + int64_t targCEshifted = targCE >> 32; int64_t patCEshifted = patCE >> 32; int64_t mask; @@ -3793,7 +3795,7 @@ static UCompareCEsResult compareCE64s(int64_t targCE, int64_t patCE, int16_t com return (patLev2 == U_CE_LEVEL2_BASE || (compareType == USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD && targLev2 == U_CE_LEVEL2_BASE) )? U_CE_MATCH: U_CE_NO_MATCH; } - + mask = 0xFFFF0000; int32_t targLev3 = (int32_t)(targCE & mask); int32_t patLev3 = (int32_t)(patCE & mask); @@ -3914,7 +3916,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch, found = FALSE; break; } - + for (patIx=0; patIxpattern.pcesLength; patIx++) { patCE = strsrch->pattern.pces[patIx]; targetCEI = ceb.get(targetIx+patIx+targetIxOffset); diff --git a/deps/icu-small/source/i18n/uspoof.cpp b/deps/icu-small/source/i18n/uspoof.cpp index 341fff6ecd086d..9cb41e2c9f7eba 100644 --- a/deps/icu-small/source/i18n/uspoof.cpp +++ b/deps/icu-small/source/i18n/uspoof.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2015, International Business Machines Corporation @@ -20,7 +22,6 @@ #include "unicode/utf16.h" #include "cmemory.h" #include "cstring.h" -#include "identifier_info.h" #include "mutex.h" #include "scriptset.h" #include "uassert.h" @@ -40,9 +41,7 @@ U_NAMESPACE_USE static UnicodeSet *gInclusionSet = NULL; static UnicodeSet *gRecommendedSet = NULL; static const Normalizer2 *gNfdNormalizer = NULL; -static SpoofData *gDefaultSpoofData = NULL; static UInitOnce gSpoofInitStaticsOnce = U_INITONCE_INITIALIZER; -static UInitOnce gSpoofInitDefaultOnce = U_INITONCE_INITIALIZER; static UBool U_CALLCONV uspoof_cleanup(void) { @@ -51,83 +50,78 @@ uspoof_cleanup(void) { delete gRecommendedSet; gRecommendedSet = NULL; gNfdNormalizer = NULL; - if (gDefaultSpoofData) { - gDefaultSpoofData->removeReference(); // Will delete, assuming all user-level spoof checkers were closed. - } - gDefaultSpoofData = NULL; gSpoofInitStaticsOnce.reset(); - gSpoofInitDefaultOnce.reset(); return TRUE; } static void U_CALLCONV initializeStatics(UErrorCode &status) { - static const char *inclusionPat = - "[\\u0027\\u002D-\\u002E\\u003A\\u00B7\\u0375\\u058A\\u05F3-\\u05F4" - "\\u06FD-\\u06FE\\u0F0B\\u200C-\\u200D\\u2010\\u2019\\u2027\\u30A0\\u30FB]"; + static const char *inclusionPat = + "['\\-.\\:\\u00B7\\u0375\\u058A\\u05F3\\u05F4\\u06FD\\u06FE\\u0F0B\\u200C\\u200D\\u2010\\u" + "2019\\u2027\\u30A0\\u30FB]"; gInclusionSet = new UnicodeSet(UnicodeString(inclusionPat, -1, US_INV), status); gInclusionSet->freeze(); - // Note: data from http://unicode.org/Public/security/latest/xidmodifications.txt version 8.0.0 - // There is no tooling to generate this from the .txt file, hand extracted with editor macros. - // Ultimately, data will be available as character properties, eliminating this. + // Note: data from http://unicode.org/Public/security/9.0.0/IdentifierStatus.txt + // There is tooling to generate this constant in the unicodetools project: + // org.unicode.text.tools.RecommendedSetGenerator + // It will print the Java and C++ code to the console for easy copy-paste into this file. // Note: concatenated string constants do not work with UNICODE_STRING_SIMPLE on all platforms. - static const char *recommendedPat = - "[\\u0030-\\u0039\\u0041-\\u005A\\u005F\\u0061-\\u007A\\u00C0-\\u00D6\\u00D8-\\u00F6" - "\\u00F8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u018F\\u01A0-\\u01A1" - "\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01F0\\u01F4-\\u01F5\\u01F8-\\u021B" - "\\u021E-\\u021F\\u0226-\\u0233\\u0259\\u02BB-\\u02BC\\u02EC\\u0300-\\u0304\\u0306-\\u030C" - "\\u030F-\\u0311\\u0313-\\u0314\\u031B\\u0323-\\u0328\\u032D-\\u032E\\u0330-\\u0331" - "\\u0335\\u0338-\\u0339\\u0342\\u0345\\u037B-\\u037D\\u0386\\u0388-\\u038A\\u038C" - "\\u038E-\\u03A1\\u03A3-\\u03CE\\u03FC-\\u045F\\u048A-\\u0529\\u052E-\\u052F\\u0531-\\u0556" - "\\u0559\\u0561-\\u0586\\u05B4\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u0655" - "\\u0660-\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-\\u06D3\\u06D5\\u06E5-\\u06E6" - "\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC\\u08B2\\u0901-\\u094D\\u094F-\\u0950" - "\\u0956-\\u0957\\u0960-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983" - "\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9" - "\\u09BC-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CE\\u09D7\\u09E0-\\u09E3\\u09E6-\\u09F1" - "\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32" - "\\u0A35\\u0A38-\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A5C" - "\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0" - "\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0" - "\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28" - "\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47-\\u0B48\\u0B4B-\\u0B4D" - "\\u0B56-\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82-\\u0B83\\u0B85-\\u0B8A" - "\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4" - "\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0" - "\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28" - "\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56" - "\\u0C60-\\u0C61\\u0C66-\\u0C6F\\u0C82-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8" - "\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6" - "\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1-\\u0CF2\\u0D02-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10" - "\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D61" - "\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82-\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5" - "\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6" - "\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59" - "\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F" - "\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB2\\u0EB4-\\u0EB9\\u0EBB-\\u0EBD" - "\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE-\\u0EDF\\u0F00\\u0F20-\\u0F29" - "\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F56" - "\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71-\\u0F72\\u0F74\\u0F7A-\\u0F80" - "\\u0F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6" - "\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D" - "\\u10C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D" - "\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0" - "\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310" - "\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7" - "\\u17A9-\\u17B3\\u17B6-\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1E00-\\u1E99" - "\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D" - "\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74\\u1F76\\u1F78" - "\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8" - "\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC" - "\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6" - "\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6" - "\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3041-\\u3096\\u3099-\\u309A\\u309D-\\u309E\\u30A1-\\u30FA" - "\\u30FC-\\u30FE\\u3105-\\u312D\\u31A0-\\u31BA\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA660-\\uA661" - "\\uA674-\\uA67B\\uA67F\\uA69F\\uA717-\\uA71F\\uA788\\uA78D-\\uA78E\\uA790-\\uA793" - "\\uA7A0-\\uA7AA\\uA7FA\\uA9E7-\\uA9FE\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06" - "\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAC00-\\uD7A3\\uFA0E-\\uFA0F" - "\\uFA11\\uFA13-\\uFA14\\uFA1F\\uFA21\\uFA23-\\uFA24\\uFA27-\\uFA29\\U00020000-\\U0002A6D6" - "\\U0002A700-\\U0002B734\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1]"; + static const char *recommendedPat = + "[0-9A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u0131\\u0134-\\u013E\\u0141-\\u014" + "8\\u014A-\\u017E\\u018F\\u01A0\\u01A1\\u01AF\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E" + "6-\\u01F0\\u01F4\\u01F5\\u01F8-\\u021B\\u021E\\u021F\\u0226-\\u0233\\u0259\\u02BB\\u02B" + "C\\u02EC\\u0300-\\u0304\\u0306-\\u030C\\u030F-\\u0311\\u0313\\u0314\\u031B\\u0323-\\u03" + "28\\u032D\\u032E\\u0330\\u0331\\u0335\\u0338\\u0339\\u0342\\u0345\\u037B-\\u037D\\u0386" + "\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03FC-\\u045F\\u048A-\\u0529\\u05" + "2E\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05B4\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0" + "620-\\u063F\\u0641-\\u0655\\u0660-\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-" + "\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC\\u08B2" + "\\u08B6-\\u08BD\\u0901-\\u094D\\u094F\\u0950\\u0956\\u0957\\u0960-\\u0963\\u0966-\\u096" + "F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u0" + "9A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u" + "09D7\\u09E0-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-" + "\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A35\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\" + "u0A4B-\\u0A4D\\u0A5C\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A9" + "3-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0" + "ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\" + "u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47" + "\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83" + "\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3" + "\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0B" + "D0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u" + "0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56" + "\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92" + "-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0" + "CD5\\u0CD6\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0" + "D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57" + "\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D9" + "6\\u0D9A-\\u0DA5\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0" + "DD4\\u0DD6\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\" + "u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u" + "0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB2\\u0EB4-\\u0EB9\\u0EBB-\\u0EBD\\" + "u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE\\u0EDF\\u0F00\\u0F20-\\u0F29" + "\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F" + "56\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0" + "F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6" + "\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10" + "C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D\\u" + "1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2" + "-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1" + "315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7\\u17A9-" + "\\u17B3\\u17B6-\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1C80-\\u1C88\\u1E00-\\u1E9" + "9\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1" + "F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74\\u1F76\\u1F78\\u1F7A\\u1F" + "7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1" + "FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-" + "\\u1FF8\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0" + "-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3" + "005-\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E\\u30A1-\\u30FA\\u30FC-\\u30FE\\u" + "3105-\\u312D\\u31A0-\\u31BA\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA660\\uA661\\uA674-\\uA67B" + "\\uA67F\\uA69F\\uA717-\\uA71F\\uA788\\uA78D\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7AE" + "\\uA7FA\\uA9E7-\\uA9FE\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB" + "11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAC00-\\uD7A3\\uFA0E\\uFA0F\\uFA11\\uFA13\\uF" + "A14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29\\U00020000-\\U0002A6D6\\U0002A700-\\U0" + "002B734\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1]"; gRecommendedSet = new UnicodeSet(UnicodeString(recommendedPat, -1, US_INV), status); gRecommendedSet->freeze(); @@ -135,11 +129,6 @@ static void U_CALLCONV initializeStatics(UErrorCode &status) { ucln_i18n_registerCleanup(UCLN_I18N_SPOOF, uspoof_cleanup); } -static void U_CALLCONV initializeDefaultData(UErrorCode &status) { - gDefaultSpoofData = SpoofData::getDefault(status); - ucln_i18n_registerCleanup(UCLN_I18N_SPOOF, uspoof_cleanup); -} - U_CFUNC void uspoof_internalInitStatics(UErrorCode *status) { umtx_initOnce(gSpoofInitStaticsOnce, &initializeStatics, *status); } @@ -147,14 +136,10 @@ U_CFUNC void uspoof_internalInitStatics(UErrorCode *status) { U_CAPI USpoofChecker * U_EXPORT2 uspoof_open(UErrorCode *status) { umtx_initOnce(gSpoofInitStaticsOnce, &initializeStatics, *status); - umtx_initOnce(gSpoofInitDefaultOnce, &initializeDefaultData, *status); if (U_FAILURE(*status)) { return NULL; } - SpoofImpl *si = new SpoofImpl(gDefaultSpoofData, *status); - if (si) { - gDefaultSpoofData->addReference(); - } + SpoofImpl *si = new SpoofImpl(*status); if (U_SUCCESS(*status) && si == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; } @@ -162,7 +147,7 @@ uspoof_open(UErrorCode *status) { delete si; si = NULL; } - return reinterpret_cast(si); + return si->asUSpoofChecker(); } @@ -186,11 +171,11 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng delete si; return NULL; } - + if (pActualLength != NULL) { - *pActualLength = sd->fRawData->fLength; + *pActualLength = sd->size(); } - return reinterpret_cast(si); + return si->asUSpoofChecker(); } @@ -205,7 +190,7 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status) { delete result; result = NULL; } - return reinterpret_cast(result); + return result->asUSpoofChecker(); } @@ -224,10 +209,10 @@ uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status) { return; } - // Verify that the requested checks are all ones (bits) that + // Verify that the requested checks are all ones (bits) that // are acceptable, known values. if (checks & ~(USPOOF_ALL_CHECKS | USPOOF_AUX_INFO)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; + *status = U_ILLEGAL_ARGUMENT_ERROR; return; } @@ -250,6 +235,7 @@ uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel SpoofImpl *This = SpoofImpl::validateThis(sc, status); if (This != NULL) { This->fRestrictionLevel = restrictionLevel; + This->fChecks |= USPOOF_RESTRICTION_LEVEL; } } @@ -333,6 +319,22 @@ uspoof_check(const USpoofChecker *sc, int32_t *position, UErrorCode *status) { + // Backwards compatibility: + if (position != NULL) { + *position = 0; + } + + // Delegate to uspoof_check2 + return uspoof_check2(sc, id, length, NULL, status); +} + + +U_CAPI int32_t U_EXPORT2 +uspoof_check2(const USpoofChecker *sc, + const UChar* id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status) { + const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); if (This == NULL) { return 0; @@ -342,7 +344,7 @@ uspoof_check(const USpoofChecker *sc, return 0; } UnicodeString idStr((length == -1), id, length); // Aliasing constructor. - int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); + int32_t result = uspoof_check2UnicodeString(sc, idStr, checkResult, status); return result; } @@ -353,11 +355,27 @@ uspoof_checkUTF8(const USpoofChecker *sc, int32_t *position, UErrorCode *status) { + // Backwards compatibility: + if (position != NULL) { + *position = 0; + } + + // Delegate to uspoof_check2 + return uspoof_check2UTF8(sc, id, length, NULL, status); +} + + +U_CAPI int32_t U_EXPORT2 +uspoof_check2UTF8(const USpoofChecker *sc, + const char *id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status) { + if (U_FAILURE(*status)) { return 0; } UnicodeString idStr = UnicodeString::fromUTF8(StringPiece(id, length>=0 ? length : uprv_strlen(id))); - int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); + int32_t result = uspoof_check2UnicodeString(sc, idStr, checkResult, status); return result; } @@ -375,7 +393,7 @@ uspoof_areConfusable(const USpoofChecker *sc, *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } - + UnicodeString id1Str((length1==-1), id1, length1); // Aliasing constructor UnicodeString id2Str((length2==-1), id2, length2); // Aliasing constructor return uspoof_areConfusableUnicodeString(sc, id1Str, id2Str, status); @@ -400,7 +418,7 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc, int32_t results = uspoof_areConfusableUnicodeString(sc, id1Str, id2Str, status); return results; } - + U_CAPI int32_t U_EXPORT2 uspoof_areConfusableUnicodeString(const USpoofChecker *sc, @@ -414,130 +432,100 @@ uspoof_areConfusableUnicodeString(const USpoofChecker *sc, // // See section 4 of UAX 39 for the algorithm for checking whether two strings are confusable, // and for definitions of the types (single, whole, mixed-script) of confusables. - + // We only care about a few of the check flags. Ignore the others. // If no tests relavant to this function have been specified, return an error. // TODO: is this really the right thing to do? It's probably an error on the caller's part, // but logically we would just return 0 (no error). - if ((This->fChecks & (USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | - USPOOF_WHOLE_SCRIPT_CONFUSABLE)) == 0) { + if ((This->fChecks & USPOOF_CONFUSABLE) == 0) { *status = U_INVALID_STATE_ERROR; return 0; } - int32_t flagsForSkeleton = This->fChecks & USPOOF_ANY_CASE; - int32_t result = 0; - IdentifierInfo *identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { + // Compute the skeletons and check for confusability. + UnicodeString id1Skeleton; + uspoof_getSkeletonUnicodeString(sc, 0 /* deprecated */, id1, id1Skeleton, status); + UnicodeString id2Skeleton; + uspoof_getSkeletonUnicodeString(sc, 0 /* deprecated */, id2, id2Skeleton, status); + if (U_FAILURE(*status)) { return 0; } + if (id1Skeleton != id2Skeleton) { return 0; } - identifierInfo->setIdentifier(id1, *status); - int32_t id1ScriptCount = identifierInfo->getScriptCount(); - int32_t id1FirstScript = identifierInfo->getScripts()->nextSetBit(0); - identifierInfo->setIdentifier(id2, *status); - int32_t id2ScriptCount = identifierInfo->getScriptCount(); - int32_t id2FirstScript = identifierInfo->getScripts()->nextSetBit(0); - This->releaseIdentifierInfo(identifierInfo); - identifierInfo = NULL; - - if (This->fChecks & USPOOF_SINGLE_SCRIPT_CONFUSABLE) { - UnicodeString id1Skeleton; - UnicodeString id2Skeleton; - if (id1ScriptCount <= 1 && id2ScriptCount <= 1 && id1FirstScript == id2FirstScript) { - flagsForSkeleton |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id1, id1Skeleton, status); - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id2, id2Skeleton, status); - if (id1Skeleton == id2Skeleton) { - result |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; - } + + // If we get here, the strings are confusable. Now we just need to set the flags for the appropriate classes + // of confusables according to UTS 39 section 4. + // Start by computing the resolved script sets of id1 and id2. + ScriptSet id1RSS; + This->getResolvedScriptSet(id1, id1RSS, *status); + ScriptSet id2RSS; + This->getResolvedScriptSet(id2, id2RSS, *status); + + // Turn on all applicable flags + int32_t result = 0; + if (id1RSS.intersects(id2RSS)) { + result |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; + } else { + result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; + if (!id1RSS.isEmpty() && !id2RSS.isEmpty()) { + result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; } } - if (result & USPOOF_SINGLE_SCRIPT_CONFUSABLE) { - // If the two inputs are single script confusable they cannot also be - // mixed or whole script confusable, according to the UAX39 definitions. - // So we can skip those tests. - return result; + // Turn off flags that the user doesn't want + if ((This->fChecks & USPOOF_SINGLE_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_SINGLE_SCRIPT_CONFUSABLE; } - - // Two identifiers are whole script confusable if each is of a single script - // and they are mixed script confusable. - UBool possiblyWholeScriptConfusables = - id1ScriptCount <= 1 && id2ScriptCount <= 1 && (This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE); - - // - // Mixed Script Check - // - if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) || possiblyWholeScriptConfusables ) { - // For getSkeleton(), resetting the USPOOF_SINGLE_SCRIPT_CONFUSABLE flag will get us - // the mixed script table skeleton, which is what we want. - // The Any Case / Lower Case bit in the skelton flags was set at the top of the function. - UnicodeString id1Skeleton; - UnicodeString id2Skeleton; - flagsForSkeleton &= ~USPOOF_SINGLE_SCRIPT_CONFUSABLE; - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id1, id1Skeleton, status); - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id2, id2Skeleton, status); - if (id1Skeleton == id2Skeleton) { - result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; - if (possiblyWholeScriptConfusables) { - result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; - } - } + if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_MIXED_SCRIPT_CONFUSABLE; + } + if ((This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_WHOLE_SCRIPT_CONFUSABLE; } return result; } - - U_CAPI int32_t U_EXPORT2 uspoof_checkUnicodeString(const USpoofChecker *sc, const icu::UnicodeString &id, int32_t *position, UErrorCode *status) { - const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); - if (This == NULL) { - return 0; - } - int32_t result = 0; - IdentifierInfo *identifierInfo = NULL; - if ((This->fChecks) & (USPOOF_RESTRICTION_LEVEL | USPOOF_MIXED_NUMBERS)) { - identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { - goto cleanupAndReturn; - } - identifierInfo->setIdentifier(id, *status); - identifierInfo->setIdentifierProfile(*This->fAllowedCharsSet); + // Backwards compatibility: + if (position != NULL) { + *position = 0; } + // Delegate to uspoof_check2 + return uspoof_check2UnicodeString(sc, id, NULL, status); +} + +int32_t checkImpl(const SpoofImpl* This, const UnicodeString& id, CheckResult* checkResult, UErrorCode* status) { + U_ASSERT(This != NULL); + U_ASSERT(checkResult != NULL); + checkResult->clear(); + int32_t result = 0; - if ((This->fChecks) & USPOOF_RESTRICTION_LEVEL) { - URestrictionLevel idRestrictionLevel = identifierInfo->getRestrictionLevel(*status); + if (0 != (This->fChecks & USPOOF_RESTRICTION_LEVEL)) { + URestrictionLevel idRestrictionLevel = This->getRestrictionLevel(id, *status); if (idRestrictionLevel > This->fRestrictionLevel) { result |= USPOOF_RESTRICTION_LEVEL; } - if (This->fChecks & USPOOF_AUX_INFO) { - result |= idRestrictionLevel; - } + checkResult->fRestrictionLevel = idRestrictionLevel; } - if ((This->fChecks) & USPOOF_MIXED_NUMBERS) { - const UnicodeSet *numerics = identifierInfo->getNumerics(); - if (numerics->size() > 1) { + if (0 != (This->fChecks & USPOOF_MIXED_NUMBERS)) { + UnicodeSet numerics; + This->getNumerics(id, numerics, *status); + if (numerics.size() > 1) { result |= USPOOF_MIXED_NUMBERS; } - - // TODO: ICU4J returns the UnicodeSet of the numerics found in the identifier. - // We have no easy way to do the same in C. - // if (checkResult != null) { - // checkResult.numerics = numerics; - // } + checkResult->fNumerics = numerics; // UnicodeSet::operator= } - if (This->fChecks & (USPOOF_CHAR_LIMIT)) { + if (0 != (This->fChecks & USPOOF_CHAR_LIMIT)) { int32_t i; UChar32 c; int32_t length = id.length(); @@ -551,103 +539,74 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, } } - if (This->fChecks & - (USPOOF_WHOLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_INVISIBLE)) { - // These are the checks that need to be done on NFD input + if (0 != (This->fChecks & USPOOF_INVISIBLE)) { + // This check needs to be done on NFD input UnicodeString nfdText; gNfdNormalizer->normalize(id, nfdText, *status); int32_t nfdLength = nfdText.length(); - if (This->fChecks & USPOOF_INVISIBLE) { - - // scan for more than one occurence of the same non-spacing mark - // in a sequence of non-spacing marks. - int32_t i; - UChar32 c; - UChar32 firstNonspacingMark = 0; - UBool haveMultipleMarks = FALSE; - UnicodeSet marksSeenSoFar; // Set of combining marks in a single combining sequence. - - for (i=0; ifChecks & (USPOOF_WHOLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE)) { - // The basic test is the same for both whole and mixed script confusables. - // Compute the set of scripts that every input character has a confusable in. - // For this computation an input character is always considered to be - // confusable with itself in its own script. - // - // If the number of such scripts is two or more, and the input consisted of - // characters all from a single script, we have a whole script confusable. - // (The two scripts will be the original script and the one that is confusable) - // - // If the number of such scripts >= one, and the original input contained characters from - // more than one script, we have a mixed script confusable. (We can transform - // some of the characters, and end up with a visually similar string all in - // one script.) - - if (identifierInfo == NULL) { - identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { - goto cleanupAndReturn; - } - identifierInfo->setIdentifier(id, *status); + if (firstNonspacingMark == 0) { + firstNonspacingMark = c; + continue; } - - int32_t scriptCount = identifierInfo->getScriptCount(); - - ScriptSet scripts; - This->wholeScriptCheck(nfdText, &scripts, *status); - int32_t confusableScriptCount = scripts.countMembers(); - //printf("confusableScriptCount = %d\n", confusableScriptCount); - - if ((This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE) && - confusableScriptCount >= 2 && - scriptCount == 1) { - result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; + if (!haveMultipleMarks) { + marksSeenSoFar.add(firstNonspacingMark); + haveMultipleMarks = TRUE; } - - if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) && - confusableScriptCount >= 1 && - scriptCount > 1) { - result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; + if (marksSeenSoFar.contains(c)) { + // report the error, and stop scanning. + // No need to find more than the first failure. + result |= USPOOF_INVISIBLE; + break; } + marksSeenSoFar.add(c); } } -cleanupAndReturn: - This->releaseIdentifierInfo(identifierInfo); - if (position != NULL) { - *position = 0; + checkResult->fChecks = result; + return checkResult->toCombinedBitmask(This->fChecks); +} + +U_CAPI int32_t U_EXPORT2 +uspoof_check2UnicodeString(const USpoofChecker *sc, + const icu::UnicodeString &id, + USpoofCheckResult* checkResult, + UErrorCode *status) { + const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); + if (This == NULL) { + return FALSE; + } + + if (checkResult != NULL) { + CheckResult* ThisCheckResult = CheckResult::validateThis(checkResult, *status); + if (ThisCheckResult == NULL) { + return FALSE; + } + return checkImpl(This, id, ThisCheckResult, status); + } else { + // Stack-allocate the checkResult since this method doesn't return it + CheckResult stackCheckResult; + return checkImpl(This, id, &stackCheckResult, status); } - return result; } @@ -678,7 +637,7 @@ uspoof_getSkeleton(const USpoofChecker *sc, U_I18N_API UnicodeString & U_EXPORT2 uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, - uint32_t type, + uint32_t /*type*/, const UnicodeString &id, UnicodeString &dest, UErrorCode *status) { @@ -687,21 +646,9 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, return dest; } - int32_t tableMask = 0; - switch (type) { - case 0: - tableMask = USPOOF_ML_TABLE_FLAG; - break; - case USPOOF_SINGLE_SCRIPT_CONFUSABLE: - tableMask = USPOOF_SL_TABLE_FLAG; - break; - case USPOOF_ANY_CASE: - tableMask = USPOOF_MA_TABLE_FLAG; - break; - case USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_ANY_CASE: - tableMask = USPOOF_SA_TABLE_FLAG; - break; - default: + // Check that at least one of the CONFUSABLE flags is turned on. If not, + // return an error. + if ((This->fChecks & USPOOF_CONFUSABLE) == 0) { *status = U_ILLEGAL_ARGUMENT_ERROR; return dest; } @@ -717,7 +664,7 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, for (inputIndex=0; inputIndex < normalizedLen; ) { UChar32 c = nfdId.char32At(inputIndex); inputIndex += U16_LENGTH(c); - This->confusableLookup(c, tableMask, skelStr); + This->fSpoofData->confusableLookup(c, skelStr); } gNfdNormalizer->normalize(skelStr, dest, *status); @@ -761,13 +708,8 @@ uspoof_serialize(USpoofChecker *sc,void *buf, int32_t capacity, UErrorCode *stat U_ASSERT(U_FAILURE(*status)); return 0; } - int32_t dataSize = This->fSpoofData->fRawData->fLength; - if (capacity < dataSize) { - *status = U_BUFFER_OVERFLOW_ERROR; - return dataSize; - } - uprv_memcpy(buf, This->fSpoofData->fRawData, dataSize); - return dataSize; + + return This->fSpoofData->serialize(buf, capacity, *status); } U_CAPI const USet * U_EXPORT2 @@ -794,6 +736,48 @@ uspoof_getRecommendedUnicodeSet(UErrorCode *status) { return gRecommendedSet; } +//------------------ +// CheckResult APIs +//------------------ + +U_CAPI USpoofCheckResult* U_EXPORT2 +uspoof_openCheckResult(UErrorCode *status) { + CheckResult* checkResult = new CheckResult(); + if (checkResult == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + return checkResult->asUSpoofCheckResult(); +} + +U_CAPI void U_EXPORT2 +uspoof_closeCheckResult(USpoofCheckResult* checkResult) { + UErrorCode status = U_ZERO_ERROR; + CheckResult* This = CheckResult::validateThis(checkResult, status); + delete This; +} + +U_CAPI int32_t U_EXPORT2 +uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return 0; } + return This->fChecks; +} + +U_CAPI URestrictionLevel U_EXPORT2 +uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return USPOOF_UNRESTRICTIVE; } + return This->fRestrictionLevel; +} + +U_CAPI const USet* U_EXPORT2 +uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return NULL; } + return This->fNumerics.toUSet(); +} + #endif // !UCONFIG_NO_NORMALIZATION diff --git a/deps/icu-small/source/i18n/uspoof_build.cpp b/deps/icu-small/source/i18n/uspoof_build.cpp index 0a404faf76bef2..4892b9da1e9a03 100644 --- a/deps/icu-small/source/i18n/uspoof_build.cpp +++ b/deps/icu-small/source/i18n/uspoof_build.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2015, International Business Machines Corporation @@ -35,7 +37,6 @@ #include "uassert.h" #include "uarrsort.h" #include "uspoof_conf.h" -#include "uspoof_wsconf.h" #if !UCONFIG_NO_NORMALIZATION @@ -48,14 +49,14 @@ U_CFUNC void uspoof_internalInitStatics(UErrorCode *status); U_CAPI USpoofChecker * U_EXPORT2 uspoof_openFromSource(const char *confusables, int32_t confusablesLen, - const char *confusablesWholeScript, int32_t confusablesWholeScriptLen, + const char* /*confusablesWholeScript*/, int32_t /*confusablesWholeScriptLen*/, int32_t *errorType, UParseError *pe, UErrorCode *status) { uspoof_internalInitStatics(status); if (U_FAILURE(*status)) { return NULL; } -#if UCONFIG_NO_REGULAR_EXPRESSIONS - *status = U_UNSUPPORTED_ERROR; +#if UCONFIG_NO_REGULAR_EXPRESSIONS + *status = U_UNSUPPORTED_ERROR; return NULL; #else if (errorType!=NULL) { @@ -74,14 +75,13 @@ uspoof_openFromSource(const char *confusables, int32_t confusablesLen, // Compile the binary data from the source (text) format. ConfusabledataBuilder::buildConfusableData(This, confusables, confusablesLen, errorType, pe, *status); - buildWSConfusableData(This, confusablesWholeScript, confusablesWholeScriptLen, pe, *status); - + if (U_FAILURE(*status)) { delete This; This = NULL; } return (USpoofChecker *)This; -#endif // UCONFIG_NO_REGULAR_EXPRESSIONS +#endif // UCONFIG_NO_REGULAR_EXPRESSIONS } #endif diff --git a/deps/icu-small/source/i18n/uspoof_conf.cpp b/deps/icu-small/source/i18n/uspoof_conf.cpp index aba8375e7c6bf8..587dc4e01c3d53 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.cpp +++ b/deps/icu-small/source/i18n/uspoof_conf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -43,11 +45,13 @@ U_NAMESPACE_USE // // The binary structures are described in uspoof_impl.h // -// 1. parse the data, building 4 hash tables, one each for the SL, SA, ML and MA -// tables. Each maps from a UChar32 to a String. +// 1. Parse the data, making a hash table mapping from a UChar32 to a String. // // 2. Sort all of the strings encountered by length, since they will need to // be stored in that order in the final string table. +// TODO: Sorting these strings by length is no longer needed since the removal of +// the string lengths table. This logic can be removed to save processing time +// when building confusables data. // // 3. Build a list of keys (UChar32s) from the four mapping tables. Sort the // list because that will be the ordering of our runtime table. @@ -61,7 +65,7 @@ U_NAMESPACE_USE SPUString::SPUString(UnicodeString *s) { fStr = s; - fStrTableIndex = 0; + fCharOrStrTableIndex = 0; } @@ -108,8 +112,8 @@ SPUString *SPUStringPool::getByIndex(int32_t index) { static int8_t U_CALLCONV SPUStringCompare(UHashTok left, UHashTok right) { const SPUString *sL = const_cast( static_cast(left.pointer)); - const SPUString *sR = const_cast( - static_cast(right.pointer)); + const SPUString *sR = const_cast( + static_cast(right.pointer)); int32_t lenL = sL->fStr->length(); int32_t lenR = sR->fStr->length(); if (lenL < lenR) { @@ -143,15 +147,11 @@ SPUString *SPUStringPool::addString(UnicodeString *src, UErrorCode &status) { ConfusabledataBuilder::ConfusabledataBuilder(SpoofImpl *spImpl, UErrorCode &status) : fSpoofImpl(spImpl), fInput(NULL), - fSLTable(NULL), - fSATable(NULL), - fMLTable(NULL), - fMATable(NULL), + fTable(NULL), fKeySet(NULL), fKeyVec(NULL), fValueVec(NULL), fStringTable(NULL), - fStringLengthsTable(NULL), stringPool(NULL), fParseLine(NULL), fParseHexNum(NULL), @@ -160,10 +160,7 @@ ConfusabledataBuilder::ConfusabledataBuilder(SpoofImpl *spImpl, UErrorCode &stat if (U_FAILURE(status)) { return; } - fSLTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fSATable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fMLTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fMATable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); + fTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); fKeySet = new UnicodeSet(); fKeyVec = new UVector(status); fValueVec = new UVector(status); @@ -175,14 +172,10 @@ ConfusabledataBuilder::~ConfusabledataBuilder() { uprv_free(fInput); uregex_close(fParseLine); uregex_close(fParseHexNum); - uhash_close(fSLTable); - uhash_close(fSATable); - uhash_close(fMLTable); - uhash_close(fMATable); + uhash_close(fTable); delete fKeySet; delete fKeyVec; delete fStringTable; - delete fStringLengthsTable; delete fValueVec; delete stringPool; } @@ -228,7 +221,7 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // any line. What was matched is determined by examining which capture groups have a match. // Capture Group 1: the source char // Capture Group 2: the replacement chars - // Capture Group 3-6 the table type, SL, SA, ML, or MA + // Capture Group 3-6 the table type, SL, SA, ML, or MA (deprecated) // Capture Group 7: A blank or comment only line. // Capture Group 8: A syntactically invalid line. Anything that didn't match before. // Example Line from the confusables.txt source file: @@ -294,41 +287,12 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // This a little like a Java intern() - any duplicates will be eliminated. SPUString *smapString = stringPool->addString(mapString, status); - // Add the UChar32 -> string mapping to the appropriate table. - UHashtable *table = uregex_start(fParseLine, 3, &status) >= 0 ? fSLTable : - uregex_start(fParseLine, 4, &status) >= 0 ? fSATable : - uregex_start(fParseLine, 5, &status) >= 0 ? fMLTable : - uregex_start(fParseLine, 6, &status) >= 0 ? fMATable : - NULL; - if (U_SUCCESS(status) && table == NULL) { - status = U_PARSE_ERROR; - } - if (U_FAILURE(status)) { - return; - } - + // Add the UChar32 -> string mapping to the table. // For Unicode 8, the SL, SA and ML tables have been discontinued. // All input data from confusables.txt is tagged MA. - // ICU spoof check functions should ignore the specified table and always - // use this MA Data. - // For now, implement by populating the MA data into all four tables, and - // keep the multiple table implementation in place, in case it comes back - // at some time in the future. - // There is no run time size penalty to keeping the four table implementation - - // the data is shared when it's the same betweeen tables. - if (table != fMATable) { - status = U_PARSE_ERROR; - return; - }; - // uhash_iput(table, keyChar, smapString, &status); - uhash_iput(fSLTable, keyChar, smapString, &status); - uhash_iput(fSATable, keyChar, smapString, &status); - uhash_iput(fMLTable, keyChar, smapString, &status); - uhash_iput(fMATable, keyChar, smapString, &status); + uhash_iput(fTable, keyChar, smapString, &status); + if (U_FAILURE(status)) { return; } fKeySet->add(keyChar); - if (U_FAILURE(status)) { - return; - } } // Input data is now all parsed and collected. @@ -341,43 +305,24 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // Build up the string array, and record the index of each string therein // in the (build time only) string pool. // Strings of length one are not entered into the strings array. - // At the same time, build up the string lengths table, which records the - // position in the string table of the first string of each length >= 4. // (Strings in the table are sorted by length) stringPool->sort(status); fStringTable = new UnicodeString(); - fStringLengthsTable = new UVector(status); - int32_t previousStringLength = 0; - int32_t previousStringIndex = 0; int32_t poolSize = stringPool->size(); int32_t i; for (i=0; igetByIndex(i); int32_t strLen = s->fStr->length(); int32_t strIndex = fStringTable->length(); - U_ASSERT(strLen >= previousStringLength); if (strLen == 1) { // strings of length one do not get an entry in the string table. // Keep the single string character itself here, which is the same // convention that is used in the final run-time string table index. - s->fStrTableIndex = s->fStr->charAt(0); + s->fCharOrStrTableIndex = s->fStr->charAt(0); } else { - if ((strLen > previousStringLength) && (previousStringLength >= 4)) { - fStringLengthsTable->addElement(previousStringIndex, status); - fStringLengthsTable->addElement(previousStringLength, status); - } - s->fStrTableIndex = strIndex; + s->fCharOrStrTableIndex = strIndex; fStringTable->append(*(s->fStr)); } - previousStringLength = strLen; - previousStringIndex = strIndex; - } - // Make the final entry to the string lengths table. - // (it holds an entry for the _last_ string of each length, so adding the - // final one doesn't happen in the main loop because no longer string was encountered.) - if (previousStringLength >= 4) { - fStringLengthsTable->addElement(previousStringIndex, status); - fStringLengthsTable->addElement(previousStringLength, status); } // Construct the compile-time Key and Value tables @@ -396,10 +341,22 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // code points requires a nested loop. for (UChar32 keyChar=fKeySet->getRangeStart(range); keyChar <= fKeySet->getRangeEnd(range); keyChar++) { - addKeyEntry(keyChar, fSLTable, USPOOF_SL_TABLE_FLAG, status); - addKeyEntry(keyChar, fSATable, USPOOF_SA_TABLE_FLAG, status); - addKeyEntry(keyChar, fMLTable, USPOOF_ML_TABLE_FLAG, status); - addKeyEntry(keyChar, fMATable, USPOOF_MA_TABLE_FLAG, status); + SPUString *targetMapping = static_cast(uhash_iget(fTable, keyChar)); + U_ASSERT(targetMapping != NULL); + + // Set an error code if trying to consume a long string. Otherwise, + // codePointAndLengthToKey will abort on a U_ASSERT. + if (targetMapping->fStr->length() > 256) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + int32_t key = ConfusableDataUtils::codePointAndLengthToKey(keyChar, + targetMapping->fStr->length()); + int32_t value = targetMapping->fCharOrStrTableIndex; + + fKeyVec->addElement(key, status); + fValueVec->addElement(value, status); } } @@ -435,14 +392,14 @@ void ConfusabledataBuilder::outputData(UErrorCode &status) { return; } int i; - int32_t previousKey = 0; + UChar32 previousCodePoint = 0; for (i=0; ielementAti(i); - (void)previousKey; // Suppress unused variable warning on gcc. - U_ASSERT((key & 0x00ffffff) >= (previousKey & 0x00ffffff)); - U_ASSERT((key & 0xff000000) != 0); + UChar32 codePoint = ConfusableDataUtils::keyToCodePoint(key); + // strictly greater because there can be only one entry per code point + U_ASSERT(codePoint > previousCodePoint); keys[i] = key; - previousKey = key; + previousCodePoint = codePoint; } SpoofDataHeader *rawData = fSpoofImpl->fSpoofData->fRawData; rawData->fCFUKeys = (int32_t)((char *)keys - (char *)rawData); @@ -484,144 +441,8 @@ void ConfusabledataBuilder::outputData(UErrorCode &status) { rawData->fCFUStringTable = (int32_t)((char *)strings - (char *)rawData); rawData->fCFUStringTableLen = stringsLength; fSpoofImpl->fSpoofData->fCFUStrings = strings; - - // The String Lengths Table - // While copying into the runtime array do some sanity checks on the values - // Each complete entry contains two fields, an index and an offset. - // Lengths should increase with each entry. - // Offsets should be less than the size of the string table. - int32_t lengthTableLength = fStringLengthsTable->size(); - uint16_t *stringLengths = - static_cast(fSpoofImpl->fSpoofData->reserveSpace(lengthTableLength*sizeof(uint16_t), status)); - if (U_FAILURE(status)) { - return; - } - int32_t destIndex = 0; - uint32_t previousLength = 0; - for (i=0; i(fStringLengthsTable->elementAti(i)); - uint32_t length = static_cast(fStringLengthsTable->elementAti(i+1)); - U_ASSERT(offset < stringsLength); - U_ASSERT(length < 40); - (void)previousLength; // Suppress unused variable warning on gcc. - U_ASSERT(length > previousLength); - stringLengths[destIndex++] = static_cast(offset); - stringLengths[destIndex++] = static_cast(length); - previousLength = length; - } - rawData = fSpoofImpl->fSpoofData->fRawData; - rawData->fCFUStringLengths = (int32_t)((char *)stringLengths - (char *)rawData); - // Note: StringLengthsSize in the raw data is the number of complete entries, - // each consisting of a pair of 16 bit values, hence the divide by 2. - rawData->fCFUStringLengthsSize = lengthTableLength / 2; - fSpoofImpl->fSpoofData->fCFUStringLengths = - reinterpret_cast(stringLengths); -} - - - -// addKeyEntry Construction of the confusable Key and Mapping Values tables. -// This is an intermediate point in the building process. -// We already have the mappings in the hash tables fSLTable, etc. -// This function builds corresponding run-time style table entries into -// fKeyVec and fValueVec - -void ConfusabledataBuilder::addKeyEntry( - UChar32 keyChar, // The key character - UHashtable *table, // The table, one of SATable, MATable, etc. - int32_t tableFlag, // One of USPOOF_SA_TABLE_FLAG, etc. - UErrorCode &status) { - - SPUString *targetMapping = static_cast(uhash_iget(table, keyChar)); - if (targetMapping == NULL) { - // No mapping for this key character. - // (This function is called for all four tables for each key char that - // is seen anywhere, so this no entry cases are very much expected.) - return; - } - - // Check whether there is already an entry with the correct mapping. - // If so, simply set the flag in the keyTable saying that the existing entry - // applies to the table that we're doing now. - - UBool keyHasMultipleValues = FALSE; - int32_t i; - for (i=fKeyVec->size()-1; i>=0 ; i--) { - int32_t key = fKeyVec->elementAti(i); - if ((key & 0x0ffffff) != keyChar) { - // We have now checked all existing key entries for this key char (if any) - // without finding one with the same mapping. - break; - } - UnicodeString mapping = getMapping(i); - if (mapping == *(targetMapping->fStr)) { - // The run time entry we are currently testing has the correct mapping. - // Set the flag in it indicating that it applies to the new table also. - key |= tableFlag; - fKeyVec->setElementAt(key, i); - return; - } - keyHasMultipleValues = TRUE; - } - - // Need to add a new entry to the binary data being built for this mapping. - // Includes adding entries to both the key table and the parallel values table. - - int32_t newKey = keyChar | tableFlag; - if (keyHasMultipleValues) { - newKey |= USPOOF_KEY_MULTIPLE_VALUES; - } - int32_t adjustedMappingLength = targetMapping->fStr->length() - 1; - if (adjustedMappingLength>3) { - adjustedMappingLength = 3; - } - newKey |= adjustedMappingLength << USPOOF_KEY_LENGTH_SHIFT; - - int32_t newData = targetMapping->fStrTableIndex; - - fKeyVec->addElement(newKey, status); - fValueVec->addElement(newData, status); - - // If the preceding key entry is for the same key character (but with a different mapping) - // set the multiple-values flag on it. - if (keyHasMultipleValues) { - int32_t previousKeyIndex = fKeyVec->size() - 2; - int32_t previousKey = fKeyVec->elementAti(previousKeyIndex); - previousKey |= USPOOF_KEY_MULTIPLE_VALUES; - fKeyVec->setElementAt(previousKey, previousKeyIndex); - } -} - - - -UnicodeString ConfusabledataBuilder::getMapping(int32_t index) { - int32_t key = fKeyVec->elementAti(index); - int32_t value = fValueVec->elementAti(index); - int32_t length = USPOOF_KEY_LENGTH_FIELD(key); - int32_t lastIndexWithLen; - switch (length) { - case 0: - return UnicodeString(static_cast(value)); - case 1: - case 2: - return UnicodeString(*fStringTable, value, length+1); - case 3: - length = 0; - int32_t i; - for (i=0; isize(); i+=2) { - lastIndexWithLen = fStringLengthsTable->elementAti(i); - if (value <= lastIndexWithLen) { - length = fStringLengthsTable->elementAti(i+1); - break; - } - } - U_ASSERT(length>=3); - return UnicodeString(*fStringTable, value, length); - default: - U_ASSERT(FALSE); - } - return UnicodeString(); } #endif #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS + diff --git a/deps/icu-small/source/i18n/uspoof_conf.h b/deps/icu-small/source/i18n/uspoof_conf.h index 2157142be6cd9e..bc5e4a909fa0c7 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.h +++ b/deps/icu-small/source/i18n/uspoof_conf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -21,7 +23,7 @@ #if !UCONFIG_NO_NORMALIZATION -#if !UCONFIG_NO_REGULAR_EXPRESSIONS +#if !UCONFIG_NO_REGULAR_EXPRESSIONS #include "unicode/uregex.h" #include "uhash.h" @@ -36,9 +38,9 @@ U_NAMESPACE_BEGIN struct SPUString : public UMemory { UnicodeString *fStr; // The actual string. - int32_t fStrTableIndex; // Index into the final runtime data for this string. - // (or, for length 1, the single string char itself, - // there being no string table entry for it.) + int32_t fCharOrStrTableIndex; // Index into the final runtime data for this + // string (or, for length 1, the single string char + // itself, there being no string table entry for it.) SPUString(UnicodeString *s); ~SPUString(); }; @@ -56,7 +58,7 @@ class SPUStringPool : public UMemory { public: SPUStringPool(UErrorCode &status); ~SPUStringPool(); - + // Add a string. Return the string from the table. // If the input parameter string is already in the table, delete the // input parameter and return the existing string. @@ -86,10 +88,7 @@ class ConfusabledataBuilder : public UMemory { private: SpoofImpl *fSpoofImpl; UChar *fInput; - UHashtable *fSLTable; - UHashtable *fSATable; - UHashtable *fMLTable; - UHashtable *fMATable; + UHashtable *fTable; UnicodeSet *fKeySet; // A set of all keys (UChar32s) that go into the four mapping tables. // The binary data is first assembled into the following four collections, then @@ -97,8 +96,7 @@ class ConfusabledataBuilder : public UMemory { UVector *fKeyVec; UVector *fValueVec; UnicodeString *fStringTable; - UVector *fStringLengthsTable; - + SPUStringPool *stringPool; URegularExpression *fParseLine; URegularExpression *fParseHexNum; @@ -130,5 +128,5 @@ class ConfusabledataBuilder : public UMemory { U_NAMESPACE_END #endif -#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS +#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS #endif // __USPOOF_BUILDCONF_H__ diff --git a/deps/icu-small/source/i18n/uspoof_impl.cpp b/deps/icu-small/source/i18n/uspoof_impl.cpp index 111a1489ffd55c..a062d3ee24bd53 100644 --- a/deps/icu-small/source/i18n/uspoof_impl.cpp +++ b/deps/icu-small/source/i18n/uspoof_impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2016, International Business Machines @@ -13,11 +15,11 @@ #include "utrie2.h" #include "cmemory.h" #include "cstring.h" -#include "identifier_info.h" #include "scriptset.h" #include "umutex.h" #include "udataswp.h" #include "uassert.h" +#include "ucln_in.h" #include "uspoof_impl.h" #if !UCONFIG_NO_NORMALIZATION @@ -27,41 +29,53 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SpoofImpl) -SpoofImpl::SpoofImpl(SpoofData *data, UErrorCode &status) : - fMagic(0), fChecks(USPOOF_ALL_CHECKS), fSpoofData(data), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { - if (U_FAILURE(status)) { - return; - } +SpoofImpl::SpoofImpl(SpoofData *data, UErrorCode& status) { + construct(status); + fSpoofData = data; +} + +SpoofImpl::SpoofImpl(UErrorCode& status) { + construct(status); + + // TODO: Call this method where it is actually needed, instead of in the + // constructor, to allow for lazy data loading. See #12696. + fSpoofData = SpoofData::getDefault(status); +} + +SpoofImpl::SpoofImpl() { + UErrorCode status = U_ZERO_ERROR; + construct(status); + + // TODO: Call this method where it is actually needed, instead of in the + // constructor, to allow for lazy data loading. See #12696. + fSpoofData = SpoofData::getDefault(status); +} + +void SpoofImpl::construct(UErrorCode& status) { + fMagic = USPOOF_MAGIC; + fChecks = USPOOF_ALL_CHECKS; + fSpoofData = NULL; + fAllowedCharsSet = NULL; + fAllowedLocales = NULL; fRestrictionLevel = USPOOF_HIGHLY_RESTRICTIVE; + if (U_FAILURE(status)) { return; } + UnicodeSet *allowedCharsSet = new UnicodeSet(0, 0x10ffff); - allowedCharsSet->freeze(); fAllowedCharsSet = allowedCharsSet; fAllowedLocales = uprv_strdup(""); if (fAllowedCharsSet == NULL || fAllowedLocales == NULL) { status = U_MEMORY_ALLOCATION_ERROR; return; } - fMagic = USPOOF_MAGIC; -} - - -SpoofImpl::SpoofImpl() : - fMagic(USPOOF_MAGIC), fChecks(USPOOF_ALL_CHECKS), fSpoofData(NULL), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { - UnicodeSet *allowedCharsSet = new UnicodeSet(0, 0x10ffff); allowedCharsSet->freeze(); - fAllowedCharsSet = allowedCharsSet; - fAllowedLocales = uprv_strdup(""); - fRestrictionLevel = USPOOF_HIGHLY_RESTRICTIVE; } // Copy Constructor, used by the user level clone() function. SpoofImpl::SpoofImpl(const SpoofImpl &src, UErrorCode &status) : - fMagic(0), fChecks(USPOOF_ALL_CHECKS), fSpoofData(NULL), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { + fMagic(0), fChecks(USPOOF_ALL_CHECKS), fSpoofData(NULL), fAllowedCharsSet(NULL) , + fAllowedLocales(NULL) { if (U_FAILURE(status)) { return; } @@ -71,10 +85,10 @@ SpoofImpl::SpoofImpl(const SpoofImpl &src, UErrorCode &status) : fSpoofData = src.fSpoofData->addReference(); } fAllowedCharsSet = static_cast(src.fAllowedCharsSet->clone()); - if (fAllowedCharsSet == NULL) { + fAllowedLocales = uprv_strdup(src.fAllowedLocales); + if (fAllowedCharsSet == NULL || fAllowedLocales == NULL) { status = U_MEMORY_ALLOCATION_ERROR; } - fAllowedLocales = uprv_strdup(src.fAllowedLocales); fRestrictionLevel = src.fRestrictionLevel; } @@ -86,7 +100,11 @@ SpoofImpl::~SpoofImpl() { } delete fAllowedCharsSet; uprv_free((void *)fAllowedLocales); - delete fCachedIdentifierInfo; +} + +// Cast this instance as a USpoofChecker for the C API. +USpoofChecker *SpoofImpl::asUSpoofChecker() { + return reinterpret_cast(this); } // @@ -102,12 +120,11 @@ const SpoofImpl *SpoofImpl::validateThis(const USpoofChecker *sc, UErrorCode &st return NULL; } SpoofImpl *This = (SpoofImpl *)sc; - if (This->fMagic != USPOOF_MAGIC || - This->fSpoofData == NULL) { + if (This->fMagic != USPOOF_MAGIC) { status = U_INVALID_FORMAT_ERROR; return NULL; } - if (!SpoofData::validateDataVersion(This->fSpoofData->fRawData, status)) { + if (This->fSpoofData != NULL && !This->fSpoofData->validateDataVersion(status)) { return NULL; } return This; @@ -119,148 +136,6 @@ SpoofImpl *SpoofImpl::validateThis(USpoofChecker *sc, UErrorCode &status) { } - -//-------------------------------------------------------------------------------------- -// -// confusableLookup() This is the heart of the confusable skeleton generation -// implementation. -// -// Given a source character, produce the corresponding -// replacement character(s), appending them to the dest string. -// -//--------------------------------------------------------------------------------------- -int32_t SpoofImpl::confusableLookup(UChar32 inChar, int32_t tableMask, UnicodeString &dest) const { - - // Binary search the spoof data key table for the inChar - int32_t *low = fSpoofData->fCFUKeys; - int32_t *mid = NULL; - int32_t *limit = low + fSpoofData->fRawData->fCFUKeysSize; - UChar32 midc; - do { - int32_t delta = ((int32_t)(limit-low))/2; - mid = low + delta; - midc = *mid & 0x1fffff; - if (inChar == midc) { - goto foundChar; - } else if (inChar < midc) { - limit = mid; - } else { - low = mid; - } - } while (low < limit-1); - mid = low; - midc = *mid & 0x1fffff; - if (inChar != midc) { - // Char not found. It maps to itself. - int i = 0; - dest.append(inChar); - return i; - } - foundChar: - int32_t keyFlags = *mid & 0xff000000; - if ((keyFlags & tableMask) == 0) { - // We found the right key char, but the entry doesn't pertain to the - // table we need. See if there is an adjacent key that does - if (keyFlags & USPOOF_KEY_MULTIPLE_VALUES) { - int32_t *altMid; - for (altMid = mid-1; (*altMid&0x00ffffff) == inChar; altMid--) { - keyFlags = *altMid & 0xff000000; - if (keyFlags & tableMask) { - mid = altMid; - goto foundKey; - } - } - for (altMid = mid+1; (*altMid&0x00ffffff) == inChar; altMid++) { - keyFlags = *altMid & 0xff000000; - if (keyFlags & tableMask) { - mid = altMid; - goto foundKey; - } - } - } - // No key entry for this char & table. - // The input char maps to itself. - int i = 0; - dest.append(inChar); - return i; - } - - foundKey: - int32_t stringLen = USPOOF_KEY_LENGTH_FIELD(keyFlags) + 1; - int32_t keyTableIndex = (int32_t)(mid - fSpoofData->fCFUKeys); - - // Value is either a UChar (for strings of length 1) or - // an index into the string table (for longer strings) - uint16_t value = fSpoofData->fCFUValues[keyTableIndex]; - if (stringLen == 1) { - dest.append((UChar)value); - return 1; - } - - // String length of 4 from the above lookup is used for all strings of length >= 4. - // For these, get the real length from the string lengths table, - // which maps string table indexes to lengths. - // All strings of the same length are stored contiguously in the string table. - // 'value' from the lookup above is the starting index for the desired string. - - int32_t ix; - if (stringLen == 4) { - int32_t stringLengthsLimit = fSpoofData->fRawData->fCFUStringLengthsSize; - for (ix = 0; ix < stringLengthsLimit; ix++) { - if (fSpoofData->fCFUStringLengths[ix].fLastString >= value) { - stringLen = fSpoofData->fCFUStringLengths[ix].fStrLength; - break; - } - } - U_ASSERT(ix < stringLengthsLimit); - } - - U_ASSERT(value + stringLen <= fSpoofData->fRawData->fCFUStringTableLen); - UChar *src = &fSpoofData->fCFUStrings[value]; - dest.append(src, stringLen); - return stringLen; -} - - -//--------------------------------------------------------------------------------------- -// -// wholeScriptCheck() -// -// Input text is already normalized to NFD -// Return the set of scripts, each of which can represent something that is -// confusable with the input text. The script of the input text -// is included; input consisting of characters from a single script will -// always produce a result consisting of a set containing that script. -// -//--------------------------------------------------------------------------------------- -void SpoofImpl::wholeScriptCheck( - const UnicodeString &text, ScriptSet *result, UErrorCode &status) const { - - UTrie2 *table = - (fChecks & USPOOF_ANY_CASE) ? fSpoofData->fAnyCaseTrie : fSpoofData->fLowerCaseTrie; - result->setAll(); - int32_t length = text.length(); - for (int32_t inputIdx=0; inputIdx < length;) { - UChar32 c = text.char32At(inputIdx); - inputIdx += U16_LENGTH(c); - uint32_t index = utrie2_get32(table, c); - if (index == 0) { - // No confusables in another script for this char. - // TODO: we should change the data to have sets with just the single script - // bit for the script of this char. Gets rid of this special case. - // Until then, grab the script from the char and intersect it with the set. - UScriptCode cpScript = uscript_getScript(c, &status); - U_ASSERT(cpScript > USCRIPT_INHERITED); - result->intersect(cpScript, status); - } else if (index == 1) { - // Script == Common or Inherited. Nothing to do. - } else { - result->intersect(fSpoofData->fScriptSets[index]); - } - } -} - - void SpoofImpl::setAllowedLocales(const char *localesList, UErrorCode &status) { UnicodeSet allowedChars; UnicodeSet *tmpSet = NULL; @@ -307,7 +182,7 @@ void SpoofImpl::setAllowedLocales(const char *localesList, UErrorCode &status) { if (fAllowedLocales == NULL || tmpSet == NULL) { status = U_MEMORY_ALLOCATION_ERROR; return; - } + } tmpSet->freeze(); delete fAllowedCharsSet; fAllowedCharsSet = tmpSet; @@ -315,14 +190,14 @@ void SpoofImpl::setAllowedLocales(const char *localesList, UErrorCode &status) { return; } - + // Add all common and inherited characters to the set of allowed chars. UnicodeSet tempSet; tempSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_COMMON, status); allowedChars.addAll(tempSet); tempSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_INHERITED, status); allowedChars.addAll(tempSet); - + // If anything went wrong, we bail out without changing // the state of the spoof checker. if (U_FAILURE(status)) { @@ -372,6 +247,137 @@ void SpoofImpl::addScriptChars(const char *locale, UnicodeSet *allowedChars, UEr } } +// Computes the augmented script set for a code point, according to UTS 39 section 5.1. +void SpoofImpl::getAugmentedScriptSet(UChar32 codePoint, ScriptSet& result, UErrorCode& status) { + result.resetAll(); + result.setScriptExtensions(codePoint, status); + if (U_FAILURE(status)) { return; } + + // Section 5.1 step 1 + if (result.test(USCRIPT_HAN, status)) { + result.set(USCRIPT_HAN_WITH_BOPOMOFO, status); + result.set(USCRIPT_JAPANESE, status); + result.set(USCRIPT_KOREAN, status); + } + if (result.test(USCRIPT_HIRAGANA, status)) { + result.set(USCRIPT_JAPANESE, status); + } + if (result.test(USCRIPT_KATAKANA, status)) { + result.set(USCRIPT_JAPANESE, status); + } + if (result.test(USCRIPT_HANGUL, status)) { + result.set(USCRIPT_KOREAN, status); + } + if (result.test(USCRIPT_BOPOMOFO, status)) { + result.set(USCRIPT_HAN_WITH_BOPOMOFO, status); + } + + // Section 5.1 step 2 + if (result.test(USCRIPT_COMMON, status) || result.test(USCRIPT_INHERITED, status)) { + result.setAll(); + } +} + +// Computes the resolved script set for a string, according to UTS 39 section 5.1. +void SpoofImpl::getResolvedScriptSet(const UnicodeString& input, ScriptSet& result, UErrorCode& status) const { + getResolvedScriptSetWithout(input, USCRIPT_CODE_LIMIT, result, status); +} + +// Computes the resolved script set for a string, omitting characters having the specified script. +// If USCRIPT_CODE_LIMIT is passed as the second argument, all characters are included. +void SpoofImpl::getResolvedScriptSetWithout(const UnicodeString& input, UScriptCode script, ScriptSet& result, UErrorCode& status) const { + result.setAll(); + + ScriptSet temp; + UChar32 codePoint; + for (int32_t i = 0; i < input.length(); i += U16_LENGTH(codePoint)) { + codePoint = input.char32At(i); + + // Compute the augmented script set for the character + getAugmentedScriptSet(codePoint, temp, status); + if (U_FAILURE(status)) { return; } + + // Intersect the augmented script set with the resolved script set, but only if the character doesn't + // have the script specified in the function call + if (script == USCRIPT_CODE_LIMIT || !temp.test(script, status)) { + result.intersect(temp); + } + } +} + +// Computes the set of numerics for a string, according to UTS 39 section 5.3. +void SpoofImpl::getNumerics(const UnicodeString& input, UnicodeSet& result, UErrorCode& /*status*/) const { + result.clear(); + + UChar32 codePoint; + for (int32_t i = 0; i < input.length(); i += U16_LENGTH(codePoint)) { + codePoint = input.char32At(i); + + // Store a representative character for each kind of decimal digit + if (u_charType(codePoint) == U_DECIMAL_DIGIT_NUMBER) { + // Store the zero character as a representative for comparison. + // Unicode guarantees it is codePoint - value + result.add(codePoint - (UChar32)u_getNumericValue(codePoint)); + } + } +} + +// Computes the restriction level of a string, according to UTS 39 section 5.2. +URestrictionLevel SpoofImpl::getRestrictionLevel(const UnicodeString& input, UErrorCode& status) const { + // Section 5.2 step 1: + if (!fAllowedCharsSet->containsAll(input)) { + return USPOOF_UNRESTRICTIVE; + } + + // Section 5.2 step 2 + // Java use a static UnicodeSet for this test. In C++, avoid the static variable + // and just do a simple for loop. + UBool allASCII = TRUE; + for (int32_t i=0, length=input.length(); i 0x7f) { + allASCII = FALSE; + break; + } + } + if (allASCII) { + return USPOOF_ASCII; + } + + // Section 5.2 steps 3: + ScriptSet resolvedScriptSet; + getResolvedScriptSet(input, resolvedScriptSet, status); + if (U_FAILURE(status)) { return USPOOF_UNRESTRICTIVE; } + + // Section 5.2 step 4: + if (!resolvedScriptSet.isEmpty()) { + return USPOOF_SINGLE_SCRIPT_RESTRICTIVE; + } + + // Section 5.2 step 5: + ScriptSet resolvedNoLatn; + getResolvedScriptSetWithout(input, USCRIPT_LATIN, resolvedNoLatn, status); + if (U_FAILURE(status)) { return USPOOF_UNRESTRICTIVE; } + + // Section 5.2 step 6: + if (resolvedNoLatn.test(USCRIPT_HAN_WITH_BOPOMOFO, status) + || resolvedNoLatn.test(USCRIPT_JAPANESE, status) + || resolvedNoLatn.test(USCRIPT_KOREAN, status)) { + return USPOOF_HIGHLY_RESTRICTIVE; + } + + // Section 5.2 step 7: + if (!resolvedNoLatn.isEmpty() + && !resolvedNoLatn.test(USCRIPT_CYRILLIC, status) + && !resolvedNoLatn.test(USCRIPT_GREEK, status) + && !resolvedNoLatn.test(USCRIPT_CHEROKEE, status)) { + return USPOOF_MODERATELY_RESTRICTIVE; + } + + // Section 5.2 step 8: + return USPOOF_MINIMALLY_RESTRICTIVE; +} + + // Convert a text format hex number. Utility function used by builder code. Static. // Input: UChar *string text. Output: a UChar32 @@ -404,55 +410,60 @@ UChar32 SpoofImpl::ScanHex(const UChar *s, int32_t start, int32_t limit, UErrorC return (UChar32)val; } -// IdentifierInfo Cache. IdentifierInfo objects are somewhat expensive to create. -// Maintain a one-element cache, which is sufficient to avoid repeatedly -// creating new ones unless we get multi-thread concurrency in spoof -// check operations, which should be statistically uncommon. -// These functions are used in place of new & delete of an IdentifierInfo. -// They will recycle the IdentifierInfo when possible. -// They are logically const, and used within const functions that must be thread safe. -IdentifierInfo *SpoofImpl::getIdentifierInfo(UErrorCode &status) const { - IdentifierInfo *returnIdInfo = NULL; - if (U_FAILURE(status)) { - return returnIdInfo; - } - SpoofImpl *nonConstThis = const_cast(this); - { - Mutex m; - returnIdInfo = nonConstThis->fCachedIdentifierInfo; - nonConstThis->fCachedIdentifierInfo = NULL; - } - if (returnIdInfo == NULL) { - returnIdInfo = new IdentifierInfo(status); - if (U_SUCCESS(status) && returnIdInfo == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } - if (U_FAILURE(status) && returnIdInfo != NULL) { - delete returnIdInfo; - returnIdInfo = NULL; - } - } - return returnIdInfo; +//----------------------------------------- +// +// class CheckResult Implementation +// +//----------------------------------------- + +CheckResult::CheckResult() : fMagic(USPOOF_CHECK_MAGIC) { + clear(); } +USpoofCheckResult* CheckResult::asUSpoofCheckResult() { + return reinterpret_cast(this); +} -void SpoofImpl::releaseIdentifierInfo(IdentifierInfo *idInfo) const { - if (idInfo != NULL) { - SpoofImpl *nonConstThis = const_cast(this); - { - Mutex m; - if (nonConstThis->fCachedIdentifierInfo == NULL) { - nonConstThis->fCachedIdentifierInfo = idInfo; - idInfo = NULL; - } - } - delete idInfo; +// +// Incoming parameter check on Status and the CheckResult object +// received from the C API. +// +const CheckResult* CheckResult::validateThis(const USpoofCheckResult *ptr, UErrorCode &status) { + if (U_FAILURE(status)) { return NULL; } + if (ptr == NULL) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; } + CheckResult *This = (CheckResult*) ptr; + if (This->fMagic != USPOOF_CHECK_MAGIC) { + status = U_INVALID_FORMAT_ERROR; + return NULL; + } + return This; } +CheckResult* CheckResult::validateThis(USpoofCheckResult *ptr, UErrorCode &status) { + return const_cast + (CheckResult::validateThis(const_cast(ptr), status)); +} + +void CheckResult::clear() { + fChecks = 0; + fNumerics.clear(); + fRestrictionLevel = USPOOF_UNDEFINED_RESTRICTIVE; +} +int32_t CheckResult::toCombinedBitmask(int32_t enabledChecks) { + if ((enabledChecks & USPOOF_AUX_INFO) != 0 && fRestrictionLevel != USPOOF_UNDEFINED_RESTRICTIVE) { + return fChecks | fRestrictionLevel; + } else { + return fChecks; + } +} +CheckResult::~CheckResult() { +} //---------------------------------------------------------------------------------------------- // @@ -461,12 +472,14 @@ void SpoofImpl::releaseIdentifierInfo(IdentifierInfo *idInfo) const { //---------------------------------------------------------------------------------------------- -UBool SpoofData::validateDataVersion(const SpoofDataHeader *rawData, UErrorCode &status) { +UBool SpoofData::validateDataVersion(UErrorCode &status) const { if (U_FAILURE(status) || - rawData == NULL || - rawData->fMagic != USPOOF_MAGIC || - rawData->fFormatVersion[0] > 1 || - rawData->fFormatVersion[1] > 0) { + fRawData == NULL || + fRawData->fMagic != USPOOF_MAGIC || + fRawData->fFormatVersion[0] != USPOOF_CONFUSABLE_DATA_FORMAT_VERSION || + fRawData->fFormatVersion[1] != 0 || + fRawData->fFormatVersion[2] != 0 || + fRawData->fFormatVersion[3] != 0) { status = U_INVALID_FORMAT_ERROR; return FALSE; } @@ -485,7 +498,7 @@ spoofDataIsAcceptable(void *context, pInfo->dataFormat[1] == 0x66 && pInfo->dataFormat[2] == 0x75 && pInfo->dataFormat[3] == 0x20 && - pInfo->formatVersion[0] == 1 + pInfo->formatVersion[0] == USPOOF_CONFUSABLE_DATA_FORMAT_VERSION ) { UVersionInfo *version = static_cast(context); if(version != NULL) { @@ -497,32 +510,61 @@ spoofDataIsAcceptable(void *context, } } +// Methods for the loading of the default confusables data file. The confusable +// data is loaded only when it is needed. +// +// SpoofData::getDefault() - Return the default confusables data, and call the +// initOnce() if it is not available. Adds a reference +// to the SpoofData that the caller is responsible for +// decrementing when they are done with the data. // -// SpoofData::getDefault() - return a wrapper around the spoof data that is -// baked into the default ICU data. +// uspoof_loadDefaultData - Called once, from initOnce(). The resulting SpoofData +// is shared by all spoof checkers using the default data. // -// Called once, from the initOnce() function in uspoof_impl.cpp; the resulting -// SpoofData is shared by all spoof checkers using the default data. +// uspoof_cleanupDefaultData - Called during cleanup. // -SpoofData *SpoofData::getDefault(UErrorCode &status) { + +static UInitOnce gSpoofInitDefaultOnce = U_INITONCE_INITIALIZER; +static SpoofData* gDefaultSpoofData; + +static UBool U_CALLCONV +uspoof_cleanupDefaultData(void) { + if (gDefaultSpoofData) { + // Will delete, assuming all user-level spoof checkers were closed. + gDefaultSpoofData->removeReference(); + gDefaultSpoofData = NULL; + gSpoofInitDefaultOnce.reset(); + } + return TRUE; +} + +static void U_CALLCONV uspoof_loadDefaultData(UErrorCode& status) { UDataMemory *udm = udata_openChoice(NULL, "cfu", "confusables", - spoofDataIsAcceptable, + spoofDataIsAcceptable, NULL, // context, would receive dataVersion if supplied. &status); + if (U_FAILURE(status)) { return; } + gDefaultSpoofData = new SpoofData(udm, status); if (U_FAILURE(status)) { - return NULL; - } - SpoofData *This = new SpoofData(udm, status); - if (U_FAILURE(status)) { - delete This; - return NULL; + delete gDefaultSpoofData; + return; } - if (This == NULL) { + if (gDefaultSpoofData == NULL) { status = U_MEMORY_ALLOCATION_ERROR; + return; } - return This; + ucln_i18n_registerCleanup(UCLN_I18N_SPOOFDATA, uspoof_cleanupDefaultData); +} + +SpoofData* SpoofData::getDefault(UErrorCode& status) { + umtx_initOnce(gSpoofInitDefaultOnce, &uspoof_loadDefaultData, status); + if (U_FAILURE(status)) { return NULL; } + gDefaultSpoofData->addReference(); + return gDefaultSpoofData; } + + SpoofData::SpoofData(UDataMemory *udm, UErrorCode &status) { reset(); @@ -533,7 +575,7 @@ SpoofData::SpoofData(UDataMemory *udm, UErrorCode &status) // fRawData is non-const because it may be constructed by the data builder. fRawData = reinterpret_cast( const_cast(udata_getMemory(udm))); - validateDataVersion(fRawData, status); + validateDataVersion(status); initPtrs(status); } @@ -554,7 +596,7 @@ SpoofData::SpoofData(const void *data, int32_t length, UErrorCode &status) status = U_INVALID_FORMAT_ERROR; return; } - validateDataVersion(fRawData, status); + validateDataVersion(status); initPtrs(status); } @@ -572,7 +614,7 @@ SpoofData::SpoofData(UErrorCode &status) { // Just in case it's not, round it up. uint32_t initialSize = (sizeof(SpoofDataHeader) + 15) & ~15; U_ASSERT(initialSize == sizeof(SpoofDataHeader)); - + fRawData = static_cast(uprv_malloc(initialSize)); fMemLimit = initialSize; if (fRawData == NULL) { @@ -582,7 +624,7 @@ SpoofData::SpoofData(UErrorCode &status) { uprv_memset(fRawData, 0, initialSize); fRawData->fMagic = USPOOF_MAGIC; - fRawData->fFormatVersion[0] = 1; + fRawData->fFormatVersion[0] = USPOOF_CONFUSABLE_DATA_FORMAT_VERSION; fRawData->fFormatVersion[1] = 0; fRawData->fFormatVersion[2] = 0; fRawData->fFormatVersion[3] = 0; @@ -600,11 +642,7 @@ void SpoofData::reset() { fRefCount = 1; fCFUKeys = NULL; fCFUValues = NULL; - fCFUStringLengths = NULL; fCFUStrings = NULL; - fAnyCaseTrie = NULL; - fLowerCaseTrie = NULL; - fScriptSets = NULL; } @@ -626,7 +664,6 @@ void SpoofData::reset() { void SpoofData::initPtrs(UErrorCode &status) { fCFUKeys = NULL; fCFUValues = NULL; - fCFUStringLengths = NULL; fCFUStrings = NULL; if (U_FAILURE(status)) { return; @@ -637,33 +674,13 @@ void SpoofData::initPtrs(UErrorCode &status) { if (fRawData->fCFUStringIndex != 0) { fCFUValues = (uint16_t *)((char *)fRawData + fRawData->fCFUStringIndex); } - if (fRawData->fCFUStringLengths != 0) { - fCFUStringLengths = (SpoofStringLengthsElement *)((char *)fRawData + fRawData->fCFUStringLengths); - } if (fRawData->fCFUStringTable != 0) { fCFUStrings = (UChar *)((char *)fRawData + fRawData->fCFUStringTable); } - - if (fAnyCaseTrie == NULL && fRawData->fAnyCaseTrie != 0) { - fAnyCaseTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, - (char *)fRawData + fRawData->fAnyCaseTrie, fRawData->fAnyCaseTrieLength, NULL, &status); - } - if (fLowerCaseTrie == NULL && fRawData->fLowerCaseTrie != 0) { - fLowerCaseTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, - (char *)fRawData + fRawData->fLowerCaseTrie, fRawData->fLowerCaseTrieLength, NULL, &status); - } - - if (fRawData->fScriptSets != 0) { - fScriptSets = (ScriptSet *)((char *)fRawData + fRawData->fScriptSets); - } } SpoofData::~SpoofData() { - utrie2_close(fAnyCaseTrie); - fAnyCaseTrie = NULL; - utrie2_close(fLowerCaseTrie); - fLowerCaseTrie = NULL; if (fDataOwned) { uprv_free(fRawData); } @@ -708,6 +725,78 @@ void *SpoofData::reserveSpace(int32_t numBytes, UErrorCode &status) { return (char *)fRawData + returnOffset; } +int32_t SpoofData::serialize(void *buf, int32_t capacity, UErrorCode &status) const { + int32_t dataSize = fRawData->fLength; + if (capacity < dataSize) { + status = U_BUFFER_OVERFLOW_ERROR; + return dataSize; + } + uprv_memcpy(buf, fRawData, dataSize); + return dataSize; +} + +int32_t SpoofData::size() const { + return fRawData->fLength; +} + +//------------------------------- +// +// Front-end APIs for SpoofData +// +//------------------------------- + +int32_t SpoofData::confusableLookup(UChar32 inChar, UnicodeString &dest) const { + // Perform a binary search. + // [lo, hi), i.e lo is inclusive, hi is exclusive. + // The result after the loop will be in lo. + int32_t lo = 0; + int32_t hi = length(); + do { + int32_t mid = (lo + hi) / 2; + if (codePointAt(mid) > inChar) { + hi = mid; + } else if (codePointAt(mid) < inChar) { + lo = mid; + } else { + // Found result. Break early. + lo = mid; + break; + } + } while (hi - lo > 1); + + // Did we find an entry? If not, the char maps to itself. + if (codePointAt(lo) != inChar) { + dest.append(inChar); + return 1; + } + + // Add the element to the string builder and return. + return appendValueTo(lo, dest); +} + +int32_t SpoofData::length() const { + return fRawData->fCFUKeysSize; +} + +UChar32 SpoofData::codePointAt(int32_t index) const { + return ConfusableDataUtils::keyToCodePoint(fCFUKeys[index]); +} + +int32_t SpoofData::appendValueTo(int32_t index, UnicodeString& dest) const { + int32_t stringLength = ConfusableDataUtils::keyToLength(fCFUKeys[index]); + + // Value is either a char (for strings of length 1) or + // an index into the string table (for longer strings) + uint16_t value = fCFUValues[index]; + if (stringLength == 1) { + dest.append((UChar)value); + } else { + dest.append(fCFUStrings + value, stringLength); + } + + return stringLength; +} + U_NAMESPACE_END @@ -739,7 +828,10 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou pInfo->dataFormat[1]==0x66 && pInfo->dataFormat[2]==0x75 && pInfo->dataFormat[3]==0x20 && - pInfo->formatVersion[0]==1 )) { + pInfo->formatVersion[0]==USPOOF_CONFUSABLE_DATA_FORMAT_VERSION && + pInfo->formatVersion[1]==0 && + pInfo->formatVersion[2]==0 && + pInfo->formatVersion[3]==0 )) { udata_printError(ds, "uspoof_swap(): data format %02x.%02x.%02x.%02x " "(format version %02x %02x %02x %02x) is not recognized\n", pInfo->dataFormat[0], pInfo->dataFormat[1], @@ -766,7 +858,7 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou const uint8_t *inBytes =(const uint8_t *)inData+headerSize; SpoofDataHeader *spoofDH = (SpoofDataHeader *)inBytes; if (ds->readUInt32(spoofDH->fMagic) != USPOOF_MAGIC || - ds->readUInt32(spoofDH->fLength) < sizeof(SpoofDataHeader)) + ds->readUInt32(spoofDH->fLength) < sizeof(SpoofDataHeader)) { udata_printError(ds, "uspoof_swap(): Spoof Data header is invalid.\n"); *status=U_UNSUPPORTED_ERROR; @@ -828,26 +920,6 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou sectionLength = ds->readUInt32(spoofDH->fCFUStringTableLen) * 2; ds->swapArray16(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - // String Lengths Section - sectionStart = ds->readUInt32(spoofDH->fCFUStringLengths); - sectionLength = ds->readUInt32(spoofDH->fCFUStringLengthsSize) * 4; - ds->swapArray16(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Any Case Trie - sectionStart = ds->readUInt32(spoofDH->fAnyCaseTrie); - sectionLength = ds->readUInt32(spoofDH->fAnyCaseTrieLength); - utrie2_swap(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Lower Case Trie - sectionStart = ds->readUInt32(spoofDH->fLowerCaseTrie); - sectionLength = ds->readUInt32(spoofDH->fLowerCaseTrieLength); - utrie2_swap(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Script Sets. The data is an array of int32_t - sectionStart = ds->readUInt32(spoofDH->fScriptSets); - sectionLength = ds->readUInt32(spoofDH->fScriptSetsLength) * sizeof(ScriptSet); - ds->swapArray32(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - // And, last, swap the header itself. // int32_t fMagic // swap this // uint8_t fFormatVersion[4] // Do not swap this, just copy @@ -866,3 +938,5 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou } #endif + + diff --git a/deps/icu-small/source/i18n/uspoof_impl.h b/deps/icu-small/source/i18n/uspoof_impl.h index 44f6b5c9439053..530767038f3b71 100644 --- a/deps/icu-small/source/i18n/uspoof_impl.h +++ b/deps/icu-small/source/i18n/uspoof_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2013, International Business Machines Corporation @@ -13,6 +15,7 @@ #ifndef USPOOFIM_H #define USPOOFIM_H +#include "uassert.h" #include "unicode/utypes.h" #include "unicode/uspoof.h" #include "unicode/uscript.h" @@ -37,11 +40,13 @@ U_NAMESPACE_BEGIN // Magic number for sanity checking spoof data. #define USPOOF_MAGIC 0x3845fdef -class IdentifierInfo; +// Magic number for sanity checking spoof checkers. +#define USPOOF_CHECK_MAGIC 0x2734ecde + class ScriptSet; class SpoofData; struct SpoofDataHeader; -struct SpoofStringLengthsElement; +class ConfusableDataUtils; /** * Class SpoofImpl corresponds directly to the plain C API opaque type @@ -49,25 +54,20 @@ struct SpoofStringLengthsElement; */ class SpoofImpl : public UObject { public: - SpoofImpl(SpoofData *data, UErrorCode &status); - SpoofImpl(); - virtual ~SpoofImpl(); + SpoofImpl(SpoofData *data, UErrorCode& status); + SpoofImpl(UErrorCode& status); + SpoofImpl(); + void construct(UErrorCode& status); + virtual ~SpoofImpl(); /** Copy constructor, used by the user level uspoof_clone() function. */ SpoofImpl(const SpoofImpl &src, UErrorCode &status); - + + USpoofChecker *asUSpoofChecker(); static SpoofImpl *validateThis(USpoofChecker *sc, UErrorCode &status); static const SpoofImpl *validateThis(const USpoofChecker *sc, UErrorCode &status); - /** Get the confusable skeleton transform for a single code point. - * The result is a string with a length between 1 and 18. - * @param tableMask bit flag specifying which confusable table to use. - * One of USPOOF_SL_TABLE_FLAG, USPOOF_MA_TABLE_FLAG, etc. - * @return The length in UTF-16 code units of the substition string. - */ - int32_t confusableLookup(UChar32 inChar, int32_t tableMask, UnicodeString &destBuf) const; - /** Set and Get AllowedLocales, implementations of the corresponding API */ void setAllowedLocales(const char *localesList, UErrorCode &status); const char * getAllowedLocales(UErrorCode &status); @@ -76,26 +76,19 @@ class SpoofImpl : public UObject { // the specified locale. Part of the implementation of setAllowedLocales. void addScriptChars(const char *locale, UnicodeSet *allowedChars, UErrorCode &status); + // Functions implementing the features of UTS 39 section 5. + static void getAugmentedScriptSet(UChar32 codePoint, ScriptSet& result, UErrorCode& status); + void getResolvedScriptSet(const UnicodeString& input, ScriptSet& result, UErrorCode& status) const; + void getResolvedScriptSetWithout(const UnicodeString& input, UScriptCode script, ScriptSet& result, UErrorCode& status) const; + void getNumerics(const UnicodeString& input, UnicodeSet& result, UErrorCode& status) const; + URestrictionLevel getRestrictionLevel(const UnicodeString& input, UErrorCode& status) const; /** parse a hex number. Untility used by the builders. */ static UChar32 ScanHex(const UChar *s, int32_t start, int32_t limit, UErrorCode &status); - // Implementation for Whole Script tests. - // Return the test bit flag to be ORed into the eventual user return value - // if a Spoof opportunity is detected. - void wholeScriptCheck( - const UnicodeString &text, ScriptSet *result, UErrorCode &status) const; - static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const; - // IdentifierInfo Cache. IdentifierInfo objects are somewhat expensive to create. - // Maintain a one-element cache, which is sufficient to avoid repeatedly - // creating new ones unless we get multi-thread concurrency in spoof - // check operations, which should be statistically uncommon. - IdentifierInfo *getIdentifierInfo(UErrorCode &status) const; - void releaseIdentifierInfo(IdentifierInfo *idInfo) const; - // // Data Members // @@ -104,20 +97,42 @@ class SpoofImpl : public UObject { int32_t fChecks; // Bit vector of checks to perform. SpoofData *fSpoofData; - + const UnicodeSet *fAllowedCharsSet; // The UnicodeSet of allowed characters. // for this Spoof Checker. Defaults to all chars. const char *fAllowedLocales; // The list of allowed locales. URestrictionLevel fRestrictionLevel; // The maximum restriction level for an acceptable identifier. - - IdentifierInfo *fCachedIdentifierInfo; // Do not use directly. See getIdentifierInfo().:w }; +/** + * Class CheckResult corresponds directly to the plain C API opaque type + * USpoofCheckResult. One can be cast to the other. + */ +class CheckResult : public UObject { +public: + CheckResult(); + virtual ~CheckResult(); + + USpoofCheckResult *asUSpoofCheckResult(); + static CheckResult *validateThis(USpoofCheckResult *ptr, UErrorCode &status); + static const CheckResult *validateThis(const USpoofCheckResult *ptr, UErrorCode &status); + + void clear(); + + // Used to convert this CheckResult to the older int32_t return value API + int32_t toCombinedBitmask(int32_t expectedChecks); + + // Data Members + int32_t fMagic; // Internal sanity check. + int32_t fChecks; // Bit vector of checks that were failed. + UnicodeSet fNumerics; // Set of numerics found in the string. + URestrictionLevel fRestrictionLevel; // The restriction level of the string. +}; // -// Confusable Mappings Data Structures +// Confusable Mappings Data Structures, version 2.0 // // For the confusable data, we are essentially implementing a map, // key: a code point @@ -125,14 +140,7 @@ class SpoofImpl : public UObject { // // The keys are stored as a sorted array of 32 bit ints. // bits 0-23 a code point value -// bits 24-31 flags -// 24: 1 if entry applies to SL table -// 25: 1 if entry applies to SA table -// 26: 1 if entry applies to ML table -// 27: 1 if entry applies to MA table -// 28: 1 if there are multiple entries for this code point. -// 29-30: length of value string, in UChars. -// values are (1, 2, 3, other) +// bits 24-31 length of value string, in UChars (between 1 and 256 UChars). // The key table is sorted in ascending code point order. (not on the // 32 bit int value, the flag bits do not participate in the sorting.) // @@ -146,39 +154,37 @@ class SpoofImpl : public UObject { // The strings table contains all of the value strings (those of length two or greater) // concatentated together into one long UChar (UTF-16) array. // -// The array is arranged by length of the strings - all strings of the same length -// are stored together. The sections are ordered by length of the strings - -// all two char strings first, followed by all of the three Char strings, etc. -// // There is no nul character or other mark between adjacent strings. // -// String Lengths table -// The length of strings from 1 to 3 is flagged in the key table. -// For strings of length 4 or longer, the string length table provides a -// mapping between an index into the string table and the corresponding length. -// Strings of these lengths are rare, so lookup time is not an issue. -// Each entry consists of -// uint16_t index of the _last_ string with this length -// uint16_t the length +//---------------------------------------------------------------------------- // +// Changes from format version 1 to format version 2: +// 1) Removal of the whole-script confusable data tables. +// 2) Removal of the SL/SA/ML/MA and multi-table flags in the key bitmask. +// 3) Expansion of string length value in the key bitmask from 2 bits to 8 bits. +// 4) Removal of the string lengths table since 8 bits is sufficient for the +// lengths of all entries in confusables.txt. -// Flag bits in the Key entries -#define USPOOF_SL_TABLE_FLAG (1<<24) -#define USPOOF_SA_TABLE_FLAG (1<<25) -#define USPOOF_ML_TABLE_FLAG (1<<26) -#define USPOOF_MA_TABLE_FLAG (1<<27) -#define USPOOF_KEY_MULTIPLE_VALUES (1<<28) -#define USPOOF_KEY_LENGTH_SHIFT 29 -#define USPOOF_KEY_LENGTH_FIELD(x) (((x)>>29) & 3) -struct SpoofStringLengthsElement { - uint16_t fLastString; // index in string table of last string with this length - uint16_t fStrLength; // Length of strings +// Internal functions for manipulating confusable data table keys +#define USPOOF_CONFUSABLE_DATA_FORMAT_VERSION 2 // version for ICU 58 +class ConfusableDataUtils { +public: + inline static UChar32 keyToCodePoint(int32_t key) { + return key & 0x00ffffff; + } + inline static int32_t keyToLength(int32_t key) { + return ((key & 0xff000000) >> 24) + 1; + } + inline static int32_t codePointAndLengthToKey(UChar32 codePoint, int32_t length) { + U_ASSERT((codePoint & 0x00ffffff) == codePoint); + U_ASSERT(length <= 256); + return codePoint | ((length - 1) << 24); + } }; - //------------------------------------------------------------------------------------- // // SpoofData @@ -195,10 +201,12 @@ struct SpoofStringLengthsElement { //--------------------------------------------------------------------------------------- class SpoofData: public UMemory { public: - static SpoofData *getDefault(UErrorCode &status); // Load standard ICU spoof data. + static SpoofData* getDefault(UErrorCode &status); // Get standard ICU spoof data. + static void releaseDefault(); // Cleanup reference to default spoof data. + SpoofData(UErrorCode &status); // Create new spoof data wrapper. // Only used when building new data from rules. - + // Constructor for use when creating from prebuilt default data. // A UDataMemory is what the ICU internal data loading functions provide. // The udm is adopted by the SpoofData. @@ -210,16 +218,46 @@ class SpoofData: public UMemory { // Check raw Spoof Data Version compatibility. // Return TRUE it looks good. - static UBool validateDataVersion(const SpoofDataHeader *rawData, UErrorCode &status); + UBool validateDataVersion(UErrorCode &status) const; + ~SpoofData(); // Destructor not normally used. // Use removeReference() instead. // Reference Counting functions. // Clone of a user-level spoof detector increments the ref count on the data. // Close of a user-level spoof detector decrements the ref count. // If the data is owned by us, it will be deleted when count goes to zero. - SpoofData *addReference(); + SpoofData *addReference(); void removeReference(); + // Reset all fields to an initial state. + // Called from the top of all constructors. + void reset(); + + // Copy this instance's raw data buffer to the specified address. + int32_t serialize(void *buf, int32_t capacity, UErrorCode &status) const; + + // Get the total number of bytes of data backed by this SpoofData. + // Not to be confused with length, which returns the number of confusable entries. + int32_t size() const; + + // Get the confusable skeleton transform for a single code point. + // The result is a string with a length between 1 and 18 as of Unicode 9. + // This is the main public endpoint for this class. + // @return The length in UTF-16 code units of the substition string. + int32_t confusableLookup(UChar32 inChar, UnicodeString &dest) const; + + // Get the number of confusable entries in this SpoofData. + int32_t length() const; + + // Get the code point (key) at the specified index. + UChar32 codePointAt(int32_t index) const; + + // Get the confusable skeleton (value) at the specified index. + // Append it to the specified UnicodeString&. + // @return The length in UTF-16 code units of the skeleton string. + int32_t appendValueTo(int32_t index, UnicodeString& dest) const; + + private: // Reserve space in the raw data. For use by builder when putting together a // new set of data. Init the new storage to zero, to prevent inconsistent // results if it is not all otherwise set by the requester. @@ -230,10 +268,6 @@ class SpoofData: public UMemory { // initialize the pointers from this object to the raw data. void initPtrs(UErrorCode &status); - // Reset all fields to an initial state. - // Called from the top of all constructors. - void reset(); - SpoofDataHeader *fRawData; // Ptr to the raw memory-mapped data UBool fDataOwned; // True if the raw data is owned, and needs // to be deleted when refcount goes to zero. @@ -247,15 +281,10 @@ class SpoofData: public UMemory { // Confusable data int32_t *fCFUKeys; uint16_t *fCFUValues; - SpoofStringLengthsElement *fCFUStringLengths; UChar *fCFUStrings; - // Whole Script Confusable Data - UTrie2 *fAnyCaseTrie; - UTrie2 *fLowerCaseTrie; - ScriptSet *fScriptSets; - }; - + friend class ConfusabledataBuilder; +}; //--------------------------------------------------------------------------------------- // @@ -284,47 +313,11 @@ struct SpoofDataHeader { int32_t fCFUStringTable; // byte offset of String table int32_t fCFUStringTableLen; // length of string table (in 16 bit UChars) - int32_t fCFUStringLengths; // byte offset to String Lengths table - int32_t fCFUStringLengthsSize; // number of entries in lengths table. (2 x 16 bits each) - - - // The following sections are for data from confusablesWholeScript.txt - - int32_t fAnyCaseTrie; // byte offset to the serialized Any Case Trie - int32_t fAnyCaseTrieLength; // Length (bytes) of the serialized Any Case Trie - - int32_t fLowerCaseTrie; // byte offset to the serialized Lower Case Trie - int32_t fLowerCaseTrieLength; // Length (bytes) of the serialized Lower Case Trie - - int32_t fScriptSets; // byte offset to array of ScriptSets - int32_t fScriptSetsLength; // Number of ScriptSets (24 bytes each) - - // The following sections are for data from xidmodifications.txt - int32_t unused[15]; // Padding, Room for Expansion +}; - }; - - - - -// -// Structure for the Whole Script Confusable Data -// See Unicode UAX-39, Unicode Security Mechanisms, for a description of the -// Whole Script confusable data -// -// The data provides mappings from code points to a set of scripts -// that contain characters that might be confused with the code point. -// There are two mappings, one for lower case only, and one for characters -// of any case. -// -// The actual data consists of a utrie2 to map from a code point to an offset, -// and an array of UScriptSets (essentially bit maps) that is indexed -// by the offsets obtained from the Trie. -// -// U_NAMESPACE_END @@ -342,3 +335,4 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou #endif #endif /* USPOOFIM_H */ + diff --git a/deps/icu-small/source/i18n/uspoof_wsconf.cpp b/deps/icu-small/source/i18n/uspoof_wsconf.cpp deleted file mode 100644 index ad73ed690cd3fc..00000000000000 --- a/deps/icu-small/source/i18n/uspoof_wsconf.cpp +++ /dev/null @@ -1,435 +0,0 @@ -/* -****************************************************************************** -* -* Copyright (C) 2008-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: uspoof_wsconf.cpp -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009Jan05 (refactoring earlier files) -* created by: Andy Heninger -* -* Internal functions for compililing Whole Script confusable source data -* into its binary (runtime) form. The binary data format is described -* in uspoof_impl.h -*/ - -#include "unicode/utypes.h" -#include "unicode/uspoof.h" - -#if !UCONFIG_NO_NORMALIZATION - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "unicode/unorm.h" -#include "unicode/uregex.h" -#include "unicode/ustring.h" -#include "cmemory.h" -#include "scriptset.h" -#include "uspoof_impl.h" -#include "uhash.h" -#include "uvector.h" -#include "uassert.h" -#include "uspoof_wsconf.h" - -U_NAMESPACE_USE - - -// Regular expression for parsing a line from the Unicode file confusablesWholeScript.txt -// Example Lines: -// 006F ; Latn; Deva; A # (o) LATIN SMALL LETTER O -// 0048..0049 ; Latn; Grek; A # [2] (H..I) LATIN CAPITAL LETTER H..LATIN CAPITAL LETTER I -// | | | | -// | | | |---- Which table, Any Case or Lower Case (A or L) -// | | |----------Target script. We need this. -// | |----------------Src script. Should match the script of the source -// | code points. Beyond checking that, we don't keep it. -// |--------------------------------Source code points or range. -// -// The expression will match _all_ lines, including erroneous lines. -// The result of the parse is returned via the contents of the (match) groups. -static const char *parseExp = - "(?m)" // Multi-line mode - "^([ \\t]*(?:#.*?)?)$" // A blank or comment line. Matches Group 1. - "|^(?:" // OR - "\\s*([0-9A-F]{4,})(?:..([0-9A-F]{4,}))?\\s*;" // Code point range. Groups 2 and 3. - "\\s*([A-Za-z]+)\\s*;" // The source script. Group 4. - "\\s*([A-Za-z]+)\\s*;" // The target script. Group 5. - "\\s*(?:(A)|(L))" // The table A or L. Group 6 or 7 - "[ \\t]*(?:#.*?)?" // Trailing commment - ")$|" // OR - "^(.*?)$"; // An error line. Group 8. - // Any line not matching the preceding - // parts of the expression.will match - // this, and thus be flagged as an error - - -// Extract a regular expression match group into a char * string. -// The group must contain only invariant characters. -// Used for script names -// -static void extractGroup( - URegularExpression *e, int32_t group, char *destBuf, int32_t destCapacity, UErrorCode &status) { - - UChar ubuf[50]; - ubuf[0] = 0; - destBuf[0] = 0; - int32_t len = uregex_group(e, group, ubuf, 50, &status); - if (U_FAILURE(status) || len == -1 || len >= destCapacity) { - return; - } - UnicodeString s(FALSE, ubuf, len); // Aliasing constructor - s.extract(0, len, destBuf, destCapacity, US_INV); -} - - - -U_NAMESPACE_BEGIN - -// Build the Whole Script Confusable data -// -// TODO: Reorganize. Either get rid of the WSConfusableDataBuilder class, -// because everything is local to this one build function anyhow, -// OR -// break this function into more reasonably sized pieces, with -// state in WSConfusableDataBuilder. -// -void buildWSConfusableData(SpoofImpl *spImpl, const char * confusablesWS, - int32_t confusablesWSLen, UParseError *pe, UErrorCode &status) -{ - if (U_FAILURE(status)) { - return; - } - URegularExpression *parseRegexp = NULL; - int32_t inputLen = 0; - UChar *input = NULL; - int32_t lineNum = 0; - - UVector *scriptSets = NULL; - uint32_t rtScriptSetsCount = 2; - - UTrie2 *anyCaseTrie = NULL; - UTrie2 *lowerCaseTrie = NULL; - - anyCaseTrie = utrie2_open(0, 0, &status); - lowerCaseTrie = utrie2_open(0, 0, &status); - - UnicodeString pattern(parseExp, -1, US_INV); - - // The scriptSets vector provides a mapping from TRIE values to the set of scripts. - // - // Reserved TRIE values: - // 0: Code point has no whole script confusables. - // 1: Code point is of script Common or Inherited. - // These code points do not participate in whole script confusable detection. - // (This is logically equivalent to saying that they contain confusables in - // all scripts) - // - // Because Trie values are indexes into the ScriptSets vector, pre-fill - // vector positions 0 and 1 to avoid conflicts with the reserved values. - - scriptSets = new UVector(status); - if (scriptSets == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - scriptSets->addElement((void *)NULL, status); - scriptSets->addElement((void *)NULL, status); - - // Convert the user input data from UTF-8 to UChar (UTF-16) - u_strFromUTF8(NULL, 0, &inputLen, confusablesWS, confusablesWSLen, &status); - if (status != U_BUFFER_OVERFLOW_ERROR) { - goto cleanup; - } - status = U_ZERO_ERROR; - input = static_cast(uprv_malloc((inputLen+1) * sizeof(UChar))); - if (input == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - u_strFromUTF8(input, inputLen+1, NULL, confusablesWS, confusablesWSLen, &status); - - parseRegexp = uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, &status); - - // Zap any Byte Order Mark at the start of input. Changing it to a space is benign - // given the syntax of the input. - if (*input == 0xfeff) { - *input = 0x20; - } - - // Parse the input, one line per iteration of this loop. - uregex_setText(parseRegexp, input, inputLen, &status); - while (uregex_findNext(parseRegexp, &status)) { - lineNum++; - if (uregex_start(parseRegexp, 1, &status) >= 0) { - // this was a blank or comment line. - continue; - } - if (uregex_start(parseRegexp, 8, &status) >= 0) { - // input file syntax error. - status = U_PARSE_ERROR; - goto cleanup; - } - if (U_FAILURE(status)) { - goto cleanup; - } - - // Pick up the start and optional range end code points from the parsed line. - UChar32 startCodePoint = SpoofImpl::ScanHex( - input, uregex_start(parseRegexp, 2, &status), uregex_end(parseRegexp, 2, &status), status); - UChar32 endCodePoint = startCodePoint; - if (uregex_start(parseRegexp, 3, &status) >=0) { - endCodePoint = SpoofImpl::ScanHex( - input, uregex_start(parseRegexp, 3, &status), uregex_end(parseRegexp, 3, &status), status); - } - - // Extract the two script names from the source line. We need these in an 8 bit - // default encoding (will be EBCDIC on IBM mainframes) in order to pass them on - // to the ICU u_getPropertyValueEnum() function. Ugh. - char srcScriptName[20]; - char targScriptName[20]; - extractGroup(parseRegexp, 4, srcScriptName, sizeof(srcScriptName), status); - extractGroup(parseRegexp, 5, targScriptName, sizeof(targScriptName), status); - UScriptCode srcScript = - static_cast(u_getPropertyValueEnum(UCHAR_SCRIPT, srcScriptName)); - UScriptCode targScript = - static_cast(u_getPropertyValueEnum(UCHAR_SCRIPT, targScriptName)); - if (U_FAILURE(status)) { - goto cleanup; - } - if (srcScript == USCRIPT_INVALID_CODE || targScript == USCRIPT_INVALID_CODE) { - status = U_INVALID_FORMAT_ERROR; - goto cleanup; - } - - // select the table - (A) any case or (L) lower case only - UTrie2 *table = anyCaseTrie; - if (uregex_start(parseRegexp, 7, &status) >= 0) { - table = lowerCaseTrie; - } - - // Build the set of scripts containing confusable characters for - // the code point(s) specified in this input line. - // Sanity check that the script of the source code point is the same - // as the source script indicated in the input file. Failure of this check is - // an error in the input file. - // Include the source script in the set (needed for Mixed Script Confusable detection). - // - UChar32 cp; - for (cp=startCodePoint; cp<=endCodePoint; cp++) { - int32_t setIndex = utrie2_get32(table, cp); - BuilderScriptSet *bsset = NULL; - if (setIndex > 0) { - U_ASSERT(setIndex < scriptSets->size()); - bsset = static_cast(scriptSets->elementAt(setIndex)); - } else { - bsset = new BuilderScriptSet(); - if (bsset == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - bsset->codePoint = cp; - bsset->trie = table; - bsset->sset = new ScriptSet(); - setIndex = scriptSets->size(); - bsset->index = setIndex; - bsset->rindex = 0; - if (bsset->sset == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - scriptSets->addElement(bsset, status); - utrie2_set32(table, cp, setIndex, &status); - } - bsset->sset->set(targScript, status); - bsset->sset->set(srcScript, status); - - if (U_FAILURE(status)) { - goto cleanup; - } - UScriptCode cpScript = uscript_getScript(cp, &status); - if (cpScript != srcScript) { - status = U_INVALID_FORMAT_ERROR; - goto cleanup; - } - } - } - - // Eliminate duplicate script sets. At this point we have a separate - // script set for every code point that had data in the input file. - // - // We eliminate underlying ScriptSet objects, not the BuildScriptSets that wrap them - // - // printf("Number of scriptSets: %d\n", scriptSets->size()); - { - int32_t duplicateCount = 0; - rtScriptSetsCount = 2; - for (int32_t outeri=2; outerisize(); outeri++) { - BuilderScriptSet *outerSet = static_cast(scriptSets->elementAt(outeri)); - if (outerSet->index != static_cast(outeri)) { - // This set was already identified as a duplicate. - // It will not be allocated a position in the runtime array of ScriptSets. - continue; - } - outerSet->rindex = rtScriptSetsCount++; - for (int32_t inneri=outeri+1; innerisize(); inneri++) { - BuilderScriptSet *innerSet = static_cast(scriptSets->elementAt(inneri)); - if (*(outerSet->sset) == *(innerSet->sset) && outerSet->sset != innerSet->sset) { - delete innerSet->sset; - innerSet->scriptSetOwned = FALSE; - innerSet->sset = outerSet->sset; - innerSet->index = outeri; - innerSet->rindex = outerSet->rindex; - duplicateCount++; - } - // But this doesn't get all. We need to fix the TRIE. - } - } - // printf("Number of distinct script sets: %d\n", rtScriptSetsCount); - } - - - - // Update the Trie values to be reflect the run time script indexes (after duplicate merging). - // (Trie Values 0 and 1 are reserved, and the corresponding slots in scriptSets - // are unused, which is why the loop index starts at 2.) - { - for (int32_t i=2; isize(); i++) { - BuilderScriptSet *bSet = static_cast(scriptSets->elementAt(i)); - if (bSet->rindex != (uint32_t)i) { - utrie2_set32(bSet->trie, bSet->codePoint, bSet->rindex, &status); - } - } - } - - // For code points with script==Common or script==Inherited, - // Set the reserved value of 1 into both Tries. These characters do not participate - // in Whole Script Confusable detection; this reserved value is the means - // by which they are detected. - { - UnicodeSet ignoreSet; - ignoreSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_COMMON, status); - UnicodeSet inheritedSet; - inheritedSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_INHERITED, status); - ignoreSet.addAll(inheritedSet); - for (int32_t rn=0; rnfSpoofData->fRawData->fAnyCaseTrie = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength = size; - spImpl->fSpoofData->fAnyCaseTrie = anyCaseTrie; - void *where = spImpl->fSpoofData->reserveSpace(size, status); - utrie2_serialize(anyCaseTrie, where, size, &status); - - utrie2_freeze(lowerCaseTrie, UTRIE2_16_VALUE_BITS, &status); - size = utrie2_serialize(lowerCaseTrie, NULL, 0, &status); - // printf("Lower case Trie size: %d\n", size); - if (status != U_BUFFER_OVERFLOW_ERROR) { - goto cleanup; - } - status = U_ZERO_ERROR; - spImpl->fSpoofData->fRawData->fLowerCaseTrie = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fLowerCaseTrieLength = size; - spImpl->fSpoofData->fLowerCaseTrie = lowerCaseTrie; - where = spImpl->fSpoofData->reserveSpace(size, status); - utrie2_serialize(lowerCaseTrie, where, size, &status); - - spImpl->fSpoofData->fRawData->fScriptSets = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fScriptSetsLength = rtScriptSetsCount; - ScriptSet *rtScriptSets = static_cast - (spImpl->fSpoofData->reserveSpace(rtScriptSetsCount * sizeof(ScriptSet), status)); - uint32_t rindex = 2; - for (int32_t i=2; isize(); i++) { - BuilderScriptSet *bSet = static_cast(scriptSets->elementAt(i)); - if (bSet->rindex < rindex) { - // We have already copied this script set to the serialized data. - continue; - } - U_ASSERT(rindex == bSet->rindex); - rtScriptSets[rindex] = *bSet->sset; // Assignment of a ScriptSet just copies the bits. - rindex++; - } - } - - // Open new utrie2s from the serialized data. We don't want to keep the ones - // we just built because we would then have two copies of the data, one internal to - // the utries that we have already constructed, and one in the serialized data area. - // An alternative would be to not pre-serialize the Trie data, but that makes the - // spoof detector data different, depending on how the detector was constructed. - // It's simpler to keep the data always the same. - - spImpl->fSpoofData->fAnyCaseTrie = utrie2_openFromSerialized( - UTRIE2_16_VALUE_BITS, - (const char *)spImpl->fSpoofData->fRawData + spImpl->fSpoofData->fRawData->fAnyCaseTrie, - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength, - NULL, - &status); - - spImpl->fSpoofData->fLowerCaseTrie = utrie2_openFromSerialized( - UTRIE2_16_VALUE_BITS, - (const char *)spImpl->fSpoofData->fRawData + spImpl->fSpoofData->fRawData->fLowerCaseTrie, - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength, - NULL, - &status); - - - -cleanup: - if (U_FAILURE(status)) { - pe->line = lineNum; - } - uregex_close(parseRegexp); - uprv_free(input); - - int32_t i; - if (scriptSets != NULL) { - for (i=0; isize(); i++) { - BuilderScriptSet *bsset = static_cast(scriptSets->elementAt(i)); - delete bsset; - } - delete scriptSets; - } - utrie2_close(anyCaseTrie); - utrie2_close(lowerCaseTrie); - return; -} - -U_NAMESPACE_END - - - -BuilderScriptSet::BuilderScriptSet() { - codePoint = -1; - trie = NULL; - sset = NULL; - index = 0; - rindex = 0; - scriptSetOwned = TRUE; -} - -BuilderScriptSet::~BuilderScriptSet() { - if (scriptSetOwned) { - delete sset; - } -} - -#endif -#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS diff --git a/deps/icu-small/source/i18n/uspoof_wsconf.h b/deps/icu-small/source/i18n/uspoof_wsconf.h deleted file mode 100644 index 5c0e6111a7a45d..00000000000000 --- a/deps/icu-small/source/i18n/uspoof_wsconf.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -****************************************************************************** -* -* Copyright (C) 2008-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: uspoof_buildwsconf.h -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009Jan19 -* created by: Andy Heninger -* -* Internal classes and functions -* for compiling whole script confusable data into its binary (runtime) form. -*/ - -#ifndef __USPOOF_BUILDWSCONF_H__ -#define __USPOOF_BUILDWSCONF_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_NORMALIZATION - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "uspoof_impl.h" -#include "utrie2.h" - - -U_NAMESPACE_BEGIN - -// -// class BuilderScriptSet. Represents the set of scripts (Script Codes) -// containing characters that are confusable with one specific -// code point. -// - -class BuilderScriptSet: public UMemory { - public: - UChar32 codePoint; // The source code point. - UTrie2 *trie; // Any-case or Lower-case Trie. - // These Trie tables are the final result of the - // build. This flag indicates which of the two - // this set of data is for. - ScriptSet *sset; // The set of scripts itself. - - // Vectors of all B - uint32_t index; // Index of this set in the Build Time vector - // of script sets. - uint32_t rindex; // Index of this set in the final (runtime) - // array of sets. - UBool scriptSetOwned; // True if this BuilderScriptSet owns (should delete) - // its underlying sset. - - BuilderScriptSet(); - ~BuilderScriptSet(); -}; - - -void buildWSConfusableData(SpoofImpl *spImpl, const char * confusablesWS, - int32_t confusablesWSLen, UParseError *pe, UErrorCode &status); - -U_NAMESPACE_END - -#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS -#endif // !UCONFIG_NO_NORMALIZATION -#endif diff --git a/deps/icu-small/source/i18n/usrchimp.h b/deps/icu-small/source/i18n/usrchimp.h index 898e38a20f9e72..d587c9ecd3d2a2 100644 --- a/deps/icu-small/source/i18n/usrchimp.h +++ b/deps/icu-small/source/i18n/usrchimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2015 IBM and others. All rights reserved. @@ -41,7 +43,7 @@ #define isContinuation(CE) (((CE) & UCOL_CONTINUATION_MARKER) == UCOL_CONTINUATION_MARKER) /** - * This indicates an error has occured during processing or there are no more CEs + * This indicates an error has occured during processing or there are no more CEs * to be returned. */ #define UCOL_PROCESSED_NULLORDER ((int64_t)U_INT64_MAX) @@ -98,7 +100,7 @@ class UCollationPCE : public UMemory { * @param ixLow a pointer to an int32_t to receive the iterator index before fetching the CE. * @param ixHigh a pointer to an int32_t to receive the iterator index after fetching the CE. * @param status A pointer to an UErrorCode to receive any errors. - * @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER + * @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER * if an error has occured or if the end of string has been reached */ int64_t nextProcessed(int32_t *ixLow, int32_t *ixHigh, UErrorCode *status); @@ -108,10 +110,10 @@ class UCollationPCE : public UMemory { * * @param ixLow A pointer to an int32_t to receive the iterator index after fetching the CE * @param ixHigh A pointer to an int32_t to receiver the iterator index before fetching the CE - * @param status A pointer to an UErrorCode to receive any errors. Noteably + * @param status A pointer to an UErrorCode to receive any errors. Noteably * a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack * buffer has been exhausted. - * @return The previous collation elements ordering, otherwise returns + * @return The previous collation elements ordering, otherwise returns * UCOL_PROCESSED_NULLORDER if an error has occured or if the start of * string has been reached. */ @@ -137,10 +139,10 @@ struct USearch { UBreakIterator *internalBreakIter; //internal character breakiterator UBreakIterator *breakIter; // value USEARCH_DONE is the default value - // if we are not at the start of the text or the end of the text, - // depending on the iteration direction and matchedIndex is USEARCH_DONE + // if we are not at the start of the text or the end of the text, + // depending on the iteration direction and matchedIndex is USEARCH_DONE // it means that we can't find any more matches in that particular direction - int32_t matchedIndex; + int32_t matchedIndex; int32_t matchedLength; UBool isForwardSearching; UBool reset; @@ -172,7 +174,7 @@ struct UStringSearch { // if we are at the start of the text. UCollationElements *textIter; icu::UCollationPCE *textProcessedIter; - // utility collation element, used throughout program for temporary + // utility collation element, used throughout program for temporary // iteration. UCollationElements *utilIter; UBool ownCollator; @@ -187,21 +189,21 @@ struct UStringSearch { /** * Exact matches without checking for the ends for extra accents. * The match after the position within the collation element iterator is to be -* found. +* found. * After a match is found the offset in the collation element iterator will be * shifted to the start of the match. -* Implementation note: -* For tertiary we can't use the collator->tertiaryMask, that is a -* preprocessed mask that takes into account case options. since we are only +* Implementation note: +* For tertiary we can't use the collator->tertiaryMask, that is a +* preprocessed mask that takes into account case options. since we are only * concerned with exact matches, we don't need that. -* Alternate handling - since only the 16 most significant digits is only used, -* we can safely do a compare without masking if the ce is a variable, we mask -* and get only the primary values no shifting to quartenary is required since +* Alternate handling - since only the 16 most significant digits is only used, +* we can safely do a compare without masking if the ce is a variable, we mask +* and get only the primary values no shifting to quartenary is required since * all primary values less than variabletop will need to be masked off anyway. -* If the end character is composite and the pattern ce does not match the text -* ce, we skip it until we find a match in the end composite character or when +* If the end character is composite and the pattern ce does not match the text +* ce, we skip it until we find a match in the end composite character or when * it has passed the character. This is so that we can match pattern "a" with -* the text "\u00e6" +* the text "\u00e6" * @param strsrch string search data * @param status error status if any * @return TRUE if an exact match is found, FALSE otherwise @@ -211,7 +213,7 @@ UBool usearch_handleNextExact(UStringSearch *strsrch, UErrorCode *status); /** * Canonical matches. -* According to the definition, matches found here will include the whole span +* According to the definition, matches found here will include the whole span * of beginning and ending accents if it overlaps that region. * @param strsrch string search data * @param status error status if any @@ -232,14 +234,14 @@ UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status); /** * Canonical matches. -* According to the definition, matches found here will include the whole span +* According to the definition, matches found here will include the whole span * of beginning and ending accents if it overlaps that region. * @param strsrch string search data * @param status error status if any * @return TRUE if a canonical match is found, FALSE otherwise */ U_CFUNC -UBool usearch_handlePreviousCanonical(UStringSearch *strsrch, +UBool usearch_handlePreviousCanonical(UStringSearch *strsrch, UErrorCode *status); #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/deps/icu-small/source/i18n/utf16collationiterator.cpp b/deps/icu-small/source/i18n/utf16collationiterator.cpp index 559ea91ea88492..733729fae79ece 100644 --- a/deps/icu-small/source/i18n/utf16collationiterator.cpp +++ b/deps/icu-small/source/i18n/utf16collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf16collationiterator.h b/deps/icu-small/source/i18n/utf16collationiterator.h index 16de2078ed0b3f..505ab810d37921 100644 --- a/deps/icu-small/source/i18n/utf16collationiterator.h +++ b/deps/icu-small/source/i18n/utf16collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf8collationiterator.cpp b/deps/icu-small/source/i18n/utf8collationiterator.cpp index ddb753f6aefe66..0a0205e7b31cc2 100644 --- a/deps/icu-small/source/i18n/utf8collationiterator.cpp +++ b/deps/icu-small/source/i18n/utf8collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf8collationiterator.h b/deps/icu-small/source/i18n/utf8collationiterator.h index bb0fc1179dc1eb..8deb5ea395b7af 100644 --- a/deps/icu-small/source/i18n/utf8collationiterator.h +++ b/deps/icu-small/source/i18n/utf8collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/utmscale.c b/deps/icu-small/source/i18n/utmscale.c index 94fb7525fd39a5..5b515f18622ac8 100644 --- a/deps/icu-small/source/i18n/utmscale.c +++ b/deps/icu-small/source/i18n/utmscale.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2012, International Business Machines Corporation and @@ -55,7 +57,7 @@ U_CAPI int64_t U_EXPORT2 utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status) { const int64_t *data; - + if (status == NULL || U_FAILURE(*status)) { return 0; } @@ -71,7 +73,7 @@ utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *stat *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } - + return (otherTime + data[UTSV_EPOCH_OFFSET_VALUE]) * data[UTSV_UNITS_VALUE]; } @@ -79,7 +81,7 @@ U_CAPI int64_t U_EXPORT2 utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status) { const int64_t *data; - + if (status == NULL || U_FAILURE(*status)) { return 0; } @@ -95,19 +97,19 @@ utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *st *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } - + if (universalTime < 0) { if (universalTime < data[UTSV_MIN_ROUND_VALUE]) { return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_PLUS_1_VALUE]; } - + return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE]; } - + if (universalTime > data[UTSV_MAX_ROUND_VALUE]) { return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_MINUS_1_VALUE]; } - + return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE]; } diff --git a/deps/icu-small/source/i18n/utrans.cpp b/deps/icu-small/source/i18n/utrans.cpp index 91d9f1c8e67313..6a4c4a7d8af04d 100644 --- a/deps/icu-small/source/i18n/utrans.cpp +++ b/deps/icu-small/source/i18n/utrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2009,2014 International Business Machines @@ -145,11 +147,11 @@ utrans_openU(const UChar *id, return NULL; } UParseError temp; - + if(parseError == NULL){ parseError = &temp; } - + UnicodeString ID(idLength<0, id, idLength); // r-o alias if(rules==NULL){ @@ -157,7 +159,7 @@ utrans_openU(const UChar *id, Transliterator *trans = NULL; trans = Transliterator::createInstance(ID, dir, *parseError, *status); - + if(U_FAILURE(*status)){ return NULL; } @@ -168,8 +170,8 @@ utrans_openU(const UChar *id, rulesLength); // r-o alias Transliterator *trans = NULL; - trans = Transliterator::createFromRules(ID, ruleStr, dir, *parseError, *status); - if(U_FAILURE(*status)) { + trans = Transliterator::createFromRules(ID, ruleStr, dir, *parseError, *status); + if(U_FAILURE(*status)) { return NULL; } @@ -181,7 +183,7 @@ U_CAPI UTransliterator* U_EXPORT2 utrans_open(const char* id, UTransDirection dir, const UChar* rules, /* may be Null */ - int32_t rulesLength, /* -1 if null-terminated */ + int32_t rulesLength, /* -1 if null-terminated */ UParseError* parseError, /* may be Null */ UErrorCode* status) { UnicodeString ID(id, -1, US_INV); // use invariant converter @@ -447,7 +449,7 @@ utrans_transUChars(const UTransliterator* trans, *status = U_ILLEGAL_ARGUMENT_ERROR; return; } - + int32_t textLen = (textLength == NULL || *textLength < 0) ? u_strlen(text) : *textLength; // writeable alias: for this ct, len CANNOT be -1 (why?) diff --git a/deps/icu-small/source/i18n/valueformatter.cpp b/deps/icu-small/source/i18n/valueformatter.cpp index d7870d1041df8d..45b08f60b653ac 100644 --- a/deps/icu-small/source/i18n/valueformatter.cpp +++ b/deps/icu-small/source/i18n/valueformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/valueformatter.h b/deps/icu-small/source/i18n/valueformatter.h index 42ccd212077670..434ee55907aaab 100644 --- a/deps/icu-small/source/i18n/valueformatter.h +++ b/deps/icu-small/source/i18n/valueformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and * @@ -110,7 +112,7 @@ class U_I18N_API ValueFormatter : public UObject { */ int32_t countChar32( const VisibleDigitsWithExponent &positiveValue) const; - + /** * Prepares this instance for fixed decimal formatting. */ diff --git a/deps/icu-small/source/i18n/visibledigits.cpp b/deps/icu-small/source/i18n/visibledigits.cpp index a6cbd0fdce276e..1fea3504dfeee8 100644 --- a/deps/icu-small/source/i18n/visibledigits.cpp +++ b/deps/icu-small/source/i18n/visibledigits.cpp @@ -1,5 +1,7 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* - * Copyright (C) 2015, International Business Machines + * Copyright (C) 2016, International Business Machines * Corporation and others. All Rights Reserved. * * file name: visibledigits.cpp @@ -84,8 +86,11 @@ double VisibleDigits::computeAbsDoubleValue() const { } // stack allocate a decNumber to hold MAX_DBL_DIGITS+3 significant digits - char rawNumber[sizeof(decNumber) + MAX_DBL_DIGITS+3]; - decNumber *numberPtr = (decNumber *) rawNumber; + struct { + decNumber decNum; + char digits[MAX_DBL_DIGITS+3]; + } decNumberWithStorage; + decNumber *numberPtr = &decNumberWithStorage.decNum; int32_t mostSig = fInterval.getMostSignificantExclusive(); int32_t mostSigNonZero = fExponent + fDigits.length(); @@ -109,15 +114,8 @@ double VisibleDigits::computeAbsDoubleValue() const { char str[MAX_DBL_DIGITS+18]; uprv_decNumberToString(numberPtr, str); U_ASSERT(uprv_strlen(str) < MAX_DBL_DIGITS+18); - char decimalSeparator = DigitList::getStrtodDecimalSeparator(); - if (decimalSeparator != '.') { - char *decimalPt = strchr(str, '.'); - if (decimalPt != NULL) { - *decimalPt = decimalSeparator; - } - } char *unused = NULL; - return uprv_strtod(str, &unused); + return DigitList::decimalStrToDouble(str, &unused); } void VisibleDigits::getFixedDecimal( @@ -165,7 +163,8 @@ void VisibleDigits::getFixedDecimal( // f (decimal digits) // skip over any leading 0's in fraction digits. int32_t idx = -1; - for (; idx >= -v && getDigitByExponent(idx) == 0; --idx); + for (; idx >= -v && getDigitByExponent(idx) == 0; --idx) + ; // Only process up to first 18 non zero fraction digits for decimalDigits // since that is all we can fit into an int64. diff --git a/deps/icu-small/source/i18n/visibledigits.h b/deps/icu-small/source/i18n/visibledigits.h index 9390aadc6bd200..eba2a1bc9f4486 100644 --- a/deps/icu-small/source/i18n/visibledigits.h +++ b/deps/icu-small/source/i18n/visibledigits.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -50,7 +52,7 @@ class U_I18N_API VisibleDigits : public UMemory { /** * Returns the digit interval which indicates the leftmost and rightmost - * position of this instance. + * position of this instance. * If isNaN() or isInfinity() return TRUE, then the result of this * function is undefined. */ diff --git a/deps/icu-small/source/i18n/vtzone.cpp b/deps/icu-small/source/i18n/vtzone.cpp index 0585ea75ae0fa2..e0621cc07bcec3 100644 --- a/deps/icu-small/source/i18n/vtzone.cpp +++ b/deps/icu-small/source/i18n/vtzone.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -112,7 +114,7 @@ static int32_t parseAsciiDigits(const UnicodeString& str, int32_t start, int32_t } num = 10 * num + digit; } - return sign * num; + return sign * num; } static UnicodeString& appendAsciiDigits(int32_t number, uint8_t length, UnicodeString& str) { @@ -367,9 +369,9 @@ static void getDefaultTZName(const UnicodeString tzid, UBool isDST, UnicodeStrin /* * Parse individual RRULE - * + * * On return - - * + * * month calculated by BYMONTH-1, or -1 when not found * dow day of week in BYDAY, or 0 when not found * wim day of week ordinal number in BYDAY, or 0 when not found @@ -624,7 +626,7 @@ static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOff if (tmp_until > until) { until = tmp_until; } - + // Check if BYMONTH + BYMONTHDAY + BYDAY rule if (tmp_month == -1 || tmp_dayOfWeek == 0 || tmp_daysCount == 0) { goto unsupportedRRule; @@ -1383,7 +1385,7 @@ VTimeZone::parse(UErrorCode& status) { } // Set the deleter to remove TimeZoneRule vectors to avoid memory leaks due to unowned TimeZoneRules. rules->setDeleter(deleteTimeZoneRule); - + dates = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status); if (U_FAILURE(status)) { goto cleanupParse; @@ -1524,7 +1526,7 @@ VTimeZone::parse(UErrorCode& status) { } else { // This is rare case.. just use 1 hour DST savings rawOffset = toOffset - DEF_DSTSAVINGS; - dstSavings = DEF_DSTSAVINGS; + dstSavings = DEF_DSTSAVINGS; } } else { rawOffset = toOffset; @@ -1993,7 +1995,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz, goto cleanupWriteZone; } } - } + } if (!sameRule) { // Reset this DST information dstName = name; @@ -2075,9 +2077,9 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz, isDst = (dst != 0); UnicodeString tzid; basictz.getID(tzid); - getDefaultTZName(tzid, isDst, name); + getDefaultTZName(tzid, isDst, name); writeZonePropsByTime(w, isDst, name, - offset, offset, DEF_TZSTARTTIME - offset, FALSE, status); + offset, offset, DEF_TZSTARTTIME - offset, FALSE, status); if (U_FAILURE(status)) { goto cleanupWriteZone; } @@ -2165,7 +2167,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz, goto cleanupWriteZone; } } - } + } } writeFooter(w, status); @@ -2356,7 +2358,7 @@ VTimeZone::writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const Uni // Check if all days are in the same month int32_t startDay = dayOfMonth; int32_t currentMonthDays = 7; - + if (dayOfMonth <= 0) { // The start day is in previous month int32_t prevMonthDays = 1 - dayOfMonth; @@ -2382,7 +2384,7 @@ VTimeZone::writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const Uni currentMonthDays -= nextMonthDays; int32_t nextMonth = (month + 1) > 11 ? 0 : month + 1; - + writeZonePropsByDOW_GEQ_DOM_sub(writer, nextMonth, 1, dayOfWeek, nextMonthDays, MAX_MILLIS /* Do not use UNTIL */, fromOffset, status); if (U_FAILURE(status)) { @@ -2569,12 +2571,12 @@ VTimeZone::beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& z writer.write(COLON); writer.write(zonename); writer.write(ICAL_NEWLINE); - + // DTSTART writer.write(ICAL_DTSTART); writer.write(COLON); writer.write(getDateTimeString(startTime + fromOffset, dstr)); - writer.write(ICAL_NEWLINE); + writer.write(ICAL_NEWLINE); } /* diff --git a/deps/icu-small/source/i18n/vzone.cpp b/deps/icu-small/source/i18n/vzone.cpp index cd75802a179074..8d2bef72a1558f 100644 --- a/deps/icu-small/source/i18n/vzone.cpp +++ b/deps/icu-small/source/i18n/vzone.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2011, International Business Machines Corporation and @@ -6,7 +8,7 @@ */ /** - * \file + * \file * \brief C API: VTimeZone classes */ @@ -28,7 +30,7 @@ vzone_openID(const UChar* ID, int32_t idLength){ UnicodeString s(idLength==-1, ID, idLength); return (VZone*) (VTimeZone::createVTimeZoneByID(s)); } - + U_CAPI VZone* U_EXPORT2 vzone_openData(const UChar* vtzdata, int32_t vtzdataLength, UErrorCode& status) { UnicodeString s(vtzdataLength==-1, vtzdata, vtzdataLength); @@ -57,7 +59,7 @@ vzone_getTZURL(VZone* zone, UChar* & url, int32_t & urlLength) { urlLength = s.length(); memcpy(url,s.getBuffer(),urlLength); - + return b; } diff --git a/deps/icu-small/source/i18n/vzone.h b/deps/icu-small/source/i18n/vzone.h index f89a5619a67fa8..fc5df4d54c442a 100644 --- a/deps/icu-small/source/i18n/vzone.h +++ b/deps/icu-small/source/i18n/vzone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and @@ -84,7 +86,7 @@ vzone_equals(const VZone* zone1, const VZone* zone2); /** * Gets the RFC2445 TZURL property value. When a vzone instance was - * created from VTIMEZONE data, the initial value is set by the TZURL + * created from VTIMEZONE data, the initial value is set by the TZURL * property value in the data. Otherwise, the initial value is not set. * @param zone, the vzone to use * @param url Receives the RFC2445 TZURL property value. @@ -105,8 +107,8 @@ vzone_setTZURL(VZone* zone, UChar* url, int32_t urlLength); /** * Gets the RFC2445 LAST-MODIFIED property value. When a vzone instance - * was created from VTIMEZONE data, the initial value is set by the - * LAST-MODIFIED property value in the data. Otherwise, the initial value + * was created from VTIMEZONE data, the initial value is set by the + * LAST-MODIFIED property value in the data. Otherwise, the initial value * is not set. * @param zone, the vzone to use * @param lastModified Receives the last modified date. @@ -321,7 +323,7 @@ vzone_getPreviousTransition(VZone* zone, UDate base, UBool inclusive, ZTrans* re * Returns the number of TimeZoneRules which represents time transitions, * for this time zone, that is, all TimeZoneRules for this time zone except * InitialTimeZoneRule. The return value range is 0 or any positive value. - * @param zone, the vzone to use + * @param zone, the vzone to use * @param status Receives error status code. * @return The number of TimeZoneRules representing time transitions. */ diff --git a/deps/icu-small/source/i18n/windtfmt.cpp b/deps/icu-small/source/i18n/windtfmt.cpp index 8625ea7e3efa4e..10243a702b7b44 100644 --- a/deps/icu-small/source/i18n/windtfmt.cpp +++ b/deps/icu-small/source/i18n/windtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -230,8 +232,8 @@ static const DWORD dfFlags[] = {DATE_LONGDATE, DATE_LONGDATE, DATE_SHORTDATE, DA void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const { int result; - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE); @@ -239,12 +241,12 @@ void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength); } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((const UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); @@ -256,8 +258,8 @@ static const DWORD tfFlags[] = {0, 0, 0, TIME_NOSECONDS}; void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) const { int result; - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE); @@ -265,12 +267,12 @@ void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength); } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((const UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); @@ -313,3 +315,4 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif // U_PLATFORM_HAS_WIN32_API + diff --git a/deps/icu-small/source/i18n/windtfmt.h b/deps/icu-small/source/i18n/windtfmt.h index a286ced2e3ddad..58ac71ba4dd7f2 100644 --- a/deps/icu-small/source/i18n/windtfmt.h +++ b/deps/icu-small/source/i18n/windtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2015, International Business Machines @@ -25,7 +27,7 @@ #include "unicode/locid.h" /** - * \file + * \file * \brief C++ API: Format dates using Windows API. */ diff --git a/deps/icu-small/source/i18n/winnmfmt.cpp b/deps/icu-small/source/i18n/winnmfmt.cpp index 23610732a2e94a..d7e98723bb271d 100644 --- a/deps/icu-small/source/i18n/winnmfmt.cpp +++ b/deps/icu-small/source/i18n/winnmfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -86,10 +88,10 @@ static void getNumberFormat(NUMBERFMTW *fmt, int32_t lcid) GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10); fmt->Grouping = getGrouping(buf); - fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SDECIMAL, fmt->lpDecimalSep, 6); - fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); @@ -113,16 +115,16 @@ static void getCurrencyFormat(CURRENCYFMTW *fmt, int32_t lcid) GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf)); fmt->Grouping = getGrouping(buf); - fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP, fmt->lpDecimalSep, 6); - fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT)); - fmt->lpCurrencySymbol = NEW_ARRAY(UChar, 8); + fmt->lpCurrencySymbol = NEW_ARRAY(wchar_t, 8); GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8); } @@ -290,8 +292,8 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen } } - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; FormatInfo formatInfo; formatInfo = *fFormatInfo; @@ -314,7 +316,7 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen if (lastError == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); buffer[0] = 0x0000; GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, newLength); } @@ -334,14 +336,14 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); buffer[0] = 0x0000; GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, newLength); } } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); diff --git a/deps/icu-small/source/i18n/winnmfmt.h b/deps/icu-small/source/i18n/winnmfmt.h index a0b34dfc9fe8d2..dfc32dd78c6bd3 100644 --- a/deps/icu-small/source/i18n/winnmfmt.h +++ b/deps/icu-small/source/i18n/winnmfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2015, International Business Machines @@ -25,7 +27,7 @@ #if !UCONFIG_NO_FORMATTING /** - * \file + * \file * \brief C++ API: Format numbers using Windows API. */ diff --git a/deps/icu-small/source/i18n/wintzimpl.cpp b/deps/icu-small/source/i18n/wintzimpl.cpp index 921ecf78d2323b..30b9c492fb8d73 100644 --- a/deps/icu-small/source/i18n/wintzimpl.cpp +++ b/deps/icu-small/source/i18n/wintzimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2009-2013, International Business Machines @@ -11,7 +13,7 @@ #include "unicode/utypes.h" -#if U_PLATFORM_HAS_WIN32_API && !UCONFIG_NO_FORMATTING +#if U_PLATFORM_HAS_WIN32_API && !UCONFIG_NO_FORMATTING #include "wintzimpl.h" @@ -47,7 +49,7 @@ static UBool getSystemTimeInformation(TimeZone *tz, SYSTEMTIME &daylightDate, SY standardBias = 0; daylightBias = 0; // Do not use DST. Set 0 to all stadardDate/daylightDate fields - standardDate.wYear = standardDate.wMonth = standardDate.wDayOfWeek = standardDate.wDay = + standardDate.wYear = standardDate.wMonth = standardDate.wDayOfWeek = standardDate.wDay = standardDate.wHour = standardDate.wMinute = standardDate.wSecond = standardDate.wMilliseconds = 0; daylightDate.wYear = daylightDate.wMonth = daylightDate.wDayOfWeek = daylightDate.wDay = daylightDate.wHour = daylightDate.wMinute = daylightDate.wSecond = daylightDate.wMilliseconds = 0; @@ -117,7 +119,7 @@ static UBool getWindowsTimeZoneInfo(TIME_ZONE_INFORMATION *zoneInfo, const UChar UBool result = FALSE; UnicodeString id = UnicodeString(icuid, length); TimeZone *tz = TimeZone::createTimeZone(id); - + if (tz != NULL) { int32_t bias; int32_t daylightBias; @@ -141,7 +143,7 @@ static UBool getWindowsTimeZoneInfo(TIME_ZONE_INFORMATION *zoneInfo, const UChar } /* - * Given the timezone icuid, fill in zoneInfo by calling auxillary functions that creates a timezone and extract the + * Given the timezone icuid, fill in zoneInfo by calling auxillary functions that creates a timezone and extract the * information to put into zoneInfo. This includes bias and standard time date and daylight saving date. */ U_CAPI UBool U_EXPORT2 diff --git a/deps/icu-small/source/i18n/wintzimpl.h b/deps/icu-small/source/i18n/wintzimpl.h index 3ba4174a06f37c..c955b8cea7e0fa 100644 --- a/deps/icu-small/source/i18n/wintzimpl.h +++ b/deps/icu-small/source/i18n/wintzimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2008-2011, International Business Machines @@ -16,7 +18,7 @@ #if U_PLATFORM_HAS_WIN32_API /** - * \file + * \file * \brief C API: Utilities for dealing w/ Windows time zones. */ U_CDECL_BEGIN diff --git a/deps/icu-small/source/i18n/zonemeta.cpp b/deps/icu-small/source/i18n/zonemeta.cpp index e2c75e5577b503..fdf333c3712aef 100644 --- a/deps/icu-small/source/i18n/zonemeta.cpp +++ b/deps/icu-small/source/i18n/zonemeta.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/zonemeta.h b/deps/icu-small/source/i18n/zonemeta.h index ac65e82acbc69c..84be5553ea797e 100644 --- a/deps/icu-small/source/i18n/zonemeta.h +++ b/deps/icu-small/source/i18n/zonemeta.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/zrule.cpp b/deps/icu-small/source/i18n/zrule.cpp index a7573e5fb5b61d..2d7b36c42bb8ad 100644 --- a/deps/icu-small/source/i18n/zrule.cpp +++ b/deps/icu-small/source/i18n/zrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2011, International Business Machines Corporation and @@ -6,7 +8,7 @@ */ /** - * \file + * \file * \brief C API: Time zone rule classes */ @@ -113,25 +115,25 @@ izrule_isEquivalentTo(IZRule* rule1, IZRule* rule2) { } U_CAPI UBool U_EXPORT2 -izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, +izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) { return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result); } U_CAPI UBool U_EXPORT2 -izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, +izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) { return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result); } U_CAPI UBool U_EXPORT2 -izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, +izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate& result) { return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getNextStart(base, prevRawOffset, prevDSTSavings, inclusive, result); } U_CAPI UBool U_EXPORT2 -izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, +izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate& result) { return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getPreviousStart(base, prevRawOffset, prevDSTSavings, inclusive, result); } diff --git a/deps/icu-small/source/i18n/zrule.h b/deps/icu-small/source/i18n/zrule.h index cfc2b71542cdae..9b694aff0617b9 100644 --- a/deps/icu-small/source/i18n/zrule.h +++ b/deps/icu-small/source/i18n/zrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and @@ -8,7 +10,7 @@ #define __ZRULE_H /** - * \file + * \file * \brief C API: Time zone rule classes */ @@ -193,12 +195,12 @@ izrule_isEquivalentTo(IZRule* rule1, IZRule* rule2); * "result" is unchanged. */ U_CAPI UBool U_EXPORT2 -izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, +izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result); /** * Gets the final time when this rule takes effect. - * @param rule The IZrule to use + * @param rule The IZrule to use * @param prevRawOffset The standard time offset from UTC before this rule * takes effect in milliseconds. * @param prevDSTSavings The amount of daylight saving offset from the @@ -208,7 +210,7 @@ izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings * "result" is unchanged. */ U_CAPI UBool U_EXPORT2 -izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, +izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result); /** @@ -226,7 +228,7 @@ izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings * "result" is unchanged. */ U_CAPI UBool U_EXPORT2 -izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, +izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate& result); /** @@ -244,7 +246,7 @@ izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, * "result" is unchanged. */ U_CAPI UBool U_EXPORT2 -izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, +izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate& result); diff --git a/deps/icu-small/source/i18n/ztrans.cpp b/deps/icu-small/source/i18n/ztrans.cpp index e33e8511bceddc..92fd781224c8c8 100644 --- a/deps/icu-small/source/i18n/ztrans.cpp +++ b/deps/icu-small/source/i18n/ztrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2010, International Business Machines Corporation and * @@ -6,7 +8,7 @@ */ /** - * \file + * \file * \brief C API: Time zone transition classes */ diff --git a/deps/icu-small/source/i18n/ztrans.h b/deps/icu-small/source/i18n/ztrans.h index 6697dcd5eb1c2f..2ddf7bacb565fa 100644 --- a/deps/icu-small/source/i18n/ztrans.h +++ b/deps/icu-small/source/i18n/ztrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and @@ -8,7 +10,7 @@ #define __ZTRANS_H /** - * \file + * \file * \brief C API: Time zone transition classes */ @@ -32,7 +34,7 @@ typedef struct ZTrans ZTrans; /** * Constructs a time zone transition with the time and the rules before/after * the transition. - * + * * @param time The time of transition in milliseconds since the base time. * @param from The time zone rule used before the transition. * @param to The time zone rule used after the transition. diff --git a/deps/icu-small/source/io/io.rc b/deps/icu-small/source/io/io.rc index daa8da94b9cc6e..b3c750b5f006c2 100644 --- a/deps/icu-small/source/io/io.rc +++ b/deps/icu-small/source/io/io.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // @@ -16,7 +18,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// +// LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #pragma code_page(1252) @@ -27,17 +29,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "../../common/msvcres.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "#include \0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "\r\n" "\0" @@ -105,3 +107,4 @@ END ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED + diff --git a/deps/icu-small/source/io/locbund.cpp b/deps/icu-small/source/io/locbund.cpp index e032d00c8a3bf4..298452859f73da 100644 --- a/deps/icu-small/source/io/locbund.cpp +++ b/deps/icu-small/source/io/locbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -105,18 +107,18 @@ u_locbund_clone(const ULocaleBundle *bundle) ULocaleBundle *result = (ULocaleBundle*)uprv_malloc(sizeof(ULocaleBundle)); UErrorCode status = U_ZERO_ERROR; int32_t styleIdx; - + if(result == 0) return 0; - + result->fLocale = (char*) uprv_malloc(strlen(bundle->fLocale) + 1); if(result->fLocale == 0) { uprv_free(result); return 0; } - + strcpy(result->fLocale, bundle->fLocale ); - + for (styleIdx = 0; styleIdx < ULOCALEBUNDLE_NUMBERFORMAT_COUNT; styleIdx++) { status = U_ZERO_ERROR; if (result->fNumberFormat[styleIdx]) { @@ -133,7 +135,7 @@ u_locbund_clone(const ULocaleBundle *bundle) udat_clone(bundle->fDateFormat, &status)); result->fTimeFormat = (bundle->fTimeFormat == 0 ? 0 : udat_clone(bundle->fTimeFormat, &status)); - + return result; }*/ @@ -143,13 +145,13 @@ u_locbund_close(ULocaleBundle *bundle) int32_t styleIdx; uprv_free(bundle->fLocale); - + for (styleIdx = 0; styleIdx < ULOCALEBUNDLE_NUMBERFORMAT_COUNT; styleIdx++) { if (bundle->fNumberFormat[styleIdx]) { unum_close(bundle->fNumberFormat[styleIdx]); } } - + uprv_memset(bundle, 0, sizeof(ULocaleBundle)); /* uprv_free(bundle);*/ } diff --git a/deps/icu-small/source/io/locbund.h b/deps/icu-small/source/io/locbund.h index 1eac6227b1d5eb..b9e19484b654d2 100644 --- a/deps/icu-small/source/io/locbund.h +++ b/deps/icu-small/source/io/locbund.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/io/sprintf.c b/deps/icu-small/source/io/sprintf.c index 251faca5c3cb41..ff143deb28874f 100644 --- a/deps/icu-small/source/io/sprintf.c +++ b/deps/icu-small/source/io/sprintf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -62,7 +64,7 @@ u_sprintf_pad_and_justify(void *context, if(info->fWidth != -1 && resultLen < info->fWidth) { int32_t paddingLeft = info->fWidth - resultLen; int32_t outputPos = output->len - output->available; - + if (paddingLeft + resultLen > output->available) { paddingLeft = output->available - resultLen; if (paddingLeft < 0) { @@ -89,9 +91,9 @@ u_sprintf_pad_and_justify(void *context, else { written = u_sprintf_write(output, result, resultLen); } - + if (written >= 0 && lengthOfResult > written) { - return lengthOfResult; + return lengthOfResult; } return written; @@ -179,7 +181,7 @@ u_vsnprintf(UChar *buffer, int32_t size = (int32_t)strlen(patternSpecification) + 1; /* convert from the default codepage to Unicode */ - if (size >= MAX_UCHAR_BUFFER_SIZE(patBuffer)) { + if (size >= (int32_t)MAX_UCHAR_BUFFER_SIZE(patBuffer)) { pattern = (UChar *)uprv_malloc(size * sizeof(UChar)); if(pattern == 0) { return 0; @@ -201,13 +203,13 @@ u_vsnprintf(UChar *buffer, return written; } -U_CAPI int32_t U_EXPORT2 -u_vsprintf_u(UChar *buffer, - const UChar *patternSpecification, - va_list ap) -{ - return u_vsnprintf_u(buffer, INT32_MAX, patternSpecification, ap); -} +U_CAPI int32_t U_EXPORT2 +u_vsprintf_u(UChar *buffer, + const UChar *patternSpecification, + va_list ap) +{ + return u_vsnprintf_u(buffer, INT32_MAX, patternSpecification, ap); +} static const u_printf_stream_handler g_sprintf_stream_handler = { u_sprintf_write, @@ -239,7 +241,7 @@ u_vsnprintf_u(UChar *buffer, /* parse and print the whole format string */ result = u_printf_parse(&g_sprintf_stream_handler, patternSpecification, &outStr, &outStr, &outStr.fBundle, &written, ap); - + /* Terminate the buffer, if there's room. */ if (outStr.available > 0) { buffer[outStr.len - outStr.available] = 0x0000; @@ -248,12 +250,13 @@ u_vsnprintf_u(UChar *buffer, /* Release the cloned bundle, if we cloned it. */ u_locbund_close(&outStr.fBundle); - /* parsing error */ + /* parsing error */ if (result < 0) { - return result; + return result; } /* return # of UChars written */ return written; } #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/io/sscanf.c b/deps/icu-small/source/io/sscanf.c index c9579e8b5627de..31ad8965fc2fae 100644 --- a/deps/icu-small/source/io/sscanf.c +++ b/deps/icu-small/source/io/sscanf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -71,7 +73,7 @@ u_vsscanf(const UChar *buffer, int32_t size = (int32_t)uprv_strlen(patternSpecification) + 1; /* convert from the default codepage to Unicode */ - if (size >= MAX_UCHAR_BUFFER_SIZE(patBuffer)) { + if (size >= (int32_t)MAX_UCHAR_BUFFER_SIZE(patBuffer)) { pattern = (UChar *)uprv_malloc(size * sizeof(UChar)); if(pattern == 0) { return 0; @@ -125,3 +127,4 @@ u_vsscanf_u(const UChar *buffer, } #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/io/ucln_io.cpp b/deps/icu-small/source/io/ucln_io.cpp index 9469f5d58bb959..21a0baf58db07c 100644 --- a/deps/icu-small/source/io/ucln_io.cpp +++ b/deps/icu-small/source/io/ucln_io.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -33,7 +35,7 @@ static const char copyright[] = U_COPYRIGHT_STRING; static cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT]; -static UBool io_cleanup(void) +static UBool U_CALLCONV io_cleanup(void) { int32_t libType = UCLN_IO_START; @@ -66,3 +68,4 @@ void ucln_io_registerCleanup(ECleanupIOType type, ucln_registerAutomaticCleanup(); #endif } + diff --git a/deps/icu-small/source/io/ucln_io.h b/deps/icu-small/source/io/ucln_io.h index 105eca8b136701..97d06a12ffd18c 100644 --- a/deps/icu-small/source/io/ucln_io.h +++ b/deps/icu-small/source/io/ucln_io.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * diff --git a/deps/icu-small/source/io/ufile.c b/deps/icu-small/source/io/ufile.c index d20f8079b1e314..87ed3f1e9693c4 100644 --- a/deps/icu-small/source/io/ufile.c +++ b/deps/icu-small/source/io/ufile.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -206,7 +208,7 @@ u_fstropen(UChar *stringBuf, result = (UFILE*) uprv_malloc(sizeof(UFILE)); /* Null pointer test */ if (result == NULL) { - return NULL; /* Just get out. */ + return NULL; /* Just get out. */ } uprv_memset(result, 0, sizeof(UFILE)); result->str.fBuffer = stringBuf; diff --git a/deps/icu-small/source/io/ufile.h b/deps/icu-small/source/io/ufile.h index e0c343d6aa5fa7..3a1a22335ec5b4 100644 --- a/deps/icu-small/source/io/ufile.h +++ b/deps/icu-small/source/io/ufile.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -79,8 +81,8 @@ struct UFILE { * Like u_file_write but takes a flush parameter */ U_CFUNC int32_t U_EXPORT2 -u_file_write_flush( const UChar *chars, - int32_t count, +u_file_write_flush( const UChar *chars, + int32_t count, UFILE *f, UBool flushIO, UBool flushTranslit); @@ -114,21 +116,21 @@ ufile_getch32(UFILE *f, UChar32 *ch); * Close out the transliterator and flush any data therein. * @param f flu */ -void +void ufile_close_translit(UFILE *f); /** - * Flush the buffer in the transliterator + * Flush the buffer in the transliterator * @param f UFile to flush */ -void +void ufile_flush_translit(UFILE *f); /** * Flush the IO buffer * @param f UFile to flush */ -void +void ufile_flush_io(UFILE *f); diff --git a/deps/icu-small/source/io/ufmt_cmn.c b/deps/icu-small/source/io/ufmt_cmn.c index a9f533ce735fbb..e24d0d7a039c01 100644 --- a/deps/icu-small/source/io/ufmt_cmn.c +++ b/deps/icu-small/source/io/ufmt_cmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -62,10 +64,10 @@ ufmt_isdigit(UChar c, #define TO_UC_DIGIT(a) a <= 9 ? (DIGIT_0 + a) : (0x0037 + a) #define TO_LC_DIGIT(a) a <= 9 ? (DIGIT_0 + a) : (0x0057 + a) -void -ufmt_64tou(UChar *buffer, +void +ufmt_64tou(UChar *buffer, int32_t *len, - uint64_t value, + uint64_t value, uint8_t radix, UBool uselower, int32_t minDigits) @@ -73,11 +75,11 @@ ufmt_64tou(UChar *buffer, int32_t length = 0; uint32_t digit; UChar *left, *right, temp; - + do { digit = (uint32_t)(value % radix); value = value / radix; - buffer[length++] = (UChar)(uselower ? TO_LC_DIGIT(digit) + buffer[length++] = (UChar)(uselower ? TO_LC_DIGIT(digit) : TO_UC_DIGIT(digit)); } while(value); @@ -95,14 +97,14 @@ ufmt_64tou(UChar *buffer, *left++ = *right; *right = temp; } - + *len = length; } -void -ufmt_ptou(UChar *buffer, +void +ufmt_ptou(UChar *buffer, int32_t *len, - void *value, + void *value, UBool uselower) { int32_t i; @@ -132,31 +134,31 @@ ufmt_ptou(UChar *buffer, } int64_t -ufmt_uto64(const UChar *buffer, +ufmt_uto64(const UChar *buffer, int32_t *len, int8_t radix) { const UChar *limit; int32_t count; int64_t result; - - + + /* intialize parameters */ limit = buffer + *len; count = 0; result = 0; - + /* iterate through buffer */ while(ufmt_isdigit(*buffer, radix) && buffer < limit) { - + /* read the next digit */ result *= radix; result += ufmt_digitvalue(*buffer++); - + /* increment our count */ ++count; } - + *len = count; return result; } @@ -172,7 +174,7 @@ ufmt_utop(const UChar *buffer, void *ptr; uint8_t bytes[sizeof(void*)]; } result; - + /* intialize variables */ count = 0; offset = 0; @@ -194,7 +196,7 @@ ufmt_utop(const UChar *buffer, if (count - offset > (int32_t)(sizeof(void*)*NIBBLE_PER_BYTE)) { offset = count - (int32_t)(sizeof(void*)*NIBBLE_PER_BYTE); } - + /* Initialize the direction of the input */ #if U_IS_BIG_ENDIAN incVal = -1; @@ -228,28 +230,28 @@ ufmt_defaultCPToUnicode(const char *s, int32_t sSize, UChar *alias; UErrorCode status = U_ZERO_ERROR; UConverter *defConverter = u_getDefaultConverter(&status); - + if(U_FAILURE(status) || defConverter == 0) return 0; if(sSize <= 0) { sSize = uprv_strlen(s) + 1; } - + /* perform the conversion in one swoop */ if(target != 0) { - + alias = target; - ucnv_toUnicode(defConverter, &alias, alias + tSize, &s, s + sSize - 1, + ucnv_toUnicode(defConverter, &alias, alias + tSize, &s, s + sSize - 1, NULL, TRUE, &status); - - + + /* add the null terminator */ *alias = 0x0000; } - + u_releaseDefaultConverter(defConverter); - + return target; } diff --git a/deps/icu-small/source/io/ufmt_cmn.h b/deps/icu-small/source/io/ufmt_cmn.h index b0852de5f8a62c..97079ed9d28184 100644 --- a/deps/icu-small/source/io/ufmt_cmn.h +++ b/deps/icu-small/source/io/ufmt_cmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -27,7 +29,7 @@ #define MAX_UCHAR_BUFFER_SIZE(buffer) (sizeof(buffer)/(U16_MAX_LENGTH*sizeof(UChar))) #define MAX_UCHAR_BUFFER_NEEDED(strLen) ((strLen+1)*U16_MAX_LENGTH*sizeof(UChar)) -/** +/** * Enum representing the possible argument types for uprintf/uscanf */ typedef enum ufmt_type_info { @@ -97,10 +99,10 @@ ufmt_isdigit(UChar c, * @param minDigits The minimum number of digits for for the formatted number, * which will be padded with zeroes. -1 means do not pad. */ -void -ufmt_64tou(UChar *buffer, +void +ufmt_64tou(UChar *buffer, int32_t *len, - uint64_t value, + uint64_t value, uint8_t radix, UBool uselower, int32_t minDigits); @@ -110,10 +112,10 @@ ufmt_64tou(UChar *buffer, * This functions avoids size constraints of 64-bit types. * Pointers can be at 32-128 bits in size. */ -void -ufmt_ptou(UChar *buffer, +void +ufmt_ptou(UChar *buffer, int32_t *len, - void *value, + void *value, UBool uselower); /** @@ -125,7 +127,7 @@ ufmt_ptou(UChar *buffer, * @return The numeric value. */ int64_t -ufmt_uto64(const UChar *buffer, +ufmt_uto64(const UChar *buffer, int32_t *len, int8_t radix); @@ -147,7 +149,7 @@ ufmt_utop(const UChar *buffer, * @param sSize The size of s to convert. * @param target The buffer to convert to. * @param tSize The size of target - * @return A pointer to a newly allocated converted version of s, or 0 + * @return A pointer to a newly allocated converted version of s, or 0 * on error. */ UChar* @@ -157,3 +159,4 @@ ufmt_defaultCPToUnicode(const char *s, int32_t sSize, #endif + diff --git a/deps/icu-small/source/io/unicode/ustdio.h b/deps/icu-small/source/io/unicode/ustdio.h index ec2a35fef4fc4a..8f38398cdb94f2 100644 --- a/deps/icu-small/source/io/unicode/ustdio.h +++ b/deps/icu-small/source/io/unicode/ustdio.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -119,10 +121,10 @@ * * General printf format:
    * %[format modifier][width][.precision][type modifier][format] - * + * * General scanf format:
    * %[*][format modifier][width][type modifier][format] - * + * @@ -170,9 +172,9 @@ Format modifiers - - @@ -214,10 +216,10 @@ typedef struct UFILE UFILE; * @see u_fsettransliterator * @stable ICU 3.0 */ -typedef enum { +typedef enum { U_READ = 1, - U_WRITE = 2, - U_READWRITE =3 /* == (U_READ | U_WRITE) */ + U_WRITE = 2, + U_READWRITE =3 /* == (U_READ | U_WRITE) */ } UFileDirection; /** @@ -228,8 +230,8 @@ typedef enum { * specified by that UFILE's codepage. * @param filename The name of the file to open. * @param perm The read/write permission for the UFILE; one of "r", "w", "rw" - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will + * @param locale The locale whose conventions will be used to format + * and parse output. If this parameter is NULL, the default locale will * be used. * @param codepage The codepage in which data will be written to and * read from the file. If this paramter is NULL the system default codepage @@ -272,8 +274,8 @@ u_fopen_u(const UChar *filename, * ownership and responsibility for the FILE* stream, use the * function u_fadopt. * @param f The FILE* to which this UFILE will attach and use. - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will + * @param locale The locale whose conventions will be used to format + * and parse output. If this parameter is NULL, the default locale will * be used. * @param codepage The codepage in which data will be written to and * read from the file. If this paramter is NULL, data will be written and @@ -316,8 +318,8 @@ u_fadopt(FILE *f, * returned UFILE. * @param stringBuf The string used for reading or writing. * @param capacity The number of code units available for use in stringBuf - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will + * @param locale The locale whose conventions will be used to format + * and parse output. If this parameter is NULL, the default locale will * be used. * @return A new UFILE, or NULL if an error occurred. * @stable ICU 3.0 @@ -411,7 +413,7 @@ u_fgetlocale(UFILE *file); /** * Set the locale whose conventions will be used to format and parse output. - * @param locale The locale whose conventions will be used to format + * @param locale The locale whose conventions will be used to format * and parse output. * @param file The UFILE to query. * @return NULL if successful, otherwise a negative number. @@ -425,7 +427,7 @@ u_fsetlocale(UFILE *file, /** * Get the codepage in which data is written to and read from the UFILE. - * This is the same codepage passed in the preceding call to + * This is the same codepage passed in the preceding call to * u_fsetcodepage or u_fopen. * @param file The UFILE to query. * @return The codepage in which data is written to and read from the UFILE, @@ -441,9 +443,9 @@ u_fgetcodepage(UFILE *file); * before it is written to the underlying FILE*. It it generally a bad idea to * mix codepages within a file. This should only be called right * after opening the UFile, or after calling u_frewind. - * @param codepage The codepage in which data will be written to + * @param codepage The codepage in which data will be written to * and read from the file. For example "latin-1" or "ibm-943". - * A value of NULL means the default codepage for the UFILE's current + * A value of NULL means the default codepage for the UFILE's current * locale will be used. * @param file The UFILE to set. * @return 0 if successful, otherwise a negative number. @@ -601,8 +603,8 @@ u_fputc(UChar32 uc, * @stable ICU 3.0 */ U_STABLE int32_t U_EXPORT2 -u_file_write(const UChar *ustring, - int32_t count, +u_file_write(const UChar *ustring, + int32_t count, UFILE *f); @@ -742,15 +744,15 @@ u_fungetc(UChar32 c, * @stable ICU 3.0 */ U_STABLE int32_t U_EXPORT2 -u_file_read(UChar *chars, - int32_t count, +u_file_read(UChar *chars, + int32_t count, UFILE *f); #if !UCONFIG_NO_TRANSLITERATION /** * Set a transliterator on the UFILE. The transliterator will be owned by the - * UFILE. + * UFILE. * @param file The UFILE to set transliteration on * @param adopt The UTransliterator to set. Can be NULL, which will * mean that no transliteration is used. @@ -1012,3 +1014,5 @@ u_vsscanf_u(const UChar *buffer, #endif #endif #endif + + diff --git a/deps/icu-small/source/io/unicode/ustream.h b/deps/icu-small/source/io/unicode/ustream.h index 41ccf5ae036c67..ab52f6a28a0728 100644 --- a/deps/icu-small/source/io/unicode/ustream.h +++ b/deps/icu-small/source/io/unicode/ustream.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 International Business Machines diff --git a/deps/icu-small/source/io/uprintf.cpp b/deps/icu-small/source/io/uprintf.cpp index 4453d3a2da96f0..b12ef0efed7202 100644 --- a/deps/icu-small/source/io/uprintf.cpp +++ b/deps/icu-small/source/io/uprintf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -107,7 +109,7 @@ u_printf_pad_and_justify(void *context, return written; } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_fprintf( UFILE *f, const char *patternSpecification, ... ) @@ -134,7 +136,7 @@ u_printf(const char *patternSpecification, return count; } -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_fprintf_u( UFILE *f, const UChar *patternSpecification, ... ) @@ -214,3 +216,4 @@ u_vfprintf_u( UFILE *f, } #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/io/uprintf.h b/deps/icu-small/source/io/uprintf.h index 4b538451023274..0a07e6b7d6a0c3 100644 --- a/deps/icu-small/source/io/uprintf.h +++ b/deps/icu-small/source/io/uprintf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uprntf_p.c b/deps/icu-small/source/io/uprntf_p.c index a51b67108f73b4..9890b29b964b21 100644 --- a/deps/icu-small/source/io/uprntf_p.c +++ b/deps/icu-small/source/io/uprntf_p.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -72,8 +74,8 @@ #define UFMT_EMPTY {ufmt_empty, NULL} /** - * A u_printf handler function. - * A u_printf handler is responsible for handling a single u_printf + * A u_printf handler function. + * A u_printf handler is responsible for handling a single u_printf * format specification, for example 'd' or 's'. * @param stream The UFILE to which to write output. * @param info A pointer to a u_printf_spec_info struct containing @@ -1143,15 +1145,15 @@ static ufmt_args* parseArguments(const UChar *alias, va_list ap, UErrorCode *sta pos--; /* skip over everything except for the type */ - while (ISMOD(*alias) || ISFLAG(*alias) || ISDIGIT(*alias) || + while (ISMOD(*alias) || ISFLAG(*alias) || ISDIGIT(*alias) || *alias == SPEC_ASTERISK || *alias == SPEC_PERIOD || *alias == SPEC_DOLLARSIGN) { islonglong[pos] = FALSE; if (ISMOD(*alias)) { alias++; if (*alias == MOD_LOWERL) { islonglong[pos] = TRUE; - } - } + } + } alias++; } type = *alias; @@ -1235,7 +1237,7 @@ u_printf_parse(const u_printf_stream_handler *streamHandler, return -1; } } - + /* iterate through the pattern */ while(!locStringContext || locStringContext->available >= 0) { diff --git a/deps/icu-small/source/io/uscanf.c b/deps/icu-small/source/io/uscanf.c index 2919305f9e570a..34368dade45480 100644 --- a/deps/icu-small/source/io/uscanf.c +++ b/deps/icu-small/source/io/uscanf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -103,3 +105,4 @@ u_vfscanf_u(UFILE *f, } #endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/deps/icu-small/source/io/uscanf.h b/deps/icu-small/source/io/uscanf.h index 96b5c4da44e0eb..1140eee1c36f89 100644 --- a/deps/icu-small/source/io/uscanf.h +++ b/deps/icu-small/source/io/uscanf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -33,3 +35,4 @@ u_scanf_parse(UFILE *f, #endif /* #if !UCONFIG_NO_FORMATTING */ #endif + diff --git a/deps/icu-small/source/io/uscanf_p.c b/deps/icu-small/source/io/uscanf_p.c index 4e874f24f1f4ad..ded984cef2df4f 100644 --- a/deps/icu-small/source/io/uscanf_p.c +++ b/deps/icu-small/source/io/uscanf_p.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -278,8 +280,8 @@ u_scanf_parse_spec (const UChar *fmt, #define UFMT_EMPTY {ufmt_empty, NULL} /** - * A u_scanf handler function. - * A u_scanf handler is responsible for handling a single u_scanf + * A u_scanf handler function. + * A u_scanf handler is responsible for handling a single u_scanf * format specification, for example 'd' or 's'. * @param stream The UFILE to which to write output. * @param info A pointer to a u_scanf_spec_info struct containing @@ -370,7 +372,7 @@ u_scanf_skip_leading_positive_sign(UFILE *input, return count; } -static int32_t +static int32_t u_scanf_simple_percent_handler(UFILE *input, u_scanf_spec_info *info, ufmt_args *args, @@ -825,7 +827,7 @@ u_scanf_string_handler(UFILE *input, if(U_FAILURE(status)) return -1; - while( (info->fWidth == -1 || count < info->fWidth) + while( (info->fWidth == -1 || count < info->fWidth) && (isNotEOF = ufile_getch(input, &c)) && (!info->fIsString || (c != info->fPadChar && !u_isWhitespace(c)))) { diff --git a/deps/icu-small/source/io/ustdio.c b/deps/icu-small/source/io/ustdio.c index 20eaf35dcd25c9..1c2225a9423dd3 100644 --- a/deps/icu-small/source/io/ustdio.c +++ b/deps/icu-small/source/io/ustdio.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -168,7 +170,7 @@ static const UChar * u_file_translit(UFILE *f, const UChar *src, int32_t *count, } /* Check for malloc/realloc failure. */ if (f->fTranslit->buffer == NULL) { - return NULL; + return NULL; } f->fTranslit->capacity = newlen; } @@ -314,7 +316,7 @@ u_file_write_flush(const UChar *chars, /* Set up conversion parameters */ UErrorCode status = U_ZERO_ERROR; const UChar *mySource = chars; - const UChar *mySourceBegin; + const UChar *mySourceBegin; const UChar *mySourceEnd; char charBuffer[UFILE_CHARBUFFER_SIZE]; char *myTarget = charBuffer; @@ -361,14 +363,14 @@ u_file_write_flush(const UChar *chars, flushIO, &status); } else { /*weiv: do the invariant conversion */ - int32_t convertChars = (int32_t) (mySourceEnd - mySource); - if (convertChars > UFILE_CHARBUFFER_SIZE) { - convertChars = UFILE_CHARBUFFER_SIZE; - status = U_BUFFER_OVERFLOW_ERROR; - } - u_UCharsToChars(mySource, myTarget, convertChars); - mySource += convertChars; - myTarget += convertChars; + int32_t convertChars = (int32_t) (mySourceEnd - mySource); + if (convertChars > UFILE_CHARBUFFER_SIZE) { + convertChars = UFILE_CHARBUFFER_SIZE; + status = U_BUFFER_OVERFLOW_ERROR; + } + u_UCharsToChars(mySource, myTarget, convertChars); + mySource += convertChars; + myTarget += convertChars; } numConverted = (int32_t)(myTarget - charBuffer); @@ -428,7 +430,7 @@ ufile_fill_uchar_buffer(UFILE *f) /* shift the buffer if it isn't empty */ if(dataSize != 0) { - uprv_memmove(f->fUCBuffer, str->fPos, dataSize * sizeof(UChar)); /* not accessing beyond memory */ + u_memmove(f->fUCBuffer, str->fPos, dataSize); /* not accessing beyond memory */ } diff --git a/deps/icu-small/source/io/ustream.cpp b/deps/icu-small/source/io/ustream.cpp index 25c54eb55532f9..8e0087edbe6b21 100644 --- a/deps/icu-small/source/io/ustream.cpp +++ b/deps/icu-small/source/io/ustream.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2016, International Business Machines diff --git a/deps/icu-small/source/stubdata/stubdata.c b/deps/icu-small/source/stubdata/stubdata.c index 2f1d41191ff091..6493ac4b84421d 100644 --- a/deps/icu-small/source/stubdata/stubdata.c +++ b/deps/icu-small/source/stubdata/stubdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * * Copyright (C) 2001, International Business Machines @@ -30,7 +32,7 @@ typedef struct { uint32_t count, reserved; /* const struct { - const char *const name; + const char *const name; const void *const data; } toc[1]; */ @@ -53,14 +55,14 @@ U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT = { #endif U_CHARSET_FAMILY, - sizeof(UChar), + sizeof(UChar), 0, /* reserved */ { /* data format identifier */ 0x54, 0x6f, 0x43, 0x50}, /* "ToCP" */ {1, 0, 0, 0}, /* format version major, minor, milli, micro */ {0, 0, 0, 0} /* dataVersion */ }, - {0,0,0,0,0,0,0,0}, /* Padding[8] */ + {0,0,0,0,0,0,0,0}, /* Padding[8] */ 0, /* count */ 0, /* Reserved */ { /* TOC structure */ @@ -70,3 +72,5 @@ U_EXPORT const ICU_Data_Header U_ICUDATA_ENTRY_POINT = { /* } */ } }; + + diff --git a/deps/icu-small/source/tools/genccode/genccode.c b/deps/icu-small/source/tools/genccode/genccode.c index 58f5c2e8e0a713..2534820bac33b6 100644 --- a/deps/icu-small/source/tools/genccode/genccode.c +++ b/deps/icu-small/source/tools/genccode/genccode.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/tools/gencmn/gencmn.c b/deps/icu-small/source/tools/gencmn/gencmn.c index a6498ce6a977e0..d328a305215159 100644 --- a/deps/icu-small/source/tools/gencmn/gencmn.c +++ b/deps/icu-small/source/tools/gencmn/gencmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/derb.cpp b/deps/icu-small/source/tools/genrb/derb.cpp index 3d2507bc14e23f..22e275ef353700 100644 --- a/deps/icu-small/source/tools/genrb/derb.cpp +++ b/deps/icu-small/source/tools/genrb/derb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/errmsg.c b/deps/icu-small/source/tools/genrb/errmsg.c index 420c12399e607b..7340f01af2a7d8 100644 --- a/deps/icu-small/source/tools/genrb/errmsg.c +++ b/deps/icu-small/source/tools/genrb/errmsg.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/errmsg.h b/deps/icu-small/source/tools/genrb/errmsg.h index 19dfee8d858792..5026ecf7be54bb 100644 --- a/deps/icu-small/source/tools/genrb/errmsg.h +++ b/deps/icu-small/source/tools/genrb/errmsg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/genrb.cpp b/deps/icu-small/source/tools/genrb/genrb.cpp index 50e9bfd02e97eb..685fb5884e405c 100644 --- a/deps/icu-small/source/tools/genrb/genrb.cpp +++ b/deps/icu-small/source/tools/genrb/genrb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/genrb.h b/deps/icu-small/source/tools/genrb/genrb.h index 9a190f28d37f92..99c604f7809454 100644 --- a/deps/icu-small/source/tools/genrb/genrb.h +++ b/deps/icu-small/source/tools/genrb/genrb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/parse.cpp b/deps/icu-small/source/tools/genrb/parse.cpp index 879db96b024340..81a3bf59771604 100644 --- a/deps/icu-small/source/tools/genrb/parse.cpp +++ b/deps/icu-small/source/tools/genrb/parse.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -535,7 +537,7 @@ parseDependency(ParseState* state, char *tag, uint32_t startline, const struct U uint32_t line; char filename[256] = { '\0' }; char cs[128] = { '\0' }; - + expect(state, TOK_STRING, &tokenValue, NULL, &line, status); if(isVerbose()){ @@ -556,7 +558,7 @@ parseDependency(ParseState* state, char *tag, uint32_t startline, const struct U uprv_strcat(filename, U_FILE_SEP_STRING); } } - + u_UCharsToChars(tokenValue->fChars, cs, tokenValue->fLength); if (U_FAILURE(*status)) @@ -568,7 +570,7 @@ parseDependency(ParseState* state, char *tag, uint32_t startline, const struct U if(isStrict()){ error(line, "The dependency file %s does not exist. Please make sure it exists.\n",filename); }else{ - warning(line, "The dependency file %s does not exist. Please make sure it exists.\n",filename); + warning(line, "The dependency file %s does not exist. Please make sure it exists.\n",filename); } } if(dependencyArray==NULL){ diff --git a/deps/icu-small/source/tools/genrb/parse.h b/deps/icu-small/source/tools/genrb/parse.h index c9ac5521e1bf90..d7341be6dd9fc4 100644 --- a/deps/icu-small/source/tools/genrb/parse.h +++ b/deps/icu-small/source/tools/genrb/parse.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/prscmnts.cpp b/deps/icu-small/source/tools/genrb/prscmnts.cpp index d9c690ff525096..03cad7f32872d8 100644 --- a/deps/icu-small/source/tools/genrb/prscmnts.cpp +++ b/deps/icu-small/source/tools/genrb/prscmnts.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2014, International Business Machines @@ -41,9 +43,9 @@ const char *patternStrings[UPC_LIMIT]={ "^note\\s*(.*)" }; -U_CFUNC int32_t -removeText(UChar *source, int32_t srcLen, - UnicodeString patString,uint32_t options, +U_CFUNC int32_t +removeText(UChar *source, int32_t srcLen, + UnicodeString patString,uint32_t options, UnicodeString replaceText, UErrorCode *status){ if(status == NULL || U_FAILURE(*status)){ @@ -60,8 +62,8 @@ removeText(UChar *source, int32_t srcLen, dest = myMatcher.replaceAll(replaceText,*status); - - + + return dest.extract(source, srcLen, *status); } @@ -73,7 +75,7 @@ trim(UChar *src, int32_t srcLen, UErrorCode *status){ return srcLen; } -U_CFUNC int32_t +U_CFUNC int32_t removeCmtText(UChar* source, int32_t srcLen, UErrorCode* status){ srcLen = trim(source, srcLen, status); UnicodeString patString("^\\s*?\\*\\s*?"); // remove pattern like " * " at the begining of the line @@ -81,12 +83,12 @@ removeCmtText(UChar* source, int32_t srcLen, UErrorCode* status){ return removeText(source, srcLen, UnicodeString("[ \\r\\n]+"), 0, UnicodeString(" "), status);// remove new lines; } -U_CFUNC int32_t +U_CFUNC int32_t getText(const UChar* source, int32_t srcLen, UChar** dest, int32_t destCapacity, - UnicodeString patternString, + UnicodeString patternString, UErrorCode* status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -94,12 +96,12 @@ getText(const UChar* source, int32_t srcLen, UnicodeString stringArray[MAX_SPLIT_STRINGS]; RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), 0, *status); UnicodeString src (source,srcLen); - + if (U_FAILURE(*status)) { return 0; } pattern->split(src, stringArray, MAX_SPLIT_STRINGS, *status); - + RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); if (U_FAILURE(*status)) { return 0; @@ -129,7 +131,7 @@ getDescription( const UChar* source, int32_t srcLen, UnicodeString stringArray[MAX_SPLIT_STRINGS]; RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), UREGEX_MULTILINE, *status); UnicodeString src(source, srcLen); - + if (U_FAILURE(*status)) { return 0; } @@ -143,9 +145,9 @@ getDescription( const UChar* source, int32_t srcLen, } U_CFUNC int32_t -getCount(const UChar* source, int32_t srcLen, +getCount(const UChar* source, int32_t srcLen, UParseCommentsOption option, UErrorCode *status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -159,12 +161,12 @@ getCount(const UChar* source, int32_t srcLen, return 0; } int32_t retLen = pattern->split(src, stringArray, MAX_SPLIT_STRINGS, *status); - + UnicodeString patternString(patternStrings[option]); RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); if (U_FAILURE(*status)) { return 0; - } + } int32_t count = 0; for(int32_t i=0; isplit(src, stringArray, MAX_SPLIT_STRINGS, *status); - + UnicodeString patternString(patternStrings[option]); RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); if (U_FAILURE(*status)) { return 0; - } + } int32_t count = 0; for(int32_t i=0; i=length) ? pad :length; - + /* Reverses the string */ for (j = 0; j < (num / 2); j++){ diff --git a/deps/icu-small/source/tools/genrb/rbutil.h b/deps/icu-small/source/tools/genrb/rbutil.h index 3f055a848c89e0..d2a303516ab820 100644 --- a/deps/icu-small/source/tools/genrb/rbutil.h +++ b/deps/icu-small/source/tools/genrb/rbutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/read.c b/deps/icu-small/source/tools/genrb/read.c index b652fee9bfead5..468c27e07ee696 100644 --- a/deps/icu-small/source/tools/genrb/read.c +++ b/deps/icu-small/source/tools/genrb/read.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -33,7 +35,7 @@ #define BADBOM 0xFFFE #define CR 0x000D #define LF 0x000A - + static int32_t lineCount; /* Protos */ @@ -185,7 +187,7 @@ static enum ETokenType getStringToken(UCHARBUF* buf, if(c == CR || c == LF){ isNLUnescaped = TRUE; } - } + } if(c==ESCAPE && !isFollowingCharEscaped){ isFollowingCharEscaped = TRUE; @@ -202,7 +204,7 @@ static enum ETokenType getStringToken(UCHARBUF* buf, isNLUnescaped = FALSE; } } - + if (U_FAILURE(*status)) { return TOK_ERROR; } @@ -216,7 +218,7 @@ static enum ETokenType getStringToken(UCHARBUF* buf, return TOK_ERROR; } } - + if(lastStringWasQuoted){ if(getShowWarning()){ warning(lineCount, "Mixing quoted and unquoted strings"); @@ -228,8 +230,8 @@ static enum ETokenType getStringToken(UCHARBUF* buf, } lastStringWasQuoted = FALSE; - - /* if we reach here we are mixing + + /* if we reach here we are mixing * quoted and unquoted strings * warn in normal mode and error in * pedantic mode @@ -249,7 +251,7 @@ static enum ETokenType getStringToken(UCHARBUF* buf, pTarget = target; ustr_uscat(token, pTarget,len, status); len=0; - + if (U_FAILURE(*status)) { return TOK_ERROR; } diff --git a/deps/icu-small/source/tools/genrb/read.h b/deps/icu-small/source/tools/genrb/read.h index f79b145f25aa36..74b8c823a2e970 100644 --- a/deps/icu-small/source/tools/genrb/read.h +++ b/deps/icu-small/source/tools/genrb/read.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/reslist.cpp b/deps/icu-small/source/tools/genrb/reslist.cpp index 9f8365d7f6a405..9420184a9df806 100644 --- a/deps/icu-small/source/tools/genrb/reslist.cpp +++ b/deps/icu-small/source/tools/genrb/reslist.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/reslist.h b/deps/icu-small/source/tools/genrb/reslist.h index 5d09ecd8db572d..de6faf6a7c5045 100644 --- a/deps/icu-small/source/tools/genrb/reslist.h +++ b/deps/icu-small/source/tools/genrb/reslist.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -118,7 +120,7 @@ struct SRBRoot { /* write a java resource file */ // TODO: C++ify -void bundle_write_java(struct SRBRoot *bundle, const char *outputDir, const char* outputEnc, char *writtenFilename, +void bundle_write_java(struct SRBRoot *bundle, const char *outputDir, const char* outputEnc, char *writtenFilename, int writtenFilenameLen, const char* packageName, const char* bundleName, UErrorCode *status); /* write a xml resource file */ diff --git a/deps/icu-small/source/tools/genrb/rle.c b/deps/icu-small/source/tools/genrb/rle.c index fb14d1afc236a7..33e42d62b6727f 100644 --- a/deps/icu-small/source/tools/genrb/rle.c +++ b/deps/icu-small/source/tools/genrb/rle.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -402,3 +404,4 @@ rleStringToByteArray(uint16_t* src, int32_t srcLen, uint8_t* target, int32_t tgt return ai; } + diff --git a/deps/icu-small/source/tools/genrb/rle.h b/deps/icu-small/source/tools/genrb/rle.h index 0810914c52aab4..682ee7a88ba8d3 100644 --- a/deps/icu-small/source/tools/genrb/rle.h +++ b/deps/icu-small/source/tools/genrb/rle.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -60,7 +62,7 @@ usArrayToRLEString(const uint16_t* src,int32_t srcLen,uint16_t* buffer, int32_t * Construct an array of bytes from a run-length encoded string. */ int32_t -rleStringToByteArray(uint16_t* src, int32_t srcLen, uint8_t* target, int32_t tgtLen, UErrorCode* status); +rleStringToByteArray(uint16_t* src, int32_t srcLen, uint8_t* target, int32_t tgtLen, UErrorCode* status); /** * Construct an array of shorts from a run-length encoded string. */ diff --git a/deps/icu-small/source/tools/genrb/ustr.c b/deps/icu-small/source/tools/genrb/ustr.c index b73ce9bd2a2e07..07e9b153814462 100644 --- a/deps/icu-small/source/tools/genrb/ustr.c +++ b/deps/icu-small/source/tools/genrb/ustr.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -92,7 +94,7 @@ ustr_cpy(struct UString *dst, if(src->fChars == NULL || dst->fChars == NULL){ return; } - uprv_memcpy(dst->fChars, src->fChars, sizeof(UChar) * src->fLength); + u_memcpy(dst->fChars, src->fChars, src->fLength); dst->fLength = src->fLength; dst->fChars[dst->fLength] = 0x0000; } @@ -131,13 +133,13 @@ ustr_ncat(struct UString *dst, { if(U_FAILURE(*status) || dst == src) return; - + if(dst->fCapacity < (dst->fLength + n)) { ustr_resize(dst, ALLOCATION(dst->fLength + n), status); if(U_FAILURE(*status)) return; } - + uprv_memcpy(dst->fChars + dst->fLength, src->fChars, sizeof(UChar) * n); dst->fLength += src->fLength; @@ -163,7 +165,7 @@ ustr_ucat(struct UString *dst, dst->fLength += 1; dst->fChars[dst->fLength] = 0x0000; } -U_CFUNC void +U_CFUNC void ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status){ if(c > 0x10FFFF){ *status = U_ILLEGAL_CHAR_FOUND; @@ -181,7 +183,7 @@ ustr_uscat(struct UString *dst, const UChar* src,int len, UErrorCode *status) { - if(U_FAILURE(*status)) + if(U_FAILURE(*status)) return; if(dst->fCapacity < (dst->fLength + len)) { diff --git a/deps/icu-small/source/tools/genrb/ustr.h b/deps/icu-small/source/tools/genrb/ustr.h index 05a446ea0e58ad..c27a78104fbdb1 100644 --- a/deps/icu-small/source/tools/genrb/ustr.h +++ b/deps/icu-small/source/tools/genrb/ustr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/wrtjava.cpp b/deps/icu-small/source/tools/genrb/wrtjava.cpp index 6bfa7bb150b3f7..d5cc942eff521a 100644 --- a/deps/icu-small/source/tools/genrb/wrtjava.cpp +++ b/deps/icu-small/source/tools/genrb/wrtjava.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -435,9 +437,9 @@ bytes_write_java(const BinaryResource *res, UErrorCode * /*status*/) { char byteBuffer[100] = { 0 }; uint8_t* byteArray = NULL; int byteIterator = 0; - + int32_t srcLen=res->fLength; - + if(srcLen>0 ) { byteArray = res->fData; diff --git a/deps/icu-small/source/tools/genrb/wrtxml.cpp b/deps/icu-small/source/tools/genrb/wrtxml.cpp index c250fc29b41e58..62fdd2427cd249 100644 --- a/deps/icu-small/source/tools/genrb/wrtxml.cpp +++ b/deps/icu-small/source/tools/genrb/wrtxml.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/icupkg/icupkg.cpp b/deps/icu-small/source/tools/icupkg/icupkg.cpp index 056fc46faca5e7..20239304410e7a 100644 --- a/deps/icu-small/source/tools/icupkg/icupkg.cpp +++ b/deps/icu-small/source/tools/icupkg/icupkg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/pkgdata/pkgdata.cpp b/deps/icu-small/source/tools/pkgdata/pkgdata.cpp index 5dc075101be25c..2b3c29fbd10bd0 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgdata.cpp +++ b/deps/icu-small/source/tools/pkgdata/pkgdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2000-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -568,7 +570,7 @@ static int32_t pkg_executeOptions(UPKGOptions *o) { uprv_strcat(targetDir, PKGDATA_FILE_SEP_STRING); uprv_strcat(targetDir, o->shortName); } - + if(o->verbose) { fprintf(stdout, "# Install: Files mode, copying files to %s..\n", targetDir); } @@ -705,7 +707,7 @@ static int32_t pkg_executeOptions(UPKGOptions *o) { if(o->verbose) { fprintf(stdout, "# Generating assembly code %s of type %s ..\n", gencFilePath, genccodeAssembly); } - + /* Offset genccodeAssembly by 3 because "-a " */ if (genccodeAssembly && (uprv_strlen(genccodeAssembly)>3) && @@ -1018,7 +1020,7 @@ static int32_t pkg_createSymLinks(const char *targetDir, UBool specialHandling) uprv_strcmp(libFileNames[LIB_FILE_VERSION], libFileNames[LIB_FILE_VERSION_MAJOR]) == 0) { return result; } - + sprintf(cmd, "cd %s && %s %s && %s %s %s", targetDir, RM_CMD, @@ -1282,18 +1284,18 @@ static int32_t pkg_archiveLibrary(const char *targetDir, const char *version, UB targetDir, libFileNames[LIB_FILE_VERSION_TMP]); - result = runCommand(cmd); - if (result != 0) { + result = runCommand(cmd); + if (result != 0) { fprintf(stderr, "Error creating archive library. Failed command: %s\n", cmd); - return result; - } - - sprintf(cmd, "%s %s%s", - pkgDataFlags[RANLIB], - targetDir, + return result; + } + + sprintf(cmd, "%s %s%s", + pkgDataFlags[RANLIB], + targetDir, libFileNames[LIB_FILE_VERSION]); - - result = runCommand(cmd); + + result = runCommand(cmd); if (result != 0) { fprintf(stderr, "Error creating archive library. Failed command: %s\n", cmd); return result; @@ -1358,11 +1360,11 @@ static int32_t pkg_generateLibraryFile(const char *targetDir, const char mode, c result = runCommand(cmd); if (result == 0) { - sprintf(cmd, "%s %s%s", - pkgDataFlags[RANLIB], - targetDir, - libFileNames[LIB_FILE_VERSION]); - + sprintf(cmd, "%s %s%s", + pkgDataFlags[RANLIB], + targetDir, + libFileNames[LIB_FILE_VERSION]); + result = runCommand(cmd); } } else /* if (IN_DLL_MODE(mode)) */ { @@ -1575,10 +1577,10 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD #ifdef USE_SINGLE_CCODE_FILE char icudtAll[SMALL_BUFFER_MAX_SIZE] = ""; FileStream *icudtAllFile = NULL; - + sprintf(icudtAll, "%s%s%sall.c", o->tmpDir, - PKGDATA_FILE_SEP_STRING, + PKGDATA_FILE_SEP_STRING, libFileNames[LIB_FILE]); /* Remove previous icudtall.c file. */ if (T_FileStream_file_exists(icudtAll) && (result = remove(icudtAll)) != 0) { @@ -1619,18 +1621,18 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD #ifdef USE_SINGLE_CCODE_FILE uprv_strcpy(tempObjectFile, gencmnFile); tempObjectFile[uprv_strlen(tempObjectFile) - 1] = 'o'; - + sprintf(cmd, "%s %s -o %s %s", pkgDataFlags[COMPILER], pkgDataFlags[LIBFLAGS], tempObjectFile, gencmnFile); - + result = runCommand(cmd); if (result != 0) { break; } - + sprintf(buffer, "%s",tempObjectFile); #endif } else { @@ -1688,7 +1690,7 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD #ifndef USE_SINGLE_CCODE_FILE uprv_strcpy(tempObjectFile, gencmnFile); tempObjectFile[uprv_strlen(tempObjectFile) - 1] = 'o'; - + sprintf(cmd, "%s %s -o %s %s", pkgDataFlags[COMPILER], pkgDataFlags[LIBFLAGS], @@ -1704,7 +1706,7 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD uprv_strcat(buffer, tempObjectFile); #endif - + if (i > 0) { list = list->next; listNames = listNames->next; @@ -1721,7 +1723,7 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD pkgDataFlags[LIBFLAGS], tempObjectFile, icudtAll); - + result = runCommand(cmd); if (result == 0) { uprv_strcat(buffer, " "); @@ -1798,7 +1800,7 @@ static int32_t pkg_createWindowsDLL(const char mode, const char *gencFilePath, U #ifdef CYGWINMSVC uprv_strcat(libFilePath, o->libName); uprv_strcat(libFilePath, ".lib"); - + uprv_strcat(dllFilePath, o->libName); uprv_strcat(dllFilePath, o->version); #else @@ -1811,7 +1813,7 @@ static int32_t pkg_createWindowsDLL(const char mode, const char *gencFilePath, U uprv_strcat(dllFilePath, o->entryName); #endif uprv_strcat(dllFilePath, DLL_EXT); - + uprv_strcpy(tmpResFilePath, o->tmpDir); uprv_strcat(tmpResFilePath, PKGDATA_FILE_SEP_STRING); uprv_strcat(tmpResFilePath, ICUDATA_RES_FILE); @@ -1941,9 +1943,9 @@ static UPKGOptions *pkg_checkFlag(UPKGOptions *o) { return NULL; } else { sprintf(tmpbuffer, "%s%s ", o->entryName, UDATA_CMN_INTERMEDIATE_SUFFIX); - + T_FileStream_writeLine(f, tmpbuffer); - + T_FileStream_close(f); } } @@ -1983,7 +1985,7 @@ static UPKGOptions *pkg_checkFlag(UPKGOptions *o) { #endif // Don't really need a return value, just need to stop compiler warnings about // the unused parameter 'o' on platforms where it is not otherwise used. - return o; + return o; } static void loadLists(UPKGOptions *o, UErrorCode *status) @@ -2082,7 +2084,7 @@ static void loadLists(UPKGOptions *o, UErrorCode *status) fprintf(stderr, "pkgdata: Error: absolute path encountered. Old style paths are not supported. Use relative paths such as 'fur.res' or 'translit%cfur.res'.\n\tBad path: '%s'\n", U_FILE_SEP_CHAR, s); exit(U_ILLEGAL_ARGUMENT_ERROR); } - tmpLength = uprv_strlen(o->srcDir) + + tmpLength = uprv_strlen(o->srcDir) + uprv_strlen(s) + 5; /* 5 is to add a little extra space for, among other things, PKGDATA_FILE_SEP_STRING */ if((tmp = (char *)uprv_malloc(tmpLength)) == NULL) { fprintf(stderr, "pkgdata: Error: Unable to allocate tmp buffer size: %d\n", tmpLength); @@ -2117,7 +2119,7 @@ static void loadLists(UPKGOptions *o, UErrorCode *status) cmdBuf.append( U_FILE_SEP_STRING, status ); } cmdBuf.append( cmd, status ); - + if(verbose) { fprintf(stdout, "# Calling icu-config: %s\n", cmdBuf.data()); } diff --git a/deps/icu-small/source/tools/pkgdata/pkgtypes.c b/deps/icu-small/source/tools/pkgdata/pkgtypes.c index c8e08c2e828369..eadf634db385e8 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgtypes.c +++ b/deps/icu-small/source/tools/pkgdata/pkgtypes.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************** * * Copyright (C) 2000-2016, International Business Machines diff --git a/deps/icu-small/source/tools/pkgdata/pkgtypes.h b/deps/icu-small/source/tools/pkgdata/pkgtypes.h index 0bba60c517b625..c7eeba42cb218e 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgtypes.h +++ b/deps/icu-small/source/tools/pkgdata/pkgtypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************** * * Copyright (C) 2000-2012, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/collationinfo.cpp b/deps/icu-small/source/tools/toolutil/collationinfo.cpp index fef1cdf1051cc9..bbb1839ef1a5a4 100644 --- a/deps/icu-small/source/tools/toolutil/collationinfo.cpp +++ b/deps/icu-small/source/tools/toolutil/collationinfo.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/collationinfo.h b/deps/icu-small/source/tools/toolutil/collationinfo.h index dac12d2d48149f..48cd5561844cb8 100644 --- a/deps/icu-small/source/tools/toolutil/collationinfo.h +++ b/deps/icu-small/source/tools/toolutil/collationinfo.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/dbgutil.cpp b/deps/icu-small/source/tools/toolutil/dbgutil.cpp index 668a2269e20a7f..77e271125bfd62 100644 --- a/deps/icu-small/source/tools/toolutil/dbgutil.cpp +++ b/deps/icu-small/source/tools/toolutil/dbgutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2012, International Business Machines Corporation and @@ -111,7 +113,7 @@ U_CAPI int32_t U_EXPORT2 udbg_enumByString(UDebugEnumType type, const UnicodeSt } // from DataMap::utoi -U_CAPI int32_t +U_CAPI int32_t udbg_stoi(const UnicodeString &s) { char ch[256]; @@ -123,7 +125,7 @@ udbg_stoi(const UnicodeString &s) } -U_CAPI double +U_CAPI double udbg_stod(const UnicodeString &s) { char ch[256]; diff --git a/deps/icu-small/source/tools/toolutil/dbgutil.h b/deps/icu-small/source/tools/toolutil/dbgutil.h index 49d52eae51f8ca..ad6153293c05a6 100644 --- a/deps/icu-small/source/tools/toolutil/dbgutil.h +++ b/deps/icu-small/source/tools/toolutil/dbgutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************ @@ -22,7 +24,7 @@ udbg_enumString(UDebugEnumType type, int32_t field); /** * @return enum offset, or UDBG_INVALID_ENUM on error - */ + */ U_CAPI int32_t U_EXPORT2 udbg_enumByString(UDebugEnumType type, const icu::UnicodeString& string); diff --git a/deps/icu-small/source/tools/toolutil/denseranges.cpp b/deps/icu-small/source/tools/toolutil/denseranges.cpp index 7d81f2e9442f01..3b83715f28cfce 100644 --- a/deps/icu-small/source/tools/toolutil/denseranges.cpp +++ b/deps/icu-small/source/tools/toolutil/denseranges.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/denseranges.h b/deps/icu-small/source/tools/toolutil/denseranges.h index f9af56173872bd..7b072f4654ce59 100644 --- a/deps/icu-small/source/tools/toolutil/denseranges.h +++ b/deps/icu-small/source/tools/toolutil/denseranges.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/filestrm.c b/deps/icu-small/source/tools/toolutil/filestrm.c index c7b4eee54a31e0..e84160efdfa383 100644 --- a/deps/icu-small/source/tools/toolutil/filestrm.c +++ b/deps/icu-small/source/tools/toolutil/filestrm.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -42,7 +44,7 @@ T_FileStream_open(const char* filename, const char* mode) U_CAPI FileStream* U_EXPORT2 T_FileStream_wopen(const wchar_t* filename, const wchar_t* mode) { - // TBD: _wfopen is believed to be MS-specific? + // TBD: _wfopen is believed to be MS-specific? #if U_PLATFORM_USES_ONLY_WIN32_API FILE* result = _wfopen(filename, mode); return (FileStream*)result; @@ -51,7 +53,7 @@ T_FileStream_wopen(const wchar_t* filename, const wchar_t* mode) char *fn, *md; FILE *result; - // convert from wchar_t to char + // convert from wchar_t to char fnMbsSize = wcstombs(NULL, filename, ((size_t)-1) >> 1); fn = (char*)uprv_malloc(fnMbsSize+2); wcstombs(fn, filename, fnMbsSize); @@ -180,7 +182,7 @@ T_FileStream_eof(FileStream* fileStream) } /* - Warning + Warning This function may not work consistently on all platforms (e.g. HP-UX, FreeBSD and MacOSX don't return an error when putc is used on a file opened as readonly) diff --git a/deps/icu-small/source/tools/toolutil/filestrm.h b/deps/icu-small/source/tools/toolutil/filestrm.h index 0eeba98b661fd6..b42345140681c6 100644 --- a/deps/icu-small/source/tools/toolutil/filestrm.h +++ b/deps/icu-small/source/tools/toolutil/filestrm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/tools/toolutil/filetools.cpp b/deps/icu-small/source/tools/toolutil/filetools.cpp index 238ef7ba155004..b0d4ed81a560dd 100644 --- a/deps/icu-small/source/tools/toolutil/filetools.cpp +++ b/deps/icu-small/source/tools/toolutil/filetools.cpp @@ -1,9 +1,12 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2013, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ +#include "unicode/platform.h" #if U_PLATFORM == U_PF_MINGW // *cough* - for struct stat #ifdef __STRICT_ANSI__ @@ -13,6 +16,7 @@ #include "filetools.h" #include "filestrm.h" +#include "charstr.h" #include "cstring.h" #include "unicode/putil.h" #include "putilimp.h" @@ -27,8 +31,6 @@ #include typedef struct dirent DIRENT; -#define MAX_PATH_SIZE 4096 /* Set the limit for the size of the path. */ - #define SKIP1 "." #define SKIP2 ".." #endif @@ -56,20 +58,24 @@ isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir) while ((dirEntry = readdir(pDir)) != NULL) { if (uprv_strcmp(dirEntry->d_name, SKIP1) != 0 && uprv_strcmp(dirEntry->d_name, SKIP2) != 0) { - char newpath[MAX_PATH_SIZE] = ""; - uprv_strcpy(newpath, checkAgainst); - uprv_strcat(newpath, U_FILE_SEP_STRING); - uprv_strcat(newpath, dirEntry->d_name); - - if ((subDirp = opendir(newpath)) != NULL) { + UErrorCode status = U_ZERO_ERROR; + icu::CharString newpath(checkAgainst, -1, status); + newpath.append(U_FILE_SEP_STRING, -1, status); + newpath.append(dirEntry->d_name, -1, status); + if (U_FAILURE(status)) { + fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, u_errorName(status)); + return FALSE; + }; + + if ((subDirp = opendir(newpath.data())) != NULL) { /* If this new path is a directory, make a recursive call with the newpath. */ closedir(subDirp); - isLatest = isFileModTimeLater(filePath, newpath, isDir); + isLatest = isFileModTimeLater(filePath, newpath.data(), isDir); if (!isLatest) { break; } } else { - int32_t latest = whichFileModTimeIsLater(filePath, newpath); + int32_t latest = whichFileModTimeIsLater(filePath, newpath.data()); if (latest < 0 || latest == 2) { isLatest = FALSE; break; diff --git a/deps/icu-small/source/tools/toolutil/filetools.h b/deps/icu-small/source/tools/toolutil/filetools.h index 7d4e13905575ca..5ede02761ac46a 100644 --- a/deps/icu-small/source/tools/toolutil/filetools.h +++ b/deps/icu-small/source/tools/toolutil/filetools.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/flagparser.c b/deps/icu-small/source/tools/toolutil/flagparser.c index 252267b7ae8e07..0ffc3715bfdab1 100644 --- a/deps/icu-small/source/tools/toolutil/flagparser.c +++ b/deps/icu-small/source/tools/toolutil/flagparser.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -32,7 +34,7 @@ parseFlagsFile(const char *fileName, char **flagBuffer, int32_t flagBufferSize, *status = U_FILE_ACCESS_ERROR; goto parseFlagsFile_cleanup; } - + buffer = uprv_malloc(sizeof(char) * currentBufferSize); tmpFlagBuffer = uprv_malloc(sizeof(char) * flagBufferSize); @@ -61,7 +63,7 @@ parseFlagsFile(const char *fileName, char **flagBuffer, int32_t flagBufferSize, continue; } - if (uprv_strlen(buffer) == (currentBufferSize - 1) && buffer[currentBufferSize-2] != '\n') { + if ((int32_t)uprv_strlen(buffer) == (currentBufferSize - 1) && buffer[currentBufferSize-2] != '\n') { /* Allocate more space for buffer if it didnot read the entrire line */ allocateMoreSpace = TRUE; T_FileStream_rewind(f); @@ -96,7 +98,7 @@ parseFlagsFile(const char *fileName, char **flagBuffer, int32_t flagBufferSize, uprv_free(buffer); T_FileStream_close(f); - + if (U_FAILURE(*status) && *status != U_BUFFER_OVERFLOW_ERROR) { return -1; } diff --git a/deps/icu-small/source/tools/toolutil/flagparser.h b/deps/icu-small/source/tools/toolutil/flagparser.h index 32a51e3d2acbd8..4aa03c8a5fdca4 100644 --- a/deps/icu-small/source/tools/toolutil/flagparser.h +++ b/deps/icu-small/source/tools/toolutil/flagparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/package.cpp b/deps/icu-small/source/tools/toolutil/package.cpp index 8992f30eee691a..a5835e9618cb70 100644 --- a/deps/icu-small/source/tools/toolutil/package.cpp +++ b/deps/icu-small/source/tools/toolutil/package.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -379,7 +381,7 @@ U_CDECL_END U_NAMESPACE_BEGIN -Package::Package() +Package::Package() : doAutoPrefix(FALSE), prefixEndsWithType(FALSE) { inPkgName[0]=0; pkgPrefix[0]=0; @@ -1279,7 +1281,7 @@ Package::sortItems() { } } -void Package::setItemCapacity(int32_t max) +void Package::setItemCapacity(int32_t max) { if(max<=itemMax) { return; @@ -1287,12 +1289,12 @@ void Package::setItemCapacity(int32_t max) Item *newItems = (Item*)uprv_malloc(max * sizeof(items[0])); Item *oldItems = items; if(newItems == NULL) { - fprintf(stderr, "icupkg: Out of memory trying to allocate %lu bytes for %d items\n", + fprintf(stderr, "icupkg: Out of memory trying to allocate %lu bytes for %d items\n", (unsigned long)max*sizeof(items[0]), max); exit(U_MEMORY_ALLOCATION_ERROR); } if(items && itemCount>0) { - uprv_memcpy(newItems, items, itemCount*sizeof(items[0])); + uprv_memcpy(newItems, items, (size_t)itemCount*sizeof(items[0])); } itemMax = max; items = newItems; diff --git a/deps/icu-small/source/tools/toolutil/package.h b/deps/icu-small/source/tools/toolutil/package.h index 194722f4f4e59a..d3b83b659bb821 100644 --- a/deps/icu-small/source/tools/toolutil/package.h +++ b/deps/icu-small/source/tools/toolutil/package.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -197,3 +199,5 @@ class U_TOOLUTIL_API Package { U_NAMESPACE_END #endif + + diff --git a/deps/icu-small/source/tools/toolutil/pkg_genc.c b/deps/icu-small/source/tools/toolutil/pkg_genc.c index f486ec4a107c6c..f0dbd4ca36d3aa 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_genc.c +++ b/deps/icu-small/source/tools/toolutil/pkg_genc.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -175,7 +177,7 @@ static const struct AssemblyType { "\t.type Drodata.rodata,@object\n" "\t.size Drodata.rodata,0\n" "\t.globl %s\n" - "\t.align 16\n" + "\t.align 16\n" "%s:\n", ".4byte ","",HEX_0X diff --git a/deps/icu-small/source/tools/toolutil/pkg_genc.h b/deps/icu-small/source/tools/toolutil/pkg_genc.h index 9bd312b96f74ac..12ffc927285b27 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_genc.h +++ b/deps/icu-small/source/tools/toolutil/pkg_genc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2011, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_gencmn.c b/deps/icu-small/source/tools/toolutil/pkg_gencmn.c index 25f36088a0f8f4..38cc820a176d3b 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_gencmn.c +++ b/deps/icu-small/source/tools/toolutil/pkg_gencmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2012, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_gencmn.h b/deps/icu-small/source/tools/toolutil/pkg_gencmn.h index 0ba953be74ab96..62f8327cdfdf91 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_gencmn.h +++ b/deps/icu-small/source/tools/toolutil/pkg_gencmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_icu.cpp b/deps/icu-small/source/tools/toolutil/pkg_icu.cpp index 471b1d45ec1220..e679c23be84f99 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_icu.cpp +++ b/deps/icu-small/source/tools/toolutil/pkg_icu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_icu.h b/deps/icu-small/source/tools/toolutil/pkg_icu.h index 50f3f51c96dfce..3d620f78dfb6cc 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_icu.h +++ b/deps/icu-small/source/tools/toolutil/pkg_icu.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2016, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_imp.h b/deps/icu-small/source/tools/toolutil/pkg_imp.h index 45ddc4c0912844..c9fe81bd73a20a 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_imp.h +++ b/deps/icu-small/source/tools/toolutil/pkg_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/pkgitems.cpp b/deps/icu-small/source/tools/toolutil/pkgitems.cpp index 7c8c744a442347..b4bcf18087846e 100644 --- a/deps/icu-small/source/tools/toolutil/pkgitems.cpp +++ b/deps/icu-small/source/tools/toolutil/pkgitems.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -124,7 +126,7 @@ class NativeItem { * assemble the target item name from the source item name, an ID * and a suffix */ -static void +static void makeTargetName(const char *itemName, const char *id, int32_t idLength, const char *suffix, char *target, int32_t capacity, UErrorCode *pErrorCode) { @@ -158,7 +160,7 @@ makeTargetName(const char *itemName, const char *id, int32_t idLength, const cha memcpy(target+treeLength+idLength, suffix, suffixLength+1); // +1 includes the terminating NUL } -static void +static void checkIDSuffix(const char *itemName, const char *id, int32_t idLength, const char *suffix, CheckDependency check, void *context, UErrorCode *pErrorCode) { @@ -170,7 +172,7 @@ checkIDSuffix(const char *itemName, const char *id, int32_t idLength, const char } /* assemble the target item name from the item's parent item name */ -static void +static void checkParent(const char *itemName, CheckDependency check, void *context, UErrorCode *pErrorCode) { const char *itemID, *parent, *parentLimit, *suffix; diff --git a/deps/icu-small/source/tools/toolutil/ppucd.cpp b/deps/icu-small/source/tools/toolutil/ppucd.cpp index ed5229be786a60..18d317e3e330f2 100644 --- a/deps/icu-small/source/tools/toolutil/ppucd.cpp +++ b/deps/icu-small/source/tools/toolutil/ppucd.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2014, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/ppucd.h b/deps/icu-small/source/tools/toolutil/ppucd.h index d4726fec1091f4..593bd247996c23 100644 --- a/deps/icu-small/source/tools/toolutil/ppucd.h +++ b/deps/icu-small/source/tools/toolutil/ppucd.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2013, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/swapimpl.cpp b/deps/icu-small/source/tools/toolutil/swapimpl.cpp index dbeff2d7b8ac6c..6cc21623016849 100644 --- a/deps/icu-small/source/tools/toolutil/swapimpl.cpp +++ b/deps/icu-small/source/tools/toolutil/swapimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -230,7 +232,7 @@ uprops_swap(const UDataSwapper *ds, /* copy everything for inaccessible data (padding) */ if(inData32!=outData32) { - uprv_memcpy(outData32, inData32, 4*dataTop); + uprv_memcpy(outData32, inData32, 4*(size_t)dataTop); } /* swap the indexes[16] */ diff --git a/deps/icu-small/source/tools/toolutil/swapimpl.h b/deps/icu-small/source/tools/toolutil/swapimpl.h index b36ec2609dabf5..0e4d41734433d2 100644 --- a/deps/icu-small/source/tools/toolutil/swapimpl.h +++ b/deps/icu-small/source/tools/toolutil/swapimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/toolutil.cpp b/deps/icu-small/source/tools/toolutil/toolutil.cpp index 259df9873d21ae..6afce5bb20c98a 100644 --- a/deps/icu-small/source/tools/toolutil/toolutil.cpp +++ b/deps/icu-small/source/tools/toolutil/toolutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -14,7 +16,7 @@ * created by: Markus W. Scherer * * 6/25/08 - Added Cygwin specific code in uprv_mkdir - Brian Rower -* +* * This file contains utility functions for ICU tools like genccode. */ @@ -83,7 +85,7 @@ static int32_t currentYear = -1; U_CAPI int32_t U_EXPORT2 getCurrentYear() { #if !UCONFIG_NO_FORMATTING - UErrorCode status=U_ZERO_ERROR; + UErrorCode status=U_ZERO_ERROR; UCalendar *cal = NULL; if(currentYear == -1) { @@ -225,7 +227,7 @@ uprv_getModificationDate(const char *pathname, UErrorCode *status) } // TODO: handle case where stat is not available struct stat st; - + if(stat(pathname,&st) != 0) { *status = U_FILE_ACCESS_ERROR; @@ -312,7 +314,7 @@ utm_hasCapacity(UToolMemory *mem, int32_t capacity) { if(mem->array==mem->staticArray) { mem->array=uprv_malloc(newCapacity*mem->size); if(mem->array!=NULL) { - uprv_memcpy(mem->array, mem->staticArray, mem->idx*mem->size); + uprv_memcpy(mem->array, mem->staticArray, (size_t)mem->idx*mem->size); } } else { mem->array=uprv_realloc(mem->array, newCapacity*mem->size); diff --git a/deps/icu-small/source/tools/toolutil/toolutil.h b/deps/icu-small/source/tools/toolutil/toolutil.h index 68c9e834a65cfd..ad5143890b7194 100644 --- a/deps/icu-small/source/tools/toolutil/toolutil.h +++ b/deps/icu-small/source/tools/toolutil/toolutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -79,13 +81,13 @@ findBasename(const char *filename); /** * Find the directory name of a pathname, that is, everything - * up to but not including the last file separator. + * up to but not including the last file separator. * * If successful, copies the directory name into the output buffer along with - * a terminating NULL. + * a terminating NULL. * * If there isn't a directory name in the path, it returns an empty string. - * @param path the full pathname to inspect. + * @param path the full pathname to inspect. * @param buffer the output buffer * @param bufLen the output buffer length * @param status error code- may return U_BUFFER_OVERFLOW_ERROR if bufLen is too small. diff --git a/deps/icu-small/source/tools/toolutil/ucbuf.cpp b/deps/icu-small/source/tools/toolutil/ucbuf.cpp index d83acff276c089..a203cfa911f6fb 100644 --- a/deps/icu-small/source/tools/toolutil/ucbuf.cpp +++ b/deps/icu-small/source/tools/toolutil/ucbuf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -62,7 +64,7 @@ ucbuf_autodetect_fs(FileStream* in, const char** cp, UConverter** conv, int32_t* numRead=T_FileStream_read(in, start, sizeof(start)); *cp = ucnv_detectUnicodeSignature(start, numRead, signatureLength, error); - + /* unread the bytes beyond what was consumed for U+FEFF */ T_FileStream_rewind(in); if (*signatureLength > 0) { @@ -92,7 +94,7 @@ ucbuf_autodetect_fs(FileStream* in, const char** cp, UConverter** conv, int32_t* } - return TRUE; + return TRUE; } static UBool ucbuf_isCPKnown(const char* cp){ if(ucnv_compareNames("UTF-8",cp)==0){ @@ -140,7 +142,7 @@ ucbuf_autodetect(const char* fileName, const char** cp,UConverter** conv, int32_ } /* open the file */ in= T_FileStream_open(fileName,"rb"); - + if(in == NULL){ *error=U_FILE_ACCESS_ERROR; return NULL; @@ -184,13 +186,13 @@ ucbuf_fillucbuf( UCHARBUF* buf,UErrorCode* error){ /* read the file */ inputRead=T_FileStream_read(buf->in,cbuf,cbufSize-offset); buf->remaining-=inputRead; - + }else{ cbufSize = T_FileStream_size(buf->in); cbuf = (char*)uprv_malloc(cbufSize); if (cbuf == NULL) { - *error = U_MEMORY_ALLOCATION_ERROR; - return NULL; + *error = U_MEMORY_ALLOCATION_ERROR; + return NULL; } inputRead= T_FileStream_read(buf->in,cbuf,cbufSize); buf->remaining-=inputRead; @@ -231,7 +233,7 @@ ucbuf_fillucbuf( UCHARBUF* buf,UErrorCode* error){ int32_t pos =0; /* use erro1 to preserve the error code */ UErrorCode error1 =U_ZERO_ERROR; - + if( buf->showWarning==TRUE){ fprintf(stderr,"\n###WARNING: Encountered abnormal bytes while" " converting input stream to target encoding: %s\n", @@ -420,7 +422,7 @@ ucbuf_getcx32(UCHARBUF* buf,UErrorCode* error) { char context[CONTEXT_LEN+1]; int32_t len = CONTEXT_LEN; if(length < len) { - len = length; + len = length; } context[len]= 0 ; /* null terminate the buffer */ u_UCharsToChars( buf->currentPos, context, len); @@ -447,7 +449,7 @@ ucbuf_getcx32(UCHARBUF* buf,UErrorCode* error) { U_CAPI UCHARBUF* U_EXPORT2 ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffered, UErrorCode* error){ - FileStream* in = NULL; + FileStream* in = NULL; int32_t fileSize=0; const char* knownCp; if(error==NULL || U_FAILURE(*error)){ @@ -459,10 +461,10 @@ ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffere } if (!uprv_strcmp(fileName, "-")) { in = T_FileStream_stdin(); - }else{ + }else{ in = T_FileStream_open(fileName, "rb"); } - + if(in!=NULL){ UCHARBUF* buf =(UCHARBUF*) uprv_malloc(sizeof(UCHARBUF)); fileSize = T_FileStream_size(in); @@ -492,7 +494,7 @@ ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffere T_FileStream_close(in); return NULL; } - + if((buf->conv==NULL) && (buf->showWarning==TRUE)){ fprintf(stderr,"###WARNING: No converter defined. Using codepage of system.\n"); } @@ -500,7 +502,7 @@ ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffere if(buf->isBuffered){ buf->bufCapacity=MAX_U_BUF; }else{ - buf->bufCapacity=buf->remaining+buf->signatureLength+1/*for terminating nul*/; + buf->bufCapacity=buf->remaining+buf->signatureLength+1/*for terminating nul*/; } buf->buffer=(UChar*) uprv_malloc(U_SIZEOF_UCHAR * buf->bufCapacity ); if (buf->buffer == NULL) { @@ -661,7 +663,7 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, target[0] = '\0'; /* - * append the input dir to openFileName if the first char in + * append the input dir to openFileName if the first char in * filename is not file seperation char and the last char input directory is not '.'. * This is to support : * genrb -s. /home/icu/data @@ -683,7 +685,7 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, *status = U_BUFFER_OVERFLOW_ERROR; return NULL; } - + uprv_strcpy(target, inputDir); } @@ -693,7 +695,7 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, /* * Unicode TR 13 says any of the below chars is * a new line char in a readline function in addition - * to CR+LF combination which needs to be + * to CR+LF combination which needs to be * handled seperately */ static UBool ucbuf_isCharNewLine(UChar c){ @@ -730,7 +732,7 @@ ucbuf_readline(UCHARBUF* buf,int32_t* len,UErrorCode* err){ }else{ ucbuf_fillucbuf(buf,err); if(U_FAILURE(*err)){ - return NULL; + return NULL; } } /* @@ -759,7 +761,7 @@ ucbuf_readline(UCHARBUF* buf,int32_t* len,UErrorCode* err){ */ for(;;){ c = *temp++; - + if(buf->currentPos==buf->bufLimit){ return NULL; /* end of file is reached return NULL */ } diff --git a/deps/icu-small/source/tools/toolutil/ucbuf.h b/deps/icu-small/source/tools/toolutil/ucbuf.h index 739eb9fbe2607c..3894c89bd3ee13 100644 --- a/deps/icu-small/source/tools/toolutil/ucbuf.h +++ b/deps/icu-small/source/tools/toolutil/ucbuf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -213,3 +215,4 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, #endif #endif + diff --git a/deps/icu-small/source/tools/toolutil/ucln_tu.cpp b/deps/icu-small/source/tools/toolutil/ucln_tu.cpp index 0a88ba584bc5bb..2f67641768e27e 100644 --- a/deps/icu-small/source/tools/toolutil/ucln_tu.cpp +++ b/deps/icu-small/source/tools/toolutil/ucln_tu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/tools/toolutil/ucm.c b/deps/icu-small/source/tools/toolutil/ucm.c index adb3ebd2d0a9e8..8d4cdfc40f1e45 100644 --- a/deps/icu-small/source/tools/toolutil/ucm.c +++ b/deps/icu-small/source/tools/toolutil/ucm.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -967,7 +969,7 @@ ucm_addMapping(UCMTable *table, exit(U_MEMORY_ALLOCATION_ERROR); } - uprv_memcpy(table->codePoints+idx, codePoints, m->uLen*4); + uprv_memcpy(table->codePoints+idx, codePoints, (size_t)m->uLen*4); m->u=idx; } @@ -1124,7 +1126,7 @@ ucm_addMappingAuto(UCMFile *ucm, UBool forBase, UCMStates *baseStates, U_CAPI UBool U_EXPORT2 ucm_addMappingFromLine(UCMFile *ucm, const char *line, UBool forBase, UCMStates *baseStates) { - UCMapping m={ 0 }; + UCMapping m={ 0, {0}, 0, 0, 0, 0 }; UChar32 codePoints[UCNV_EXT_MAX_UCHARS]; uint8_t bytes[UCNV_EXT_MAX_BYTES]; diff --git a/deps/icu-small/source/tools/toolutil/ucm.h b/deps/icu-small/source/tools/toolutil/ucm.h index 5de1bdc5e38d14..a3e3b8da70be2f 100644 --- a/deps/icu-small/source/tools/toolutil/ucm.h +++ b/deps/icu-small/source/tools/toolutil/ucm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines @@ -297,3 +299,4 @@ U_CDECL_END #endif #endif + diff --git a/deps/icu-small/source/tools/toolutil/ucmstate.c b/deps/icu-small/source/tools/toolutil/ucmstate.c index 6152ca94636759..1aabbfbf6a9fec 100644 --- a/deps/icu-small/source/tools/toolutil/ucmstate.c +++ b/deps/icu-small/source/tools/toolutil/ucmstate.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -1044,3 +1046,4 @@ ucm_countChars(UCMStates *states, return count; } #endif + diff --git a/deps/icu-small/source/tools/toolutil/udbgutil.cpp b/deps/icu-small/source/tools/toolutil/udbgutil.cpp index 819cbd91150a12..bbb814ba901c41 100644 --- a/deps/icu-small/source/tools/toolutil/udbgutil.cpp +++ b/deps/icu-small/source/tools/toolutil/udbgutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2016, International Business Machines Corporation and @@ -13,6 +15,7 @@ #include "unicode/ulocdata.h" #include "unicode/ucnv.h" #include "unicode/unistr.h" +#include "cstr.h" /* To add a new enum type @@ -689,8 +692,9 @@ void KnownIssues::add(const char *ticket, const char *where, const UChar *msg, U } if(msg==NULL || !*msg) return; - std::string str; - fTable[ticket][where].insert(icu::UnicodeString(msg).toUTF8String(str)); + const icu::UnicodeString ustr(msg); + + fTable[ticket][where].insert(std::string(icu::CStr(ustr)())); } void KnownIssues::add(const char *ticket, const char *where, const char *msg, UBool *firstForTicket, UBool *firstForWhere) diff --git a/deps/icu-small/source/tools/toolutil/udbgutil.h b/deps/icu-small/source/tools/toolutil/udbgutil.h index 3f6ecb0c85ed5b..4bfb4cf86720a9 100644 --- a/deps/icu-small/source/tools/toolutil/udbgutil.h +++ b/deps/icu-small/source/tools/toolutil/udbgutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************ * Copyright (c) 2008-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/unewdata.c b/deps/icu-small/source/tools/toolutil/unewdata.c index 94af7859517748..0fb9d439c3662a 100644 --- a/deps/icu-small/source/tools/toolutil/unewdata.c +++ b/deps/icu-small/source/tools/toolutil/unewdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -39,7 +41,7 @@ udata_create(const char *dir, const char *type, const char *name, uint16_t headerSize, commentLength; char filename[512]; uint8_t bytes[16]; - int length; + int32_t length; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return NULL; @@ -54,14 +56,14 @@ udata_create(const char *dir, const char *type, const char *name, *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return NULL; } - + /* Check that the full path won't be too long */ length = 0; /* Start with nothing */ if(dir != NULL && *dir !=0) /* Add directory length if one was given */ { - length += strlen(dir); - - /* Add 1 if dir doesn't end with path sep */ + length += strlen(dir); + + /* Add 1 if dir doesn't end with path sep */ if (dir[strlen(dir) - 1]!= U_FILE_SEP_CHAR) { length++; } @@ -72,15 +74,15 @@ udata_create(const char *dir, const char *type, const char *name, length += strlen(type); } - + /* LDH buffer Length error check */ - if(length > (sizeof(filename) - 1)) + if(length > ((int32_t)sizeof(filename) - 1)) { - *pErrorCode = U_BUFFER_OVERFLOW_ERROR; - uprv_free(pData); + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + uprv_free(pData); return NULL; } - + /* open the output file */ if(dir!=NULL && *dir!=0) { /* if dir has a value, we prepend it to the filename */ char *p=filename+strlen(dir); @@ -271,3 +273,4 @@ udata_writeUString(UNewDataMemory *pData, const UChar *s, int32_t length) { * End: * */ + diff --git a/deps/icu-small/source/tools/toolutil/unewdata.h b/deps/icu-small/source/tools/toolutil/unewdata.h index d25b8e9f749847..9cc39942258700 100644 --- a/deps/icu-small/source/tools/toolutil/unewdata.h +++ b/deps/icu-small/source/tools/toolutil/unewdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uoptions.c b/deps/icu-small/source/tools/toolutil/uoptions.c index 291e2fce4e7fb8..e5ce64a3728e99 100644 --- a/deps/icu-small/source/tools/toolutil/uoptions.c +++ b/deps/icu-small/source/tools/toolutil/uoptions.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uoptions.h b/deps/icu-small/source/tools/toolutil/uoptions.h index 59804793646886..6f8f53bc7c4fe2 100644 --- a/deps/icu-small/source/tools/toolutil/uoptions.h +++ b/deps/icu-small/source/tools/toolutil/uoptions.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -128,7 +130,7 @@ struct UOption { * where the error was detected. * * The OS/400 compiler requires that argv either be "char* argv[]", - * or "const char* const argv[]", and it will not accept, + * or "const char* const argv[]", and it will not accept, * "const char* argv[]" as a definition for main(). * * @param argv This parameter is modified diff --git a/deps/icu-small/source/tools/toolutil/uparse.c b/deps/icu-small/source/tools/toolutil/uparse.c index 71c7602cc007b4..373b67f9095623 100644 --- a/deps/icu-small/source/tools/toolutil/uparse.c +++ b/deps/icu-small/source/tools/toolutil/uparse.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -368,7 +370,7 @@ u_parseUTF8(const char *source, int32_t sLen, char *dest, int32_t destCapacity, if(sLen == -1) { sLen = (int32_t)strlen(source); } - + while(read < source+sLen) { sscanf(read, "%2x", &value); if(i < destCapacity) { diff --git a/deps/icu-small/source/tools/toolutil/uparse.h b/deps/icu-small/source/tools/toolutil/uparse.h index b379cf83548fdc..5ad766cf104c85 100644 --- a/deps/icu-small/source/tools/toolutil/uparse.h +++ b/deps/icu-small/source/tools/toolutil/uparse.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/writesrc.c b/deps/icu-small/source/tools/toolutil/writesrc.c index 6fd9f75dba743d..278336fb6be74e 100644 --- a/deps/icu-small/source/tools/toolutil/writesrc.c +++ b/deps/icu-small/source/tools/toolutil/writesrc.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -48,18 +50,16 @@ usrc_createWithHeader(const char *path, const char *filename, f=fopen(p, "w"); if(f!=NULL) { - char year[8]; const struct tm *lt; time_t t; time(&t); lt=localtime(&t); - strftime(year, sizeof(year), "%Y", lt); if(generator==NULL) { strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt); - fprintf(f, header, year, filename, buffer); + fprintf(f, header, filename, buffer); } else { - fprintf(f, header, year, filename, generator); + fprintf(f, header, filename, generator); } } else { fprintf( @@ -72,28 +72,34 @@ usrc_createWithHeader(const char *path, const char *filename, U_CAPI FILE * U_EXPORT2 usrc_create(const char *path, const char *filename, const char *generator) { + // TODO: Add parameter for the first year this file was generated, not before 2016. static const char *header= - "/*\n" - " * Copyright (C) 1999-%s, International Business Machines\n" - " * Corporation and others. All Rights Reserved.\n" - " *\n" - " * file name: %s\n" - " *\n" - " * machine-generated by: %s\n" - " */\n\n"; + "// Copyright (C) 2016 and later: Unicode, Inc. and others.\n" + "// License & terms of use: http://www.unicode.org/copyright.html\n" + "//\n" + "// Copyright (C) 1999-2016, International Business Machines\n" + "// Corporation and others. All Rights Reserved.\n" + "//\n" + "// file name: %s\n" + "//\n" + "// machine-generated by: %s\n" + "\n\n"; return usrc_createWithHeader(path, filename, generator, header); } U_CAPI FILE * U_EXPORT2 usrc_createTextData(const char *path, const char *filename, const char *generator) { + // TODO: Add parameter for the first year this file was generated, not before 2016. static const char *header= - "# Copyright (C) 1999-%s, International Business Machines\n" + "# Copyright (C) 2016 and later: Unicode, Inc. and others.\n" + "# License & terms of use: http://www.unicode.org/copyright.html\n" + "# Copyright (C) 1999-2016, International Business Machines\n" "# Corporation and others. All Rights Reserved.\n" "#\n" "# file name: %s\n" "#\n" "# machine-generated by: %s\n" - "#\n\n"; + "\n\n"; return usrc_createWithHeader(path, filename, generator, header); } @@ -190,7 +196,7 @@ usrc_writeUTrie2Struct(FILE *f, " %s+%ld,\n" /* data16 */ " NULL,\n", /* data32 */ indexName, - indexName, + indexName, (long)pTrie->indexLength); } else { /* 32-bit trie */ @@ -238,7 +244,7 @@ usrc_writeArrayOfMostlyInvChars(FILE *f, c=(uint8_t)p[i]; if(i>0) { /* Break long lines. Try to break at interesting places, to minimize revision diffs. */ - if( + if( /* Very long line. */ col>=32 || /* Long line, break after terminating NUL. */ diff --git a/deps/icu-small/source/tools/toolutil/writesrc.h b/deps/icu-small/source/tools/toolutil/writesrc.h index f4ca08103bbfc0..c82bf3c3345edd 100644 --- a/deps/icu-small/source/tools/toolutil/writesrc.h +++ b/deps/icu-small/source/tools/toolutil/writesrc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/xmlparser.cpp b/deps/icu-small/source/tools/toolutil/xmlparser.cpp index 8d467bac6a53f4..1c158da597d759 100644 --- a/deps/icu-small/source/tools/toolutil/xmlparser.cpp +++ b/deps/icu-small/source/tools/toolutil/xmlparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -62,62 +64,62 @@ UXMLParser::UXMLParser(UErrorCode &status) : // This is a sloppy implementation - just look for the leading // allow for a possible leading BOM. mXMLDecl(UnicodeString("(?s)\\uFEFF?<\\?xml.+?\\?>", -1, US_INV), 0, status), - + // XML Comment production #15 // example: " // note, does not detect an illegal "--" within comments mXMLComment(UnicodeString("(?s)", -1, US_INV), 0, status), - + // XML Spaces // production [3] mXMLSP(UnicodeString(XML_SPACES "+", -1, US_INV), 0, status), - + // XML Doctype decl production #28 // example " // or " // TODO: we don't actually parse the DOCTYPE or internal subsets. // Some internal dtd subsets could confuse this simple-minded // attempt at skipping over them, specifically, occcurences - // of closeing square brackets. These could appear in comments, + // of closeing square brackets. These could appear in comments, // or in parameter entity declarations, for example. mXMLDoctype(UnicodeString( "(?s)|\\[.*?\\].*?>)", -1, US_INV ), 0, status), - + // XML PI production #16 // example " mXMLPI(UnicodeString("(?s)<\\?.+?\\?>", -1, US_INV), 0, status), - + // XML Element Start Productions #40, #41 // example // capture #1: the tag name // mXMLElemStart (UnicodeString("(?s)<(" XML_NAME ")" // match "", -1, US_INV), 0, status), // match " >" - + // XML Element End production #42 // example mXMLElemEnd (UnicodeString("", -1, US_INV), 0, status), - + // XML Element Empty production #44 // example mXMLElemEmpty (UnicodeString("(?s)<(" XML_NAME ")" // match "", -1, US_INV), 0, status), // match " />" - + // XMLCharData. Everything but '<'. Note that & will be dealt with later. mXMLCharData(UnicodeString("(?s)[^<]*", -1, US_INV), 0, status), // Attribute name = "value". XML Productions 10, 40/41 - // Capture group 1 is name, + // Capture group 1 is name, // 2 is the attribute value, including the quotes. // // Note that attributes are scanned twice. The first time is with @@ -499,8 +501,8 @@ UXMLParser::createElement(RegexMatcher &mEl, UErrorCode &status) { // that parsed the attribue, which couldn't conveniently strip them. attValue.remove(0,1); // one char from the beginning attValue.truncate(attValue.length()-1); // and one from the end. - - // XML Attribue value normalization. + + // XML Attribue value normalization. // This is one of the really screwy parts of the XML spec. // See http://www.w3.org/TR/2004/REC-xml11-20040204/#AVNormalize // Note that non-validating parsers must treat all entities as type CDATA @@ -567,7 +569,7 @@ UXMLParser::scanContent(UErrorCode &status) { // Normalize the new-lines. (Before char ref substitution) mNewLineNormalizer.reset(result); result = mNewLineNormalizer.replaceAll(fOneLF, status); - + // TODO: handle CDATA fPos = mXMLCharData.end(0, status); } @@ -822,3 +824,4 @@ UXMLElement::getChildElement(const UnicodeString &name) const { U_NAMESPACE_END #endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ + diff --git a/deps/icu-small/source/tools/toolutil/xmlparser.h b/deps/icu-small/source/tools/toolutil/xmlparser.h index 30bd746beffdb3..aff9d88ce9de01 100644 --- a/deps/icu-small/source/tools/toolutil/xmlparser.h +++ b/deps/icu-small/source/tools/toolutil/xmlparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -135,7 +137,7 @@ class U_TOOLUTIL_API UXMLElement : public UObject { const UXMLParser *fParser; const UnicodeString *fName; // The tag name of this element (owned by the UXMLParser) - UnicodeString fContent; // The text content of this node. All element content is + UnicodeString fContent; // The text content of this node. All element content is // concatenated even when there are intervening nested elements // (which doesn't happen with most xml files we care about) // Sections of content containing only white space are dropped,
    formatdefault
    printf
    type
    default
    scanf
    type
    description
    %EdoublefloatScientific with an uppercase exponent
    %-allN/ALeft justify
    %+%d, %i, %o, %x, %e, %f, %g, %E, %GN/AAlways show the plus or minus sign. Needs data for plus sign.
    % %d, %i, %o, %x, %e, %f, %g, %E, %GN/AInstead of a "+" output a blank character for positive numbers.
    %#%d, %i, %o, %x, %e, %f, %g, %E, %GN/APrecede octal value with 0, hex with 0x and show the +
    %#%d, %i, %o, %x, %e, %f, %g, %E, %GN/APrecede octal value with 0, hex with 0x and show the decimal point for floats.
    %nallN/AWidth of input/output. num is an actual number from 0 to +
    %nallN/AWidth of input/output. num is an actual number from 0 to some large number.
    %.n%e, %f, %g, %E, %F, %GN/ASignificant digits precision. num is an actual number from 0 to some large number.
    If * is used in printf, then the precision is passed in as an argument before the number to be formatted.