| /* |
| ******************************************************************************* |
| * Copyright © {1996-2001}, International Business Machines Corporation and others. All Rights Reserved. |
| ******************************************************************************* |
| * File unorm.cpp |
| * |
| * Created by: Vladimir Weinstein 12052000 |
| * |
| * Modification history : |
| * |
| * Date Name Description |
| * 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 |
| * mode NFC. |
| */ |
| |
| #include "unicode/unorm.h" |
| #include "unicode/normlzr.h" |
| #include "unicode/ustring.h" |
| #include "cpputils.h" |
| #include "ustr_imp.h" |
| |
| /* added by synwee */ |
| #include "unicode/uchar.h" |
| #include "unicode/utf16.h" |
| |
| /* added by synwee for trie manipulation*/ |
| #define STAGE_1_SHIFT_ 10 |
| #define STAGE_2_SHIFT_ 4 |
| #define STAGE_2_MASK_AFTER_SHIFT_ 0x3F |
| #define STAGE_3_MASK_ 0xF |
| |
| /* added by synwee for fast route in quickcheck and fcd */ |
| #define NFC_ZERO_CC_BLOCK_LIMIT_ 0x300 |
| |
| /** |
| * Array of mask for determining normalization quick check values. |
| * Indexes follows the values in UNormalizationMode |
| */ |
| static const uint8_t UQUICK_CHECK_MASK_[] = {0, 0, 0x11, 0x22, 0x44, 0x88}; |
| /* |
| * Array of minimum codepoints that has UNORM_MAYBE or UNORM_NO quick check |
| * values. Indexes follows the values in UNormalizationMode. |
| * Generated values! Edit at your own risk. |
| */ |
| static const UChar32 UQUICK_CHECK_MIN_VALUES_[] = {0, 0, 0xc0, 0xa0, 0x300, |
| 0xa0}; |
| /** |
| * Minimum value to determine if quickcheck value contains a MAYBE |
| */ |
| static const uint8_t MIN_UNORM_MAYBE_ = 0x10; |
| |
| |
| U_CAPI int32_t |
| unorm_normalize(const UChar* source, |
| int32_t sourceLength, |
| UNormalizationMode mode, |
| int32_t option, |
| UChar* result, |
| int32_t resultLength, |
| UErrorCode* status) |
| { |
| if(U_FAILURE(*status)) return -1; |
| |
| /* synwee : removed hard coded conversion */ |
| Normalizer::EMode normMode = Normalizer::getNormalizerEMode(mode, *status); |
| if (U_FAILURE(*status)) |
| return -1; |
| |
| int32_t len = (sourceLength == -1 ? u_strlen(source) : sourceLength); |
| const UnicodeString src((UChar*)source, len, len); |
| UnicodeString dst(result, 0, resultLength); |
| /* synwee : note quickcheck is added in C ++ normalize method */ |
| if ((option & UNORM_IGNORE_HANGUL) != 0) |
| option = Normalizer::IGNORE_HANGUL; |
| Normalizer::normalize(src, normMode, option, dst, *status); |
| int32_t actualLen; |
| T_fillOutputParams(&dst, result, resultLength, &actualLen, status); |
| return actualLen; |
| } |
| |
| /** |
| * Array of normalization form corresponding to the index code point. |
| * Hence codepoint 0xABCD will have normalization form QUICK_CHECK_DATA[0xABCD]. |
| * UQUICK_CHECK_DATA[0xABCD] is a byte containing 2 sets of 4 bits information |
| * representing UNORM_MAYBE and UNORM_YES.<br> |
| * bits 1 2 3 4 5678<br> |
| * NFKC NFC NFKD NFD MAYBES NFKC NFC NFKD NFD YES<br> |
| * ie if UQUICK_CHECK_DATA[0xABCD] = 10000001, this means that 0xABCD is in |
| * NFD form and maybe in NFKC form |
| * |
| * Generated data!! Change at your own risk. |
| * Situated here temporary. |
| */ |
| static const uint32_t QUICKCHECK_STAGE_1_[] = |
| { |
| 0x0, 0x40, 0x6e, 0xac, 0xea, 0x107, 0x107, 0x127, 0x167, 0x1a1, |
| 0x107, 0x1b8, 0x1f8, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x238, 0x238, 0x238, 0x238, 0x238, 0x238, 0x238, |
| 0x238, 0x238, 0x238, 0x23e, 0x27e, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x2be, 0x2fc, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x33c, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, |
| 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x33c |
| }; |
| |
| static const uint32_t QUICKCHECK_STAGE_2_[] = |
| { |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x10, 0x1d, 0x2d, 0x3d, 0x2d, 0x4c, 0x5b, 0x6b, 0x65, 0x7a, |
| 0x89, 0x69, 0x65, 0x95, 0x0, 0x0, 0xa5, 0xb4, 0xc0, 0xcd, |
| 0x67, 0xdc, 0x5b, 0x5f, 0xec, 0xf8, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x108, 0x0, 0x111, 0x11a, 0x0, 0x12a, 0x138, |
| 0x145, 0x152, 0x162, 0x0, 0x0, 0x16e, 0x17d, 0xb4, 0x18d, 0xb4, |
| 0x19d, 0x1ad, 0x0, 0x1bd, 0x1cd, 0xab, 0x0, 0xab, 0x0, 0x1cd, |
| 0x0, 0x1dc, 0x0, 0x0, 0x0, 0x0, 0x1e1, 0x1f1, 0x1f9, 0x203, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20d, 0x0, |
| 0x0, 0x219, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x227, 0x0, |
| 0x0, 0x234, 0x0, 0x23f, 0x0, 0x0, 0x0, 0x0, 0x24f, 0xb1, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xab, 0x25e, |
| 0x0, 0x26b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27b, 0x28a, 0x297, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a7, 0x0, 0x2ae, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x27b, 0x2bd, 0x2ca, 0x0, 0x0, 0x0, 0xb0, 0x0, 0x27b, |
| 0x2d8, 0x216, 0x0, 0x0, 0x0, 0x0, 0xac, 0x217, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x2e8, 0x2f4, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x27b, 0x2d8, 0x216, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x2fb, 0x30b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31b, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x31b, 0x0, 0x31f, 0x0, 0x0, |
| 0x4, 0x0, 0x0, 0x0, 0x32d, 0x338, 0x345, 0x352, 0x361, 0x32d, |
| 0x338, 0x345, 0x0, 0x0, 0x0, 0x0, 0x36b, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37a, 0x384, 0x0, 0x0, |
| 0x38c, 0x394, 0x3a1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x3b1, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0xf2, 0x5b, 0x1fb, 0x5b, 0x5b, 0x1fb, 0x3c1, 0x5b, |
| 0x3d0, 0x5b, 0x5b, 0x5b, 0x3e0, 0x3ef, 0x3ff, 0x40f, 0x41f, 0x42f, |
| 0x43e, 0x44a, 0x456, 0x465, 0x0, 0x0, 0x475, 0x479, 0x0, 0x8, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x484, 0x490, 0x4a0, 0x4ac, 0x0, |
| 0x476, 0x4bc, 0x4bc, 0x0, 0x28b, 0x363, 0x0, 0x1e4, 0x0, 0x0, |
| 0x0, 0x4cc, 0x0, 0x4d9, 0x4e8, 0x4f7, 0x0, 0x4fe, 0x50c, 0x50c, |
| 0x0, 0x1e5, 0x0, 0x0, 0x0, 0x51c, 0x0, 0x0, 0x0, 0x52a, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x53a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31b, 0x4bc, 0x4bc, |
| 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x119, 0x0, 0x0, 0x4e8, 0x0, 0x0, 0x545, 0x550, 0x55c, |
| 0x568, 0x578, 0x0, 0x586, 0x550, 0x55c, 0x568, 0x578, 0x0, 0x595, |
| 0x0, 0x0, 0x0, 0x478, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x479, 0x477, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4bc, 0x4bf, 0x4bc, 0x4bc, |
| 0x5a5, 0x0, 0x4bc, 0x4c0, 0x4bc, 0x4bc, 0x4bc, 0x4e8, 0x4c0, 0x4bc, |
| 0x4bc, 0x479, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x5b5, |
| 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4be, 0x4bc, 0x479, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, |
| 0x5b, 0x5b, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c5, |
| 0x5c5, 0x5c5, 0x5c5, 0x5c5, 0x5c7, 0x5d7, 0x5e5, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x5f5, 0x602, 0x612, 0x61c, 0x62c, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x63b, 0x0, 0x476, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x4bc, 0x4bc, 0x4be, 0x0, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x477, |
| 0x4bc, 0x4bc, 0x109, 0x0, 0x0, 0x4c0, 0x0, 0x0, 0x0, 0x4bc, |
| 0x64b, 0x658, 0x661, 0x671, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x4bc, |
| 0x4bc, 0x4bf, 0x478, 0x4bc, 0x4bc, 0x4bc, 0x4bc, 0x479, 0x478, 0x4bc, |
| 0x4bc, 0x4bc, 0x4bc, 0x479, 0x681, 0x689, 0x699, 0x6a8, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x6a8 |
| }; |
| |
| static const uint8_t QUICKCHECK_STAGE_3_[] = |
| { |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0x5, 0xf, 0x5, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, |
| 0xf, 0x5, 0x5, 0x5, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xf, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xf, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xf, 0x5, 0x5, 0xc, 0xc, 0xc, 0xc, |
| 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0x5, 0xf, 0xf, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0x5, 0xf, 0xf, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0x5, 0xc, 0xc, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xc, |
| 0xc, 0x5, 0x5, 0x5, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xc3, |
| 0xc3, 0xc3, 0xc3, 0xf, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, |
| 0xc3, 0xf, 0xf, 0xc3, 0xf, 0xc3, 0xc3, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xc3, |
| 0xc3, 0xc3, 0xc3, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xc3, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xc3, 0x0, 0x0, 0xc3, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0xf, 0xf, 0xf, |
| 0x0, 0xf, 0xf, 0xf, 0xf, 0x5, 0x4, 0xc, 0x0, 0xc, |
| 0xc, 0xc, 0xf, 0xc, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0x5, |
| 0x5, 0x5, 0x4, 0x4, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0x5, 0x5, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xc, 0xf, 0xc, 0xf, 0xf, 0xf, 0xc, 0xf, |
| 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, |
| 0xc, 0xf, 0xf, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xf, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xc3, 0xc3, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xf, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xf, 0xf, |
| 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xc3, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, |
| 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, |
| 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, |
| 0xf, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xc3, 0xc3, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, |
| 0xc, 0xf, 0xf, 0xf, 0xc, 0xf, 0xc3, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xc, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc3, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, |
| 0xf, 0xc, 0xc, 0xc, 0xc3, 0xf, 0xf, 0xf, 0x5, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, |
| 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0x5, 0x0, 0x5, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, |
| 0xf, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, |
| 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc3, 0xc3, 0xc3, 0xc3, |
| 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, |
| 0xc3, 0xc3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0xc, 0x5, 0x4, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, |
| 0xc, 0xf, 0xc, 0xf, 0xc, 0xf, 0xc, 0x0, 0xc, 0x0, |
| 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, |
| 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, 0xc, 0xf, 0xc, 0xc, |
| 0xc, 0xc, 0xc, 0x0, 0xc, 0x5, 0x0, 0x5, 0x4, 0xc, |
| 0xc, 0xc, 0xf, 0xc, 0xc, 0xc, 0x0, 0xc, 0x0, 0xc, |
| 0x4, 0x4, 0x4, 0xc, 0xc, 0xc, 0x0, 0xf, 0xf, 0xc, |
| 0xc, 0xc, 0xc, 0xc, 0x0, 0xf, 0x4, 0x4, 0x4, 0xc, |
| 0xc, 0xc, 0x0, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, |
| 0x0, 0xc, 0x4, 0x0, 0x0, 0xf, 0xf, 0xc, 0xc, 0xc, |
| 0xf, 0xc, 0xc, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x5, |
| 0xf, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0x5, 0x5, 0xf, 0x5, 0x5, 0xf, 0xf, |
| 0xf, 0xf, 0x5, 0xf, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0xf, 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0xf, 0x5, 0x5, 0x5, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0xf, 0x5, 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, 0xf, 0x5, 0xf, |
| 0x0, 0xf, 0x5, 0xf, 0x0, 0x0, 0x5, 0x5, 0xf, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, |
| 0xf, 0xf, 0xc, 0xf, 0xf, 0xf, 0xf, 0xc, 0xf, 0xf, |
| 0xc, 0xf, 0xf, 0xf, 0xf, 0xc, 0xf, 0xc, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0x5, 0x5, 0xf, 0x5, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xc, 0xf, 0xf, 0xc, 0xf, 0xf, 0xc, 0xf, |
| 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xc, 0xc, 0xf, 0xf, 0xc, 0xc, 0xf, 0xf, |
| 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, |
| 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xc, |
| 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0x5, 0xf, 0x5, 0x5, 0x5, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xc, 0xf, 0xc, 0xf, 0xc, 0xf, 0xc, 0xf, |
| 0xc, 0xf, 0xc, 0xf, 0xc, 0xf, 0xc, 0xf, 0xf, 0xc, |
| 0xf, 0xc, 0xf, 0xc, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xc, 0xc, 0xf, 0xc, 0xc, 0xf, 0xc, 0xc, 0xf, 0xc, |
| 0xc, 0xf, 0xc, 0xc, 0xf, 0xf, 0xf, 0xf, 0xc, 0xf, |
| 0xf, 0xf, 0xf, 0xc3, 0xc3, 0x5, 0x5, 0xf, 0xc, 0xf, |
| 0xf, 0xf, 0xf, 0xc, 0xf, 0xf, 0xc, 0xc, 0xc, 0xc, |
| 0xf, 0xf, 0xf, 0xc, 0xf, 0x5, 0x5, 0x5, 0x5, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, |
| 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, |
| 0x0, 0x0, 0x0, 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xc, 0xf, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, |
| 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x5, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0xf, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0x5, |
| 0x5, 0x5, 0xf, 0x5, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, 0x5, 0x5, |
| 0x5, 0xf, 0xf, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0x5, 0x5, 0x5, |
| 0x5, 0x5, 0x5, 0x5, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, |
| 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0 |
| }; |
| |
| /** |
| * Performing quick check on a string, to quickly determine if the string is |
| * in a particular normalization format. |
| * Three types of result can be returned UNORM_YES, UNORM_NO or |
| * UNORM_MAYBE. Result UNORM_YES indicates that the argument |
| * string is in the desired normalized format, UNORM_NO determines that |
| * argument string is not in the desired normalized format. A |
| * UNORM_MAYBE result indicates that a more thorough check is required, |
| * the user may have to put the string in its normalized form and compare the |
| * results. |
| * @param source string for determining if it is in a normalized format |
| * @param sourcelength length of source to test |
| * @param mode normalization format from the enum UNormalizationMode |
| * @param status A pointer to an UErrorCode to receive any errors |
| * @return UNORM_YES, UNORM_NO or UNORM_MAYBE |
| */ |
| U_CAPI UNormalizationCheckResult |
| unorm_quickCheck(const UChar *source, |
| int32_t sourcelength, |
| UNormalizationMode mode, |
| UErrorCode* status) |
| { |
| uint8_t oldcombiningclass = 0; |
| uint8_t combiningclass; |
| uint8_t quickcheckvalue; |
| uint8_t mask = UQUICK_CHECK_MASK_[mode]; |
| UChar32 min = UQUICK_CHECK_MIN_VALUES_[mode]; |
| UChar32 codepoint; |
| UNormalizationCheckResult result = UNORM_YES; |
| const UChar *psource; |
| const UChar *pend; |
| |
| if (U_FAILURE(*status)) { |
| return UNORM_MAYBE; |
| } |
| |
| /* checking argument*/ |
| if (mode >= UNORM_MODE_COUNT || mode < UNORM_NONE) { |
| *status = U_ILLEGAL_ARGUMENT_ERROR; |
| return UNORM_MAYBE; |
| } |
| |
| if (sourcelength >= 0) { |
| psource = source; |
| pend = source + sourcelength; |
| for (;;) { |
| if (psource >= pend) { |
| return UNORM_YES; |
| } |
| /* fast route : since codepoints < min has combining class 0 and YES |
| looking at the minimum values, surrogates are not a problem */ |
| if (*psource >= min) { |
| break; |
| } |
| psource ++; |
| } |
| } |
| else { |
| psource = source; |
| for (;;) { |
| if (*psource == 0) { |
| return UNORM_YES; |
| } |
| /* fast route : since codepoints < min has combining class 0 and YES |
| looking at the minimum values, surrogates are not a problem */ |
| if (*psource >= min) { |
| break; |
| } |
| psource ++; |
| } |
| } |
| |
| if (sourcelength >= 0) { |
| for (;;) { |
| int count = 0; |
| |
| if (psource >= pend) { |
| break; |
| } |
| UTF_NEXT_CHAR(psource, count, pend - psource, codepoint); |
| combiningclass = u_getCombiningClass(codepoint); |
| /* not in canonical order */ |
| |
| if (oldcombiningclass > combiningclass && combiningclass != 0) { |
| return UNORM_NO; |
| } |
| |
| oldcombiningclass = combiningclass; |
| |
| /* trie access */ |
| quickcheckvalue = QUICKCHECK_STAGE_3_[ |
| QUICKCHECK_STAGE_2_[QUICKCHECK_STAGE_1_[codepoint >> STAGE_1_SHIFT_] + |
| ((codepoint >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_)] + |
| (codepoint & STAGE_3_MASK_)] & mask; |
| /* value is a byte containing 2 sets of 4 bits information. |
| bits 1 2 3 4 5678<br> |
| NFKC NFC NFKD NFD MAYBES NFKC NFC NFKD NFD YES<br> |
| ie if quick[0xABCD] = 10000001, this means that 0xABCD is in NFD form |
| and maybe in NFKC form. */ |
| if (quickcheckvalue == 0) { |
| return UNORM_NO; |
| } |
| if (quickcheckvalue >= MIN_UNORM_MAYBE_) { |
| result = UNORM_MAYBE; |
| } |
| psource += count; |
| } |
| } |
| else { |
| for (;;) { |
| int count = 0; |
| UTF_NEXT_CHAR(psource, count, pend - psource, codepoint); |
| if (codepoint == 0) { |
| break; |
| } |
| |
| combiningclass = u_getCombiningClass(codepoint); |
| /* not in canonical order */ |
| |
| if (oldcombiningclass > combiningclass && combiningclass != 0) { |
| return UNORM_NO; |
| } |
| |
| oldcombiningclass = combiningclass; |
| |
| /* trie access */ |
| quickcheckvalue = QUICKCHECK_STAGE_3_[ |
| QUICKCHECK_STAGE_2_[QUICKCHECK_STAGE_1_[codepoint >> STAGE_1_SHIFT_] + |
| ((codepoint >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_)] + |
| (codepoint & STAGE_3_MASK_)] & mask; |
| /* value is a byte containing 2 sets of 4 bits information. |
| bits 1 2 3 4 5678<br> |
| NFKC NFC NFKD NFD MAYBES NFKC NFC NFKD NFD YES<br> |
| ie if quick[0xABCD] = 10000001, this means that 0xABCD is in NFD form |
| and maybe in NFKC form. */ |
| if (quickcheckvalue == 0) { |
| return UNORM_NO; |
| } |
| if (quickcheckvalue >= MIN_UNORM_MAYBE_) { |
| result = UNORM_MAYBE; |
| } |
| psource += count; |
| } |
| } |
| |
| return result; |
| } |
| |
| /* private data members ----------------------------------------------------- */ |
| |
| /** |
| * Trie data for FCD. |
| * Each index corresponds to each code point. Trie value is the combining class |
| * of the last character of the NFD of the codepoint. |
| * Generated data!! Change at your own risk. |
| * Situated here temporary. |
| */ |
| static const uint32_t FCD_STAGE_1_[] = |
| { |
| 0x0, 0x40, 0x75, 0xb2, 0xef, 0xf3, 0x131, 0x151, 0x191, 0x1c0, |
| 0x1c0, 0x1c0, 0x1fe, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x20e, 0x243, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, |
| 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0 |
| }; |
| |
| static const uint32_t FCD_STAGE_2_[] = |
| { |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x10, 0x20, 0x10, 0x2f, 0x3e, 0x4e, 0x5c, 0x6c, |
| 0x7b, 0x89, 0x95, 0xa3, 0x0, 0x0, 0xb3, 0xc2, 0x3, 0xd2, |
| 0xe0, 0xef, 0xf7, 0xff, 0x10f, 0x11b, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x12b, |
| 0x13a, 0x146, 0x153, 0x0, 0x163, 0x0, 0x16e, 0x17d, 0x6, 0x17d, |
| 0x183, 0x192, 0x0, 0x0, 0x1a2, 0x1b1, 0x0, 0x1b1, 0x0, 0x1a2, |
| 0x0, 0x1bb, 0x1c8, 0x0, 0x0, 0x0, 0x17b, 0x1d8, 0x1e0, 0x1ea, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f9, |
| 0x207, 0x217, 0x227, 0x0, 0x0, 0x0, 0x0, 0x0, 0x235, 0x0, |
| 0x23c, 0x24c, 0x0, 0x25c, 0x0, 0x0, 0x0, 0x0, 0x26c, 0x279, |
| 0x288, 0x0, 0x0, 0x297, 0x0, 0x2a7, 0x2b6, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c1, 0x2d0, 0x2dd, 0x2ec, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x2fc, 0x2dd, 0x309, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x319, 0x2dd, 0x326, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x2fc, 0x2dd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2fc, 0x2dd, |
| 0x335, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2dd, 0x0, 0x0, |
| 0x0, 0x0, 0x343, 0x351, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x2dd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2dd, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x358, 0x363, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x371, 0x37c, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x388, 0x392, 0x0, 0x0, 0x0, 0x0, 0x39e, 0x0, 0x3a9, |
| 0x0, 0x0, 0x0, 0x3b8, 0x3c8, 0x0, 0x0, 0x0, 0x3d2, 0x0, |
| 0x0, 0x0, 0x3db, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x3e9, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400, |
| 0x410, 0x41c, 0x42a, 0x438, 0x444, 0x450, 0x45c, 0x46c, 0x47a, 0x48a, |
| 0x46c, 0x490, 0xf7, 0x498, 0x4a8, 0xf7, 0x1e2, 0xf7, 0xf7, 0x1e2, |
| 0x4b8, 0xf7, 0x4c7, 0x4d7, 0x4d7, 0x4d7, 0x4e7, 0x4f6, 0x503, 0x510, |
| 0x51f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x52f, 0x53e, 0x0, 0x0, 0x0, 0x543, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x54f, 0x55b, 0x0, 0x56a, |
| 0x0, 0x0, 0x0, 0x57a, 0x0, 0x587, 0x0, 0x596, 0x0, 0x59d, |
| 0x5ab, 0x5ab, 0x0, 0x5b5, 0x0, 0x0, 0x0, 0x5c1, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x5cf, 0x0, 0x5df, 0x5eb, 0x5f7, 0x607, 0x0, 0x615, |
| 0x5df, 0x5eb, 0x5f7, 0x607, 0x0, 0x624, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x633, 0x643, 0x653, 0x663, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x11b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0 |
| }; |
| static const uint8_t FCD_STAGE_3_[] = |
| { |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0x0, 0xca, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, |
| 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0x0, |
| 0x0, 0x0, 0xe6, 0xe6, 0xca, 0xca, 0x0, 0xe6, 0xe6, 0xca, |
| 0xca, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xca, 0xca, |
| 0xe6, 0xe6, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, |
| 0x0, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xca, 0xca, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0xd8, |
| 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xca, 0xca, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0x0, 0x0, 0x0, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xdc, 0x0, 0x0, 0xe6, |
| 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xca, |
| 0xca, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe8, 0xdc, 0xdc, 0xdc, 0xdc, 0xe8, |
| 0xd8, 0xdc, 0xdc, 0xdc, 0xdc, 0xca, 0xca, 0xdc, 0xdc, 0xdc, |
| 0xdc, 0xca, 0xca, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, |
| 0x1, 0x1, 0x1, 0x1, 0x1, 0xdc, 0xdc, 0xdc, 0xdc, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xf0, 0xe6, 0xdc, 0xdc, 0xdc, 0xe6, |
| 0xe6, 0xe6, 0xdc, 0xdc, 0x0, 0xea, 0xea, 0xe9, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0xe6, 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0x0, 0xe6, 0x0, |
| 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, |
| 0x0, 0xe6, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, |
| 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, |
| 0x0, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xdc, 0xe6, 0xe6, 0xe6, 0xde, 0xdc, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0x0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, |
| 0xe6, 0xe6, 0xde, 0xe4, 0xe6, 0xa, 0xb, 0xc, 0xd, 0xe, |
| 0xf, 0x10, 0x11, 0x12, 0x13, 0x0, 0x14, 0x15, 0x16, 0x0, |
| 0x17, 0x0, 0x18, 0x19, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0xe6, |
| 0xdc, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, |
| 0x22, 0xe6, 0xe6, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0xe6, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, 0xe6, |
| 0xe6, 0xdc, 0xe6, 0x0, 0x0, 0xe6, 0xe6, 0x0, 0xdc, 0xe6, |
| 0xe6, 0xdc, 0x0, 0x0, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, |
| 0xdc, 0xe6, 0xe6, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xe6, |
| 0xdc, 0xdc, 0xe6, 0xdc, 0xe6, 0xe6, 0xdc, 0xe6, 0xdc, 0xe6, |
| 0xdc, 0xe6, 0xdc, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x7, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0xe6, |
| 0xdc, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x7, |
| 0x7, 0x7, 0x7, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, |
| 0x7, 0x0, 0x7, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x7, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x0, 0x0, |
| 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x7, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x5b, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x54, 0x5b, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, |
| 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x67, |
| 0x67, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x6b, 0x6b, 0x6b, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x76, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x7a, 0x7a, 0x7a, 0x7a, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0xdc, 0xdc, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0xdc, 0x0, 0xdc, 0x0, 0xd8, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x81, 0x82, 0x82, 0x84, 0x84, 0x82, 0x0, |
| 0x82, 0x0, 0x82, 0x82, 0x82, 0x82, 0x0, 0x0, 0x82, 0x82, |
| 0xe6, 0xe6, 0x9, 0x0, 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x9, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe4, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xdc, |
| 0xca, 0xca, 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, |
| 0xca, 0xca, 0xdc, 0xdc, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xdc, |
| 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0x0, 0xe6, 0x0, 0x0, |
| 0x0, 0x0, 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xdc, 0xdc, |
| 0xdc, 0xdc, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, 0xdc, 0xdc, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0xe6, 0x0, 0xe6, |
| 0x0, 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xf0, |
| 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, |
| 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe6, 0xe6, 0xf0, 0xf0, 0xf0, |
| 0x0, 0xe6, 0xf0, 0xe6, 0xe6, 0xe6, 0xe6, 0xf0, 0x0, 0x0, |
| 0x0, 0xe6, 0xf0, 0xf0, 0xf0, 0x0, 0xe6, 0xf0, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xf0, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0x0, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x0, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
| 0xe6, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0x0, 0xe6, 0xf0, 0xe6, |
| 0xe6, 0xe6, 0xe6, 0xf0, 0x0, 0x0, 0x0, 0xe6, 0xe6, 0x1, |
| 0x1, 0xe6, 0xe6, 0xe6, 0xe6, 0x1, 0x1, 0x1, 0xe6, 0xe6, |
| 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, |
| 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, |
| 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, |
| 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, |
| 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, |
| 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0xe4, 0xe8, |
| 0xde, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, |
| 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, |
| 0x0, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x8, 0x8, 0x0, 0x8, 0x8, 0x0, 0x8, |
| 0x8, 0x0, 0x8, 0x8, 0x0, 0x8, 0x8, 0x0, 0x0, 0x0, |
| 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x0, 0x0, |
| 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x8, |
| 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0xe, 0x1a, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x18, 0x19, 0x18, 0x19, 0x11, 0x12, 0x15, |
| 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x0, 0x15, 0x15, 0x15, |
| 0x15, 0x15, 0x0, 0x15, 0x0, 0x15, 0x15, 0x0, 0x15, 0x15, |
| 0x0, 0x15, 0x15, 0x15, 0x15, 0x15, 0x13, 0x17, 0x17, 0x17, |
| 0x0 |
| }; |
| |
| /* private methods ---------------------------------------------------------- */ |
| |
| /** |
| * Private method which performs a quick FCD check on a string, to quickly |
| * determine if a string is in a required FCD format. |
| * FCD is the set of strings such that for each character in the string, |
| * decomposition without any canonical reordering will produce a NFD. |
| * @param source string for determining if it is in a normalized format |
| * @param sourcelength length of source to test |
| * @paran mode normalization format from the enum UNormalizationMode |
| * @param status A pointer to an UErrorCode to receive any errors |
| * @return TRUE if source is in FCD format, FALSE otherwise |
| */ |
| U_CAPI UBool |
| checkFCD(const UChar* source, int32_t sourcelength, UErrorCode* status) |
| { |
| UChar32 codepoint; |
| const UChar *psource; |
| const UChar *pend; |
| uint8_t oldfcd = 0; |
| uint8_t fcd = 0; |
| |
| if (U_FAILURE(*status)) |
| return FALSE; |
| |
| if (sourcelength >= 0) { |
| psource = source; |
| pend = source + sourcelength; |
| for (;;) { |
| if (psource >= pend) { |
| return TRUE; |
| } |
| /* fast route : since codepoints < NFC_ZER_CC_BLOCK_LIMIT_ has |
| combining class 0. |
| looking at the minimum values, surrogates are not a problem */ |
| if (*psource >= NFC_ZERO_CC_BLOCK_LIMIT_) { |
| break; |
| } |
| psource ++; |
| } |
| } |
| else { |
| psource = source; |
| for (;;) { |
| if (*psource == 0) { |
| return TRUE; |
| } |
| /* fast route : since codepoints < min has combining class 0 and YES |
| looking at the minimum values, surrogates are not a problem */ |
| if (*psource >= NFC_ZERO_CC_BLOCK_LIMIT_) { |
| break; |
| } |
| psource ++; |
| } |
| } |
| |
| if (sourcelength >= 0) { |
| for (;;) { |
| int count = 0; |
| |
| if (psource >= pend) { |
| return TRUE; |
| } |
| |
| UTF_NEXT_CHAR(psource, count, pend - psource, codepoint); |
| |
| /* trie access */ |
| fcd = FCD_STAGE_3_[ |
| FCD_STAGE_2_[FCD_STAGE_1_[codepoint >> STAGE_1_SHIFT_] + |
| ((codepoint >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_)] + |
| (codepoint & STAGE_3_MASK_)]; |
| |
| if (fcd != 0 && oldfcd > fcd) { |
| return FALSE; |
| } |
| |
| oldfcd = fcd; |
| psource += count; |
| } |
| } |
| else { |
| for (;;) { |
| int count = 0; |
| UTF_NEXT_CHAR(psource, count, pend - psource, codepoint); |
| if (codepoint == 0) { |
| return TRUE; |
| } |
| /* trie access */ |
| fcd = FCD_STAGE_3_[ |
| FCD_STAGE_2_[FCD_STAGE_1_[codepoint >> STAGE_1_SHIFT_] + |
| ((codepoint >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_)] + |
| (codepoint & STAGE_3_MASK_)]; |
| |
| if (fcd != 0 && oldfcd > fcd) { |
| return FALSE; |
| } |
| |
| oldfcd = fcd; |
| psource += count; |
| } |
| } |
| } |